def call(self, auth, name):
node_type = NodeType(self.api)
node_type['node_type'] = name
- node_type.sync(insert = True)
+ node_type.sync(commit = True)
return 1
from PLC.Auth import Auth
can_update = lambda (field, value): field in \
- ['enabled', 'tenant_name', 'description']
+ ['login_base', 'enabled', 'tenant_name', 'description', 'name', 'abbreviated_name' ]
class AddSite(Method):
"""
site_fields = dict(filter(can_update, site_fields.items()))
site = Site(self.api, site_fields)
site.sync()
- return site.id
+ return site['id']
def call(self, auth):
- return [node_type['node_type'] for node_type in NodeTypes(self.api)]
+ return [node_type.node_type for node_type in NodeTypes(self.api)]
# Functions for interacting with the node_types table in the database
#
#
-
+from types import StringTypes
from PLC.Faults import *
from PLC.Parameter import Parameter
from PLC.Storage.AlchemyObject import AlchemyObj
for node in nodes:
self.append(node)
+
+ def refresh(self, api):
+ default_site = Sites().select(filter={'login_base': 'default'})[0]
+ # get current list of compute nodes
+ hypervisors = self.api.client_shell.nova.hypervisors.list()
+ compute_hosts = [h.hypervisor_hostname for h in hypervisors]
+
+ nodes = Node().select()
+ hostsnames = [node['hostname'] for node in nodes]
+
+ added_nodes = set(compute_hosts).difference(hostnames)
+ for added_node in added_nodes:
+ node = Node(api, {'hostname': added_node, 'site_id': default_site['site_id']})
+ node.sync()
+
+
+
for site_person in site_persons:
self.append(site_person)
+
+ def delete(self, filter={}):
+ site_persons = SitePerson().select(filter)
+ for site_person in site_persons:
+ site_person.delete()
self.object = tenants[0]
self['tenant_id'] = self.object.id
# sync the plc record
- AlchemyObj.insert(self, dict(self))
+ AlchemyObj.insert(self, dict(self))
+ site = AlchemyObj.select(self, filter={'tenant_id': self['tenant_id']})[0]
+ self['site_id'] = site.site_id
+
else:
self.object = self.api.client_shell.keystone.tenants.update(self['tenant_id'], **nova_site)
AlchemyObj.update(self, {'site_id': self['site_id']}, dict(self))
self.api.client_shell.keystone.tenants.delete(tenant)
# delete relationships
- SitePerson().delete(filter={'site_id': self['site_id']})
- Slice().delete(filter={'site_id': self['site_id']})
- PCU().delete(filter={'site_id': self['site_id']})
- Node().delete(filter={'site_id': self['site_id']})
- Address().delete(filter={'site_id': self['site_id']})
- SiteTag().delete(filter={'site_id': self['site_id']})
+ for site_person in SitePerson().select(filter={'site_id': self['site_id']}):
+ site_person.delete()
+ for slice in Slice().select(filter={'site_id': self['site_id']}):
+ slice.delete()
+ for pcu in PCU().select(filter={'site_id': self['site_id']}):
+ pcu.delete()
+ for node in Node().select(filter={'site_id': self['site_id']}):
+ node.delete()
+ for address in SiteAddress().select(filter={'site_id': self['site_id']}):
+ address.delete()
+ for site_tag in SiteTag().select(filter={'site_id': self['site_id']}):
+ site_tag.delete()
# delete site
- AlchemyObj.delete(self, dict(self))
+ AlchemyObj.delete(self, filter={'site_id': self['site_id']})
self.api.client_shell.keystone.tenants.delete(tenant)
# delete relationships
- SlicePerson().delete(self, filter={'slice_id': self['slice_id']})
- SliceNode().delete(self, filter={'slice_id': self['slice_id']})
- SliceTag().delete(self, filter={'slice_id': self['slice_id']})
+ for slice_person in SlicePerson().select(filter={'slice_id': self['slice_id']}):
+ slice_person.delete()
+ for slice_node in SliceNode().select(filter={'slice_id': self['slice_id']}):
+ slice_node.delete()
+ for slice_tag in SliceTag().select(filter={'slice_id': self['slice_id']}):
+ slice_tag.delete()
# delete slice
AlchemyObj.delete(self, dict(self))