fix Sites bugs
authorTony Mack <tmack@paris.CS.Princeton.EDU>
Fri, 8 Mar 2013 02:52:29 +0000 (21:52 -0500)
committerTony Mack <tmack@paris.CS.Princeton.EDU>
Fri, 8 Mar 2013 02:52:29 +0000 (21:52 -0500)
PLC/Methods/AddNodeType.py
PLC/Methods/AddSite.py
PLC/Methods/GetNodeTypes.py
PLC/NodeTypes.py
PLC/Nodes.py
PLC/SitePersons.py
PLC/Sites.py
PLC/Slices.py

index d06b7cb..3e6167f 100644 (file)
@@ -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
index 4cf2544..2b13991 100644 (file)
@@ -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']
index 1810343..67c3d65 100644 (file)
@@ -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)]
index cfffdcc..efa83f1 100644 (file)
@@ -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
index 2932d1a..76adc03 100644 (file)
@@ -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()
+                   
+        
+        
index aba207e..ca7c2ba 100644 (file)
@@ -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()
index 07cd634..e2b6c1e 100644 (file)
@@ -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']})        
         
                
 
index 1219c2e..570256a 100644 (file)
@@ -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))