- support adding slice attributes to nodegroups
authorTony Mack <tmack@cs.princeton.edu>
Mon, 30 Apr 2007 18:58:43 +0000 (18:58 +0000)
committerTony Mack <tmack@cs.princeton.edu>
Mon, 30 Apr 2007 18:58:43 +0000 (18:58 +0000)
PLC/Methods/AddSliceAttribute.py

index bab09e4..aec3047 100644 (file)
@@ -5,6 +5,7 @@ from PLC.SliceAttributeTypes import SliceAttributeType, SliceAttributeTypes
 from PLC.Slices import Slice, Slices
 from PLC.Nodes import Node, Nodes
 from PLC.SliceAttributes import SliceAttribute, SliceAttributes
 from PLC.Slices import Slice, Slices
 from PLC.Nodes import Node, Nodes
 from PLC.SliceAttributes import SliceAttribute, SliceAttributes
+from PLC.NodeGroups import NodeGroup, NodeGroups
 from PLC.InitScripts import InitScript, InitScripts
 from PLC.Auth import Auth
 
 from PLC.InitScripts import InitScript, InitScripts
 from PLC.Auth import Auth
 
@@ -34,12 +35,15 @@ class AddSliceAttribute(Method):
         Mixed(SliceAttribute.fields['value'],
              InitScript.fields['initscript_id']),
         Mixed(Node.fields['node_id'],
         Mixed(SliceAttribute.fields['value'],
              InitScript.fields['initscript_id']),
         Mixed(Node.fields['node_id'],
-              Node.fields['hostname'])
+              Node.fields['hostname'],
+             None),
+       Mixed(NodeGroup.fields['nodegroup_id'],
+              NodeGroup.fields['name'])
         ]
 
     returns = Parameter(int, 'New slice_attribute_id (> 0) if successful')
 
         ]
 
     returns = Parameter(int, 'New slice_attribute_id (> 0) if successful')
 
-    def call(self, auth, slice_id_or_name, attribute_type_id_or_name, value, node_id_or_hostname = None):
+    def call(self, auth, slice_id_or_name, attribute_type_id_or_name, value, node_id_or_hostname = None, nodegroup_id_or_name = None):
         slices = Slices(self.api, [slice_id_or_name])
         if not slices:
             raise PLCInvalidArgument, "No such slice"
         slices = Slices(self.api, [slice_id_or_name])
         if not slices:
             raise PLCInvalidArgument, "No such slice"
@@ -85,6 +89,15 @@ class AddSliceAttribute(Method):
 
             slice_attribute['node_id'] = node['node_id']
 
 
             slice_attribute['node_id'] = node['node_id']
 
+       # Sliver attribute shared accross nodes if nodegroup is sepcified
+       if nodegroup_id_or_name is not None:
+           nodegroups = NodeGroups(self.api, [nodegroup_id_or_name])
+           if not nodegroups:
+               raise PLCInvalidArgument, "No such nodegroup"
+           nodegroup = nodegroups[0]
+       
+           slice_attribute['nodegroup_id'] = nodegroup['nodegroup_id']
+
         slice_attribute.sync()
        self.event_objects = {'SliceAttribute': [slice_attribute['slice_attribute_id']]}
 
         slice_attribute.sync()
        self.event_objects = {'SliceAttribute': [slice_attribute['slice_attribute_id']]}