X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=slivermanager.py;h=4caa1aded65844c4a1204971d40642e381966cfd;hb=9810ffaa90bac99bbe7a5b18ae914f649193ef8a;hp=b7c54393ffd8189211812078a92ffb8639bdc7ca;hpb=b96a2e5fd3601536d4e1af2701ceee57ad032ee9;p=nodemanager.git diff --git a/slivermanager.py b/slivermanager.py index b7c5439..4caa1ad 100644 --- a/slivermanager.py +++ b/slivermanager.py @@ -14,9 +14,9 @@ import time import logger import api, api_calls import database -import accounts +import account import controller -import sliver_vs +import sliver_lxc try: from bwlimit import bwmin, bwmax except ImportError: bwmin, bwmax = 8, 1000*1000*1000 @@ -29,7 +29,7 @@ DEFAULT_ALLOCATION = { # CPU parameters 'cpu_pct': 0, # percent CPU reserved 'cpu_share': 1, # proportional share - 'cpu_cores': 0, # reserved cpu cores + 'cpu_cores': "0b", # reserved cpu cores [b] # bandwidth parameters 'net_min_rate': bwmin / 1000, # kbps 'net_max_rate': bwmax / 1000, # kbps @@ -68,7 +68,8 @@ def adjustReservedSlivers (data): if 'reservation_policy' not in data: return policy=data['reservation_policy'] if policy not in ['lease_or_idle', 'lease_or_shared']: - logger.log ("unexpected reservation_policy %(policy)s"%locals()) + if policy is not None: + logger.log ("unexpected reservation_policy %(policy)s"%locals()) return logger.log("slivermanager.adjustReservedSlivers") @@ -92,7 +93,7 @@ def adjustReservedSlivers (data): if is_system_sliver(sliver): sliver['reservation_alive']=True continue - + # regular slivers if not active_lease: # with 'idle_or_shared', just let the field out, behave like a shared node @@ -128,14 +129,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']: @@ -158,17 +159,22 @@ def GetSlivers(data, config = None, plc=None, fullupdate=True): if rec['instantiation'].lower() == 'nm-controller': rec.setdefault('type', attributes.get('type', 'controller.Controller')) else: - rec.setdefault('type', attributes.get('type', 'sliver.VServer')) + rec.setdefault('type', attributes.get('type', 'sliver.LXC')) # 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", [])) @@ -200,11 +206,13 @@ def deliver_ticket(data): return GetSlivers(data, fullupdate=False) def start(): - for resname, default_amount in sliver_vs.DEFAULT_ALLOCATION.iteritems(): - DEFAULT_ALLOCATION[resname]=default_amount + # No default allocation values for LXC yet, think if its necessary given + # that they are also default allocation values in this module + #for resname, default_amount in sliver_vs.DEFAULT_ALLOCATION.iteritems(): + # DEFAULT_ALLOCATION[resname]=default_amount - accounts.register_class(sliver_vs.Sliver_VS) - accounts.register_class(controller.Controller) + account.register_class(sliver_lxc.Sliver_LXC) + account.register_class(controller.Controller) database.start() api_calls.deliver_ticket = deliver_ticket api.start()