- allow any site member to add their slice to any node at their site, even if their...
authorTony Mack <tmack@cs.princeton.edu>
Thu, 20 Sep 2007 18:04:36 +0000 (18:04 +0000)
committerTony Mack <tmack@cs.princeton.edu>
Thu, 20 Sep 2007 18:04:36 +0000 (18:04 +0000)
PLC/Methods/AddSliceToNodes.py

index ce8bb1c..557c2fa 100644 (file)
@@ -47,12 +47,18 @@ class AddSliceToNodes(Method):
                 raise PLCPermissionDenied, "Specified slice not associated with any of your sites"
        
         # 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'])
+        nodes = Nodes(self.api, node_id_or_hostname_list, ['node_id', 'hostname', 'slice_ids', 'slice_ids_whitelist', 'site_id'])
+       
        for node in nodes:
+           # allow  users at site to add node to slice, ignoring whitelist
+           if isinstance(self.caller, Person) and \
+              set(self.caller['site_ids']).intersection(node['site_id']):
+               slice.add_node(node, commit = False)
+               continue
            # check the slice whitelist on each node first
            if node['slice_ids_whitelist'] and \
               slice['slice_id'] not in node['slice_ids_whitelist']:
-               raise PLCInvalidArgument, "%s is not on %s's whitelist" % \
+               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)