-#
"""Sliver manager.
The sliver manager has several functions. It is responsible for
import database
import account
import controller
-import sliver_vs
-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
'cpu_pct': 0, # percent CPU reserved
'cpu_share': 1, # proportional share
'cpu_cores': "0b", # reserved cpu cores <num_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
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
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_default_type))
# set the vserver reference. If none, set to default.
rec.setdefault('vref', attributes.get('vref', 'default'))
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
+ if implementation == 'vs':
+ for resname, default_amount in sliver_vs.DEFAULT_ALLOCATION.iteritems():
+ DEFAULT_ALLOCATION[resname]=default_amount
- account.register_class(sliver_vs.Sliver_VS)
+ 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