fix Slice bugs
authorTony Mack <tmack@paris.CS.Princeton.EDU>
Sat, 9 Mar 2013 17:40:07 +0000 (12:40 -0500)
committerTony Mack <tmack@paris.CS.Princeton.EDU>
Sat, 9 Mar 2013 17:40:07 +0000 (12:40 -0500)
PLC/Methods/AddSlice.py
PLC/Methods/GetSites.py
PLC/Slices.py

index 0274e01..2ca7ae7 100644 (file)
@@ -100,7 +100,4 @@ class AddSlice(Method):
             else:
                 UpdateSliceTag(self.api).__call__(auth,slice_tags[0]['slice_tag_id'],value)
 
-        self.event_objects = {'Slice': [slice['slice_id']]}
-        self.message = "Slice %d created" % slice['slice_id']
-
         return slice['slice_id']
index 2ca1b44..c0c6e32 100644 (file)
@@ -28,5 +28,5 @@ class GetSites(Method):
     returns = [Site.fields]
 
     def call(self, auth, site_filter = None, return_fields = None):
-        sites = Sites(self.api, site_filter)
+        sites = Sites(self.api, site_filter, return_fields)
         return sites
index 570256a..bbc594a 100644 (file)
@@ -1,7 +1,7 @@
 from types import StringTypes
 import time
 import re
-import datetime
+from datetime import datetime, timedelta
 
 from PLC.Faults import *
 from PLC.Parameter import Parameter, Mixed
@@ -32,7 +32,7 @@ class Slice(AlchemyObj):
         'instantiation': Parameter(str, "Slice instantiation state", nullok=True),
         'url': Parameter(str, "URL further describing this slice", max = 254, nullok = True),
         'description': Parameter(str, "Slice description", max = 2048, nullok = True),
-        'max_nodes': Parameter(int, "Maximum number of nodes that can be assigned to this slice"),
+        'max_nodes': Parameter(int, "Maximum number of nodes that can be assigned to this slice", default=100),
         'creator_person_id': Parameter(str, "Identifier of the account that created this slice"),
         'created': Parameter(datetime, "Date and time when slice was created, in seconds since UNIX epoch", ro = True),
         'expires': Parameter(datetime, "Date and time when slice expires, in seconds since UNIX epoch"),
@@ -134,17 +134,23 @@ class Slice(AlchemyObj):
         # sync the nova record and the plc record
         AlchemyObj.sync(self, commit=commit, validate=validate)
         # create the nova record
-        nova_fields = ['enabled', 'name', 'description']
+        nova_fields = ['enabled', 'description']
         nova_can_update = lambda (field, value): field in nova_fields
         nova_slice = dict(filter(nova_can_update, self.items()))
+        nova_slice['tenant_name'] = self['name']
         if 'slice_id' not in self:
+            now = datetime.now()
             # Before a new slice is added, delete expired slices
             #expired = Slices(self.api, expires = -int(time.time()))
             #for slice in expired:
             #    slice.delete(commit)
             self.object = self.api.client_shell.keystone.tenants.create(**nova_slice)
             self['tenant_id'] = self.object.id
+            self['created'] = now
+            self['expires'] = now + timedelta(days=14)
             AlchemyObj.insert(self, dict(self))
+            slice = AlchemyObj.select(self, filter={'tenant_id': self['tenant_id']})[0]
+            self['slice_id'] = slice.slice_id
         else:
             self.object = self.api.client_shell.keystone.tenants.update(self['tenant_id'], **nova_slice) 
             AlchemyObj.update(self, {'slice_id': self['slice_id']}, dict(self)) 
@@ -169,8 +175,7 @@ class Slice(AlchemyObj):
             slice_tag.delete()
         
         # delete slice 
-        AlchemyObj.delete(self, dict(self))
-
+        AlchemyObj.delete(self, filter={'slice_id': self['slice_id']})
 
 class Slices(list):
     """
@@ -189,22 +194,22 @@ class Slices(list):
             slices = Slice().select(filter=slice_filter)
         elif isinstance(slice_filter, (list, tuple, set)):
             slices = Slice().select()
-            slices = [slice for slice in slices if slice.id in slice_filter]
+            slices = [slice for slice in slices if slice.slice_id in slice_filter or slice.name in slice_filter]
         else:
             raise PLCInvalidArgument, "Wrong slice filter %r"%slice_filter
 
         for slice in slices:
             slice = Slice(api, object=slice)
             if not columns or 'person_ids' in columns:
-                slice_persons = SlicePerson().select(filter={'slice_id': slice.id})
+                slice_persons = SlicePerson().select(filter={'slice_id': slice['slice_id']})
                 slice['person_ids'] = [rec.person_id for rec in slice_persons] 
                 
             if not columns or 'node_ids' in columns:
-                slice_nodes = SliceNode().select(filter={'slice_id': slice.id})
+                slice_nodes = SliceNode().select(filter={'slice_id': slice['slice_id']})
                 slice['node_ids'] = [rec.node_id for rec in slice_nodes]
 
             if not columns or 'slice_tag_ids' in columns:
-                slice_tags = SliceTag().select(filter={'slice_id': slice.id})
+                slice_tags = SliceTag().select(filter={'slice_id': slice['slice_id']})
                 slice['slice_tag_ids'] = [rec.slice_tag_id for rec in slice_tags]
                 
             self.append(slice)