X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=slivermanager.py;h=624853e72bc8ad59ce4e9123f38c8f2d2b184717;hb=9e6b9c1ea9e020c55c85b433bac47231d63e9ffd;hp=739b5c01dbc7401b69c001db89ada4b41192d789;hpb=ea84ea95d9d3ed8de232e41adf97073905255ee0;p=nodemanager.git diff --git a/slivermanager.py b/slivermanager.py index 739b5c0..624853e 100644 --- a/slivermanager.py +++ b/slivermanager.py @@ -1,4 +1,3 @@ -# """Sliver manager. The sliver manager has several functions. It is responsible for @@ -14,12 +13,29 @@ import time import logger import api, api_calls import database -import accounts +import account import controller -import sliver_lxc -try: from bwlimit import bwmin, bwmax -except ImportError: bwmin, bwmax = 8, 1000*1000*1000 +try: + import sliver_lxc + implementation='lxc' + sliver_default_type='sliver.LXC' + sliver_class_to_register = sliver_lxc.Sliver_LXC + sliver_password_shell = sliver_lxc.Sliver_LXC.SHELL +except: + try: + import sliver_vs + implementation='vs' + sliver_default_type='sliver.VServer' + sliver_class_to_register = sliver_vs.Sliver_VS + sliver_password_shell = sliver_vs.Sliver_VS.SHELL + except: + logger.log("Could not import either sliver_lxc or sliver_vs - bailing out") + exit(1) + +# just being safe +try : from plnode.bwlimit import bwmin, bwmax +except: bwmin, bwmax = 8, 1000*1000*1000 priority=10 @@ -30,6 +46,7 @@ DEFAULT_ALLOCATION = { 'cpu_pct': 0, # percent CPU reserved 'cpu_share': 1, # proportional share 'cpu_cores': "0b", # reserved cpu cores [b] + 'cpu_freezable': 0, # freeze processes if cpu_cores is 0 # bandwidth parameters 'net_min_rate': bwmin / 1000, # kbps 'net_max_rate': bwmax / 1000, # kbps @@ -68,7 +85,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 +110,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 @@ -158,7 +176,7 @@ 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.LXC')) + rec.setdefault('type', attributes.get('type', sliver_default_type)) # set the vserver reference. If none, set to default. rec.setdefault('vref', attributes.get('vref', 'default')) @@ -207,11 +225,29 @@ def deliver_ticket(data): def start(): # 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 + if implementation == 'vs': + for resname, default_amount in sliver_vs.DEFAULT_ALLOCATION.iteritems(): + DEFAULT_ALLOCATION[resname]=default_amount - accounts.register_class(sliver_lxc.Sliver_LXC) - accounts.register_class(controller.Controller) + account.register_class(sliver_class_to_register) + account.register_class(controller.Controller) database.start() api_calls.deliver_ticket = deliver_ticket api.start() + +### check if a sliver is running +### a first step to a unified code for codemux +def is_running (name): + if implementation=='vs': + import vserver + return vserver.VServer(name).is_running() + else: + import libvirt + running = False + try: + conn = libvirt.open('lxc://') + dom = conn.lookupByName(name) + running = dom.info()[0] == libvirt.VIR_DOMAIN_RUNNING + finally: + conn.close() + return running