X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;ds=sidebyside;f=PLC%2FMethods%2FAddSlice.py;h=da1057e50150a82f66be34dde7ffcb373cb69adb;hb=c3fc031363ac794e6b1245c6ed1a05329cba69c9;hp=0274e0191627252fab90d310d6cfbff69c6a9d4d;hpb=bd0cbf4f7f2e4cf7ceda500bfa6f98c0a700018b;p=plcapi.git diff --git a/PLC/Methods/AddSlice.py b/PLC/Methods/AddSlice.py index 0274e01..da1057e 100644 --- a/PLC/Methods/AddSlice.py +++ b/PLC/Methods/AddSlice.py @@ -13,6 +13,8 @@ from PLC.SliceTags import SliceTags from PLC.Methods.AddSliceTag import AddSliceTag from PLC.Methods.UpdateSliceTag import UpdateSliceTag +from PLC.Logger import logger + can_update = ['name', 'instantiation', 'url', 'description', 'max_nodes'] class AddSlice(Method): @@ -51,7 +53,7 @@ class AddSlice(Method): # type checking native = Row.check_fields (native, self.accepted_fields) if rejected: - raise PLCInvalidArgument, "Cannot add Slice with column(s) %r"%rejected + raise PLCInvalidArgument("Cannot add Slice with column(s) %r"%rejected) # Authenticated function assert self.caller is not None @@ -61,45 +63,55 @@ class AddSlice(Method): # 3. Then single underscore after login_base. # 4. Then letters, numbers, or underscores. name = slice_fields['name'] - good_name = r'^[a-z0-9]+_[a-zA-Z0-9_]+$' + good_name = r'^[a-z0-9\.]+_[a-zA-Z0-9_\.]+$' if not name or \ not re.match(good_name, name): - raise PLCInvalidArgument, "Invalid slice name" + raise PLCInvalidArgument("Invalid slice name") # Get associated site details login_base = name.split("_")[0] sites = Sites(self.api, [login_base]) if not sites: - raise PLCInvalidArgument, "Invalid slice prefix %s in %s"%(login_base,name) + 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 %s must match one of your sites' login_base"%login_base + raise PLCPermissionDenied("Slice prefix %s must match one of your sites' login_base"%login_base) if len(site['slice_ids']) >= site['max_slices']: - raise PLCInvalidArgument, \ - "Site %s has reached (%d) its maximum allowable slice count (%d)"%(site['name'], + raise PLCInvalidArgument("Site %s has reached (%d) its maximum allowable slice count (%d)"%(site['name'], len(site['slice_ids']), - site['max_slices']) + site['max_slices'])) if not site['enabled']: - raise PLCInvalidArgument, "Site %s is disabled and can cannot create slices" % (site['name']) + raise PLCInvalidArgument("Site %s is disabled and can cannot create slices" % (site['name'])) slice = Slice(self.api, native) slice['creator_person_id'] = self.caller['person_id'] slice['site_id'] = site['site_id'] slice.sync() - for (tagname,value) in tags.iteritems(): + # Set Slice HRN + root_auth = self.api.config.PLC_HRN_ROOT + tags['hrn'] = '.'.join([root_auth, login_base, name.split("_")[1]]) + + for (tagname,value) in tags.items(): # the tagtype instance is assumed to exist, just check that if not TagTypes(self.api,{'tagname':tagname}): - raise PLCInvalidArgument,"No such TagType %s"%tagname + raise PLCInvalidArgument("No such TagType %s"%tagname) slice_tags=SliceTags(self.api,{'tagname':tagname,'slice_id':slice['slice_id']}) if not slice_tags: AddSliceTag(self.api).__call__(auth,slice['slice_id'],tagname,value) else: UpdateSliceTag(self.api).__call__(auth,slice_tags[0]['slice_tag_id'],value) + # take PLC_VSYS_DEFAULTS into account for convenience + try: + values= [ y for y in [ x.strip() for x in self.api.config.PLC_VSYS_DEFAULTS.split(',') ] if y ] + for value in values: + AddSliceTag(self.api).__call__(auth,slice['slice_id'],'vsys',value) + except: + logger.exception("Could not set vsys tags as configured in PLC_VSYS_DEFAULTS") self.event_objects = {'Slice': [slice['slice_id']]} self.message = "Slice %d created" % slice['slice_id']