Mixed(SliceAttribute.fields['attribute_type_id'],
SliceAttribute.fields['name']),
Mixed(SliceAttribute.fields['value'],
- InitScript.fields['initscript_id']),
+ InitScript.fields['name']),
Mixed(Node.fields['node_id'],
Node.fields['hostname'],
None),
raise PLCPermissionDenied, "Not allowed to set the specified slice attribute"
# if initscript is specified, validate value
- if attribute_type['name'] in ['plc_initscript_id']:
- initscripts = InitScripts(self.api, {'enabled': True, 'initscript_id': int(value)})
+ if attribute_type['name'] in ['initscript']:
+ initscripts = InitScripts(self.api, {'enabled': True, 'name': value})
if not initscripts:
raise PLCInvalidArgument, "No such plc initscript"
slice_attribute = SliceAttribute(self.api)
slice_attribute['slice_id'] = slice['slice_id']
slice_attribute['attribute_type_id'] = attribute_type['attribute_type_id']
- slice_attribute['value'] = value
+ slice_attribute['value'] = unicode(value)
# Sliver attribute if node is specified
if node_id_or_hostname is not None:
if node['node_id'] not in slice['node_ids']:
raise PLCInvalidArgument, "Node not in the specified slice"
-
slice_attribute['node_id'] = node['node_id']
# Sliver attribute shared accross nodes if nodegroup is sepcified
slice_attribute['nodegroup_id'] = nodegroup['nodegroup_id']
+ # Check if slice attribute alreay exists
+ slice_attributes_check = SliceAttributes(self.api, {'slice_id': slice['slice_id'], 'name': attribute_type['name'], 'value': value})
+ for slice_attribute_check in slice_attributes_check:
+ if 'node_id' in slice_attribute and slice_attribute['node_id'] == slice_attribute_check['node_id']:
+ raise PLCInvalidArgument, "Sliver attribute already exists"
+ if 'nodegroup_id' in slice_attribute and slice_attribute['nodegroup_id'] == slice_attribute_check['nodegroup_id']:
+ raise PLCInvalidArgument, "Slice attribute already exists for this nodegroup"
+ if node_id_or_hostname is None and nodegroup_id_or_name is None:
+ raise PLCInvalidArgument, "Slice attribute already exists"
+
slice_attribute.sync()
self.event_objects = {'SliceAttribute': [slice_attribute['slice_attribute_id']]}