X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=PLC%2FMethods%2FGetSlices.py;h=c06fbe297ded8bb46b8e255e76cf7b6be0a65d20;hb=5706f426635a8416101d2efdff228a20b34fb841;hp=b2ddfde1b196c22ceac222bf7a704e50136d9b76;hpb=3848e61c07f506bc9cc0710611440af7cfb47e1a;p=plcapi.git diff --git a/PLC/Methods/GetSlices.py b/PLC/Methods/GetSlices.py index b2ddfde..c06fbe2 100644 --- a/PLC/Methods/GetSlices.py +++ b/PLC/Methods/GetSlices.py @@ -3,6 +3,7 @@ from PLC.Parameter import Parameter, Mixed from PLC.Filter import Filter from PLC.Auth import Auth from PLC.Persons import Person, Persons +from PLC.Nodes import Nodes from PLC.Sites import Site, Sites from PLC.Slices import Slice, Slices @@ -26,6 +27,8 @@ class GetSlices(Method): Auth(), Mixed([Mixed(Slice.fields['slice_id'], Slice.fields['name'])], + Parameter(str,"name"), + Parameter(int,"slice_id"), Filter(Slice.fields)), Parameter([str], "List of fields to return", nullok = True) ] @@ -33,16 +36,22 @@ class GetSlices(Method): returns = [Slice.fields] def call(self, auth, slice_filter = None, return_fields = None): - # If we are not admin, make sure to return only viewable - # slices. + # If we are not admin, make sure to return only viewable + # slices. if isinstance(self.caller, Person) and \ 'admin' not in self.caller['roles']: # Get slices that we are able to view valid_slice_ids = self.caller['slice_ids'] + # pis can view all slices at their site if 'pi' in self.caller['roles'] and self.caller['site_ids']: sites = Sites(self.api, self.caller['site_ids']) for site in sites: valid_slice_ids += site['slice_ids'] + # techs can view all slices on the nodes at their site + if 'tech' in self.caller['roles'] and self.caller['site_ids']: + nodes = Nodes(self.api, {'site_id': self.caller['site_ids']}, ['site_id', 'slice_ids']) + for node in nodes: + valid_slice_ids.extend(node['slice_ids']) if not valid_slice_ids: return [] @@ -67,6 +76,7 @@ class GetSlices(Method): # Remove slice_id if not specified if added_fields: for slice in slices: - del slice['slice_id'] + if 'slice_id' in slice: + del slice['slice_id'] return slices