X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=PLC%2FMethods%2FAddSlice.py;h=82627ced210fe9bbf48a61462c2861de5391f203;hb=d316abf4bdb070ea1acf6be4b262c86a055b6ac2;hp=08a4937ce29e01ec009d42a71fe5682ccea02dcd;hpb=81d4a2b05167e54888d196ac2e9623ae2dcb1ca4;p=plcapi.git diff --git a/PLC/Methods/AddSlice.py b/PLC/Methods/AddSlice.py index 08a4937..82627ce 100644 --- a/PLC/Methods/AddSlice.py +++ b/PLC/Methods/AddSlice.py @@ -4,11 +4,11 @@ from PLC.Faults import * from PLC.Method import Method from PLC.Parameter import Parameter, Mixed from PLC.Slices import Slice, Slices -from PLC.Auth import PasswordAuth +from PLC.Auth import Auth from PLC.Sites import Site, Sites can_update = lambda (field, value): field in \ - ['instantiation', 'url', 'description', 'max_nodes'] + ['name', 'instantiation', 'url', 'description', 'max_nodes'] class AddSlice(Method): """ @@ -29,23 +29,26 @@ class AddSlice(Method): roles = ['admin', 'pi'] - update_fields = dict(filter(can_update, Slice.fields.items())) + slice_fields = dict(filter(can_update, Slice.fields.items())) accepts = [ - PasswordAuth(), - Slice.fields['name'], - update_fields + Auth(), + slice_fields ] returns = Parameter(int, 'New slice_id (> 0) if successful') - def call(self, auth, name, slice_fields = {}): + event_type = 'Add' + object_type = 'Slice' + + def call(self, auth, slice_fields): slice_fields = dict(filter(can_update, slice_fields.items())) # 1. Lowercase. # 2. Begins with login_base (only letters). # 3. Then single underscore after login_base. # 4. Then letters, numbers, or underscores. + name = slice_fields['name'] good_name = r'^[a-z]+_[a-z0-9_]+$' if not name or \ not re.match(good_name, name): @@ -53,22 +56,25 @@ class AddSlice(Method): # Get associated site details login_base = name.split("_")[0] - sites = Sites(self.api, [login_base]).values() + sites = Sites(self.api, [login_base]) if not sites: - raise PLCInvalidArgument, "Invalid slice prefix" + raise PLCInvalidArgument, "Invalid slice prefix %s in %s"%(login_base,name) site = sites[0] if 'admin' not in self.caller['roles']: if site['site_id'] not in self.caller['site_ids']: - raise PLCPermissionDenied, "Slice prefix must be the same as the login_base of one of your sites" + raise PLCPermissionDenied, "Slice prefix %s must be the same as the login_base of one of your sites"%login_base if len(site['slice_ids']) >= site['max_slices']: - raise PLCInvalidArgument, "Site has reached its maximum allowable slice count" + raise PLCInvalidArgument, "Site %s has reached (%d) its maximum allowable slice count (%d)"%(site['name'], + len(site['slice_ids']), + site['max_slices']) - slice = Slice(self.api, optional_vals) + slice = Slice(self.api, slice_fields) slice['creator_person_id'] = self.caller['person_id'] - slice['name'] = name slice['site_id'] = site['site_id'] slice.sync() + self.object_ids = [slice['slice_id']] + return slice['slice_id']