X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=db-config.d%2F000-functions;h=30fd330835977e778f99c606ec73402f38190731;hb=d20644a48d03667bb25dc583517de06e94606c64;hp=d6482630f2c6867eeb7de13505d1ef51912c53a5;hpb=ccdabc699da299fa88658f791cd96850d68b43c8;p=plcapi.git diff --git a/db-config.d/000-functions b/db-config.d/000-functions index d648263..30fd330 100644 --- a/db-config.d/000-functions +++ b/db-config.d/000-functions @@ -1,68 +1,92 @@ # -*-python-*- -#################### -import sys, os -import resource +#################### +import sys +import os g_url = "" + + def GetMyPLCURL(): return g_url + + def SetMyPLCURL(url): global g_url g_url = url -# Get all currently registered roles -g_role_names = [ role['name'] for role in GetRoles()] -g_role_names.sort() - -def SetRole(level, role): - global g_role_names - if role not in g_role_names: - AddRole(level, role) - g_role_names.append(role) - g_role_names.sort() # Get list of existing tag types g_known_tag_types = [tag_type['tagname'] for tag_type in GetTagTypes()] g_known_tag_types.sort() + +def AllPersonRoles(): + return ['pi', 'user', 'tech'] + + def SetTagType(tag_type): - global g_known_tag_types - # Create/update default slice tag types - if tag_type['tagname'] not in g_known_tag_types: - AddTagType(tag_type) - g_known_tag_types.append(tag_type['tagname']) - g_known_tag_types.sort() - else: - UpdateTagType(tag_type['tagname'], tag_type) - if 'roles' in tag_type: - for role in tag_type['roles']: - AddRoleToTagType(role,tag_type['tagname']) + try: + tagname = tag_type['tagname'] + global g_known_tag_types + # handle 'roles' field differently + if 'roles' in tag_type: + roles = tag_type['roles'] + del tag_type['roles'] + else: + roles = ['admin'] + # just in case + if 'min_role_id' in tag_type: + print( + "WARNING: ignoring deprecated field min_role_id for tagtype %s" % tagname) + del tag_type['min_role_id'] + # Create/update default slice tag types + if tagname not in g_known_tag_types: + AddTagType(tag_type) + g_known_tag_types.append(tagname) + g_known_tag_types.sort() + else: + UpdateTagType(tagname, tag_type) + # enforce provided roles if present + old_roles = GetTagTypes(tagname)[0]['roles'] + for minus_role in set(old_roles).difference(set(roles)): + DeleteRoleFromTagType(minus_role, tagname) + for plus_role in set(roles).difference(set(old_roles)): + AddRoleToTagType(plus_role, tagname) + except: + # something went wrong for that tagname, + # but don't want to break the whole startup sequence + print("Could not enforce tagtype %s --- beg" % tagname) + import traceback + traceback.print_exc() + print("Could not enforce tagtype %s --- end" % tagname) + # Get list of existing (enabled, global) files g_conf_files = GetConfFiles() -g_conf_files = filter(lambda conf_file: conf_file['enabled'] and \ - not conf_file['node_ids'] and \ - not conf_file['nodegroup_ids'], - g_conf_files) +g_conf_files = [conf_file for conf_file in g_conf_files if conf_file['enabled'] and + not conf_file['node_ids'] and + not conf_file['nodegroup_ids']] g_dests = [conf_file['dest'] for conf_file in g_conf_files] -g_conf_files = dict(zip(g_dests, g_conf_files)) +g_conf_files = dict(list(zip(g_dests, g_conf_files))) # Get list of existing initscripts g_oldinitscripts = GetInitScripts() g_oldinitscript_names = [script['name'] for script in g_oldinitscripts] -g_oldinitscripts = dict(zip(g_oldinitscript_names, g_oldinitscripts)) +g_oldinitscripts = dict(list(zip(g_oldinitscript_names, g_oldinitscripts))) + def SetInitScript(initscript): global g_oldinitscripts, g_oldinitscript_names if initscript['name'] not in g_oldinitscript_names: initscript_id = AddInitScript(initscript) g_oldinitscript_names.append(initscript['name']) - initscript['initscript_id']=initscript_id - g_oldinitscripts[initscript['name']]=initscript + initscript['initscript_id'] = initscript_id + g_oldinitscripts[initscript['name']] = initscript else: orig_initscript = g_oldinitscripts[initscript['name']] initscript_id = orig_initscript['initscript_id'] UpdateInitScript(initscript_id, initscript) - + + def SetConfFile(conf_file): global g_conf_files, g_dests if conf_file['dest'] not in g_dests: @@ -72,61 +96,76 @@ def SetConfFile(conf_file): conf_file_id = orig_conf_file['conf_file_id'] UpdateConfFile(conf_file_id, conf_file) + def SetSlice(slice, tags): - # Create or Update slice - slice_name = slice['name'] - slices = GetSlices([slice_name]) - if len(slices)==1: - slice_id = slices[0]['slice_id'] - if slice.has_key('name'): - del slice['name'] - UpdateSlice(slice_id, slice) - slice['name']=slice_name - else: - expires = None - if slice.has_key('expires'): - expires = slice['expires'] - del slice['expires'] - slice_id = AddSlice(slice) - if expires <> None: - UpdateSlice(slice_id, {'expires':expires}) - - # Get slice structure with all fields - slice = GetSlices([slice_name])[0] - - # Create/delete all tags - # NOTE: update is not needed, since unspecified tags are deleted, - # and new tags are added - slice_tags = [] - if slice['slice_tag_ids']: - # Delete unknown attributes - for slice_tag in GetSliceTags(slice['slice_tag_ids']): - # ignore sliver tags, as those are custom/run-time values - if slice_tag['node_id'] <> None: continue - if (slice_tag['tagname'], slice_tag['value']) not in tags: - DeleteSliceTag(slice_tag['slice_tag_id']) + try: + # Create or Update slice + slice_name = slice['name'] + slices = GetSlices([slice_name]) + if len(slices) == 1: + slice_id = slices[0]['slice_id'] + if 'name' in slice: + del slice['name'] + UpdateSlice(slice_id, slice) + slice['name'] = slice_name + else: + expires = None + if 'expires' in slice: + expires = slice['expires'] + del slice['expires'] + slice_id = AddSlice(slice) + if expires is not None: + UpdateSlice(slice_id, {'expires': expires}) + + # Get slice structure with all fields + slice = GetSlices([slice_name])[0] + + # Create/delete all tags + # NOTE: update is not needed, since unspecified tags are deleted, + # and new tags are added + slice_tags = [] + if slice['slice_tag_ids']: + # Delete unknown attributes + for slice_tag in GetSliceTags(slice['slice_tag_ids']): + # ignore sliver tags, as those are custom/run-time values + if slice_tag['node_id'] is not None: + continue + if (slice_tag['tagname'], slice_tag['value']) not in tags: + DeleteSliceTag(slice_tag['slice_tag_id']) + else: + slice_tags.append( + (slice_tag['tagname'], slice_tag['value'])) + + # only add slice tags that are new + for (name, value) in tags: + if (name, value) not in slice_tags: + AddSliceTag(slice_name, name, value) else: - slice_tags.append((slice_tag['tagname'],slice_tag['value'])) + # NOTE: this confirms that the user-specified tag is + # returned by GetSliceTags + pass + except: + # something went wrong for that tagname, + print("Could not create init slice %s --- beg" % slice['name']) + import traceback + traceback.print_exc() + print("Could not create init slice %s --- end" % slice['name']) - # only add slice tags that are new - for (name, value) in tags: - if (name,value) not in slice_tags: - AddSliceTag(slice_name, name, value) - else: - # NOTE: this confirms that the user-specified tag is - # returned by GetSliceTags - pass def SetMessage(message): messages = GetMessages([message['message_id']]) - if len(messages)==0: + if len(messages) == 0: AddMessage(message) - else: - UpdateMessage(message['message_id'],message) + # Thierry 2012-03 + # let people customize their messages if they want to + # else: + # UpdateMessage(message['message_id'],message) + # Get all model names g_pcu_models = [type['model'] for type in GetPCUTypes()] + def SetPCUType(pcu_type): global g_pcu_models if 'pcu_protocol_types' in pcu_type: @@ -142,4 +181,3 @@ def SetPCUType(pcu_type): # for each protocol, also add this. for ptype in protocol_types: AddPCUProtocolType(id, ptype) -