From 2f1ce7c5d9f996fefcab4b166c639b56df996fd6 Mon Sep 17 00:00:00 2001 From: Tony Mack Date: Thu, 7 Mar 2013 21:52:29 -0500 Subject: [PATCH] fix Sites bugs --- PLC/Methods/AddNodeType.py | 2 +- PLC/Methods/AddSite.py | 4 ++-- PLC/Methods/GetNodeTypes.py | 2 +- PLC/NodeTypes.py | 2 +- PLC/Nodes.py | 17 +++++++++++++++++ PLC/SitePersons.py | 5 +++++ PLC/Sites.py | 25 +++++++++++++++++-------- PLC/Slices.py | 9 ++++++--- 8 files changed, 50 insertions(+), 16 deletions(-) diff --git a/PLC/Methods/AddNodeType.py b/PLC/Methods/AddNodeType.py index d06b7cb..3e6167f 100644 --- a/PLC/Methods/AddNodeType.py +++ b/PLC/Methods/AddNodeType.py @@ -24,6 +24,6 @@ class AddNodeType(Method): 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 diff --git a/PLC/Methods/AddSite.py b/PLC/Methods/AddSite.py index 4cf2544..2b13991 100644 --- a/PLC/Methods/AddSite.py +++ b/PLC/Methods/AddSite.py @@ -5,7 +5,7 @@ from PLC.Sites import Site, Sites 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): """ @@ -31,4 +31,4 @@ 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'] diff --git a/PLC/Methods/GetNodeTypes.py b/PLC/Methods/GetNodeTypes.py index 1810343..67c3d65 100644 --- a/PLC/Methods/GetNodeTypes.py +++ b/PLC/Methods/GetNodeTypes.py @@ -19,4 +19,4 @@ class GetNodeTypes(Method): 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)] diff --git a/PLC/NodeTypes.py b/PLC/NodeTypes.py index cfffdcc..efa83f1 100644 --- a/PLC/NodeTypes.py +++ b/PLC/NodeTypes.py @@ -2,7 +2,7 @@ # 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 diff --git a/PLC/Nodes.py b/PLC/Nodes.py index 2932d1a..76adc03 100644 --- a/PLC/Nodes.py +++ b/PLC/Nodes.py @@ -306,3 +306,20 @@ class Nodes(list): 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() + + + diff --git a/PLC/SitePersons.py b/PLC/SitePersons.py index aba207e..ca7c2ba 100644 --- a/PLC/SitePersons.py +++ b/PLC/SitePersons.py @@ -57,3 +57,8 @@ class SitePersons(list): 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() diff --git a/PLC/Sites.py b/PLC/Sites.py index 07cd634..e2b6c1e 100644 --- a/PLC/Sites.py +++ b/PLC/Sites.py @@ -115,7 +115,10 @@ class Site(AlchemyObj): 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)) @@ -129,15 +132,21 @@ class Site(AlchemyObj): 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']}) diff --git a/PLC/Slices.py b/PLC/Slices.py index 1219c2e..570256a 100644 --- a/PLC/Slices.py +++ b/PLC/Slices.py @@ -161,9 +161,12 @@ class Slice(AlchemyObj): 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)) -- 2.43.0