X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;ds=sidebyside;f=PLC%2FMethods%2FAddSliceToNodes.py;h=0601ac53887f3f996e211c5fab7382e422c89a4e;hb=7e1cc31ebbf14297f1b6e02c1b011cfd4cd0d243;hp=d5a2c8c2ad8b948756fd10ace30f7d72bd667010;hpb=393610881cda6e56b7f7ff91f4387634ec108396;p=plcapi.git diff --git a/PLC/Methods/AddSliceToNodes.py b/PLC/Methods/AddSliceToNodes.py index d5a2c8c..0601ac5 100644 --- a/PLC/Methods/AddSliceToNodes.py +++ b/PLC/Methods/AddSliceToNodes.py @@ -1,3 +1,5 @@ +# $Id$ +# $URL$ from PLC.Faults import * from PLC.Method import Method from PLC.Parameter import Parameter, Mixed @@ -23,7 +25,7 @@ class AddSliceToNodes(Method): Auth(), Mixed(Slice.fields['slice_id'], Slice.fields['name']), - [Mixed(Node.fields['node_id'], + [Mixed(Node.fields['node_id'], Node.fields['hostname'])] ] @@ -33,7 +35,7 @@ class AddSliceToNodes(Method): # Get slice information slices = Slices(self.api, [slice_id_or_name]) if not slices: - raise PLCInvalidArgument, "No such slice" + raise PLCInvalidArgument, "No such slice %r"%slice_id_or_name slice = slices[0] if slice['peer_id'] is not None: @@ -46,24 +48,26 @@ class AddSliceToNodes(Method): raise PLCPermissionDenied, "Not a member of the specified slice" elif slice['site_id'] not in self.caller['site_ids']: raise PLCPermissionDenied, "Specified slice not associated with any of your sites" - - # Get specified nodes, add them to the slice + + # Get specified nodes, add them to the slice nodes = Nodes(self.api, node_id_or_hostname_list, ['node_id', 'hostname', 'slice_ids', 'slice_ids_whitelist', 'site_id']) - - for node in nodes: - # check the slice whitelist on each node first - # allow users at site to add node to slice, ignoring whitelist - if node['slice_ids_whitelist'] and \ - slice['slice_id'] not in node['slice_ids_whitelist'] and \ - not set(self.caller['site_ids']).intersection([node['site_id']]): - raise PLCInvalidArgument, "%s is not allowed on %s (not on the whitelist)" % \ - (slice['name'], node['hostname']) + + for node in nodes: + # check the slice whitelist on each node first + # allow users at site to add node to slice, ignoring whitelist + if node['slice_ids_whitelist'] and \ + slice['slice_id'] not in node['slice_ids_whitelist'] and \ + not set(self.caller['site_ids']).intersection([node['site_id']]): + raise PLCInvalidArgument, "%s is not allowed on %s (not on the whitelist)" % \ + (slice['name'], node['hostname']) if slice['slice_id'] not in node['slice_ids']: slice.add_node(node, commit = False) slice.sync() - self.event_objects = {'Node': [node['node_id'] for node in nodes], - 'Slice': [slice['slice_id']]} + nodeids = [node['node_id'] for node in nodes] + self.event_objects = {'Node': nodeids, + 'Slice': [slice['slice_id']]} + self.message = 'Slice %d added to nodes %s' % (slice['slice_id'], nodeids) return 1