X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=slivermanager.py;h=383379e959759c182ba3690b953084f099bddcd8;hb=refs%2Fheads%2Fdevel;hp=341800b2fb84b4db59c8bf8639abc33e4f5ac876;hpb=90fe600a45aa0002e35fd47b80757ce2c246714b;p=nodemanager.git diff --git a/slivermanager.py b/slivermanager.py index 341800b..383379e 100644 --- a/slivermanager.py +++ b/slivermanager.py @@ -29,6 +29,7 @@ DEFAULT_ALLOCATION = { # CPU parameters 'cpu_pct': 0, # percent CPU reserved 'cpu_share': 1, # proportional share + 'cpu_cores': "0b", # reserved cpu cores [b] # bandwidth parameters 'net_min_rate': bwmin / 1000, # kbps 'net_max_rate': bwmax / 1000, # kbps @@ -127,14 +128,14 @@ def GetSlivers(data, config = None, plc=None, fullupdate=True): if network['is_primary'] and network['bwlimit'] is not None: DEFAULT_ALLOCATION['net_max_rate'] = network['bwlimit'] / 1000 - # Take initscripts (global) returned by API, make dict + # Take initscripts (global) returned by API, build a hash scriptname->code + iscripts_hash = {} if 'initscripts' not in data: logger.log_missing_data("slivermanager.GetSlivers",'initscripts') return - initscripts = {} - for is_rec in data['initscripts']: - logger.verbose("slivermanager: initscript: %s" % is_rec['name']) - initscripts[str(is_rec['name'])] = is_rec['script'] + for initscript_rec in data['initscripts']: + logger.verbose("slivermanager: initscript: %s" % initscript_rec['name']) + iscripts_hash[str(initscript_rec['name'])] = initscript_rec['script'] adjustReservedSlivers (data) for sliver in data['slivers']: @@ -162,12 +163,17 @@ def GetSlivers(data, config = None, plc=None, fullupdate=True): # set the vserver reference. If none, set to default. rec.setdefault('vref', attributes.get('vref', 'default')) - # set initscripts. first check if exists, if not, leave empty. - is_name = attributes.get('initscript') - if is_name is not None and is_name in initscripts: - rec['initscript'] = initscripts[is_name] + ### set initscripts; set empty rec['initscript'] if not + # if tag 'initscript_code' is set, that's what we use + iscode = attributes.get('initscript_code','') + if iscode: + rec['initscript']=iscode else: - rec['initscript'] = '' + isname = attributes.get('initscript') + if isname is not None and isname in iscripts_hash: + rec['initscript'] = iscripts_hash[isname] + else: + rec['initscript'] = '' # set delegations, if none, set empty rec.setdefault('delegations', attributes.get("delegations", [])) @@ -178,15 +184,18 @@ def GetSlivers(data, config = None, plc=None, fullupdate=True): for resname, default_amount in DEFAULT_ALLOCATION.iteritems(): try: t = type(default_amount) - amt = t.__new__(t, attributes[resname]) - except (KeyError, ValueError): amt = default_amount - rspec[resname] = amt + amount = t.__new__(t, attributes[resname]) + except (KeyError, ValueError): amount = default_amount + rspec[resname] = amount # add in sysctl attributes into the rspec for key in attributes.keys(): if key.find("sysctl.") == 0: rspec[key] = attributes[key] + # also export tags in rspec so they make it to the sliver_vs.start call + rspec['tags']=attributes + database.db.deliver_record(rec) if fullupdate: database.db.set_min_timestamp(data['timestamp']) # slivers are created here.