class Account:
def __init__(self, rec):
- logger.verbose('Initing account %s'%rec['name'])
+ logger.verbose('accounts: Initing account %s'%rec['name'])
self.name = rec['name']
self.keys = ''
self.initscriptchanged = False
def configure(self, rec):
"""Write <rec['keys']> to my authorized_keys file."""
- logger.verbose('%s: in accounts:configure'%self.name)
+ logger.verbose('accounts: configuring %s'%self.name)
new_keys = rec['keys']
if new_keys != self.keys:
# get the unix account info
dot_ssh = os.path.join(pw_dir,'.ssh')
if not os.path.isdir(dot_ssh):
if not os.path.isdir(pw_dir):
- logger.verbose('WARNING: homedir %s does not exist for %s!'%(pw_dir,self.name))
+ logger.verbose('accounts: WARNING: homedir %s does not exist for %s!'%(pw_dir,self.name))
os.mkdir(pw_dir)
os.chown(pw_dir, uid, gid)
os.mkdir(dot_ssh)
# set self.keys to new_keys only when all of the above ops succeed
self.keys = new_keys
- logger.log('%s: installed ssh keys' % self.name)
+ logger.log('accounts: %s: installed ssh keys' % self.name)
def start(self, delay=0): pass
def stop(self): pass
status = True
else:
status = False
- logger.verbose("Worker(%s): is not running" % self.name)
+ logger.verbose("accounts: Worker(%s): is not running" % self.name)
return status
def _destroy(self, curr_class):
import accounts
import database
-import logger
import sliver_vs
import ticket
import tools
from api_calls import *
+import logger
+
try:
sys.path.append("/etc/planetlab")
from plc_config import *
import logger
# TODO: These try/excepts are a hack to allow doc/DocBookLocal.py to
-# import this file in order to extrac the documentation from each
+# import this file in order to extract the documentation from each
# exported function. A better approach will involve more extensive code
# splitting, I think.
try: import database
name = data['slivers'][0]['name']
if data != None:
deliver_ticket(data)
- logger.log('Ticket delivered for %s' % name)
+ logger.log('api_calls: Ticket delivered for %s' % name)
Create(database.db.get(name))
except Exception, err:
raise xmlrpclib.Fault(102, 'Ticket error: ' + str(err))
name = data['slivers'][0]['name']
if data != None:
deliver_ticket(data)
- logger.log('Admin Ticket delivered for %s' % name)
+ logger.log('api_calls: Admin Ticket delivered for %s' % name)
Create(database.db.get(name))
except Exception, err:
raise xmlrpclib.Fault(102, 'Ticket error: ' + str(err))
def Create(sliver_name):
"""Create a non-PLC-instantiated sliver"""
rec = sliver_name
- if rec['instantiation'] == 'delegated': accounts.get(rec['name']).ensure_created(rec)
- else: raise Exception, "Only PLC can create non delegated slivers."
+ if rec['instantiation'] == 'delegated':
+ accounts.get(rec['name']).ensure_created(rec)
+ logger.log("api_calls: Create %s"%rec['name'])
+ else:
+ raise Exception, "Only PLC can create non delegated slivers."
@export_to_docbook(roles=['nm-controller', 'self'],
def Destroy(sliver_name):
"""Destroy a non-PLC-instantiated sliver"""
rec = sliver_name
- if rec['instantiation'] == 'delegated': accounts.get(rec['name']).ensure_destroyed()
- else: raise Exception, "Only PLC can destroy non delegated slivers."
+ if rec['instantiation'] == 'delegated':
+ accounts.get(rec['name']).ensure_destroyed()
+ logger.log("api_calls: Destroy %s"%rec['name'])
+ else:
+ raise Exception, "Only PLC can destroy non delegated slivers."
@export_to_docbook(roles=['nm-controller', 'self'],
"""Configure and start sliver."""
rec = sliver_name
accounts.get(rec['name']).start(rec)
+ logger.log("api_calls: Start %s"%rec['name'])
@export_to_docbook(roles=['nm-controller', 'self'],
"""Kill all processes belonging to the specified sliver"""
rec = sliver_name
accounts.get(rec['name']).stop()
+ logger.log("api_calls: Stop %s"%rec['name'])
@export_to_docbook(roles=['nm-controller', 'self'],
accounts.get(rec['name']).stop()
accounts.get(rec['name']).ensure_created(rec)
accounts.get(rec['name']).start(rec)
-
+ logger.log("api_calls: ReCreate %s"%rec['name'])
@export_to_docbook(roles=['nm-controller', 'self'],
accepts=[Parameter(str, 'A sliver/slice name.')],
# Faiyaz Ahmed <faiyaza@cs.princeton.edu>
# Copyright (C) 2004-2008 The Trustees of Princeton University
#
-# $Id$
-#
import os
import sys
import time
import pickle
import socket
-import logger
import copy
import threading
-import tools
+import logger
+import tools
import bwlimit
import database
if newslice != None and live[newslice].has_key('_rspec') == True:
# Check to see if we recently deleted this slice.
if live[newslice]['name'] not in deaddb.keys():
- logger.log( "bwmon: New Slice %s" % live[newslice]['name'] )
+ logger.log( "bwmon: new slice %s" % live[newslice]['name'] )
# _rspec is the computed rspec: NM retrieved data from PLC, computed loans
# and made a dict of computed values.
slices[newslice] = Slice(newslice, live[newslice]['name'], live[newslice]['_rspec'])
default_xid = bwlimit.get_xid("default")
kernelhtbs = gethtbs(root_xid, default_xid)
if len(kernelhtbs):
- logger.log("bwlimit: Disabling all running HTBs.")
+ logger.log("bwmon: Disabling all running HTBs.")
for htb in kernelhtbs.keys(): bwlimit.off(htb)
tools.as_daemon_thread(run)
def GetSlivers(*args):
- logger.verbose ("triggering dummy bwmon.GetSlivers")
+ logger.verbose ("bwmon: triggering dummy GetSlivers")
pass
else: url += '?'
url += "node_id=%d"%tools.node_id()
else:
- logger.log('%s -- WARNING, cannot add node_id to request'%dest)
+ logger.log('conf_files: %s -- WARNING, cannot add node_id to request'%dest)
try:
- logger.verbose("retrieving URL=%s"%url)
+ logger.verbose("conf_files: retrieving URL=%s"%url)
contents = curlwrapper.retrieve(url, self.config.cacert)
except xmlrpclib.ProtocolError,e:
logger.log('conf_files: failed to retrieve %s from %s, skipping' % (dest, url))
if data.has_key("conf_files"):
for f in data['conf_files']:
try: self.update_conf_file(f)
- except: logger.log_exc("failed to update conf_file")
+ except: logger.log_exc("conf_files: failed to update conf_file")
else:
logger.log_missing_data("conf_files.run_once",'conf_files')
def destroy(name): logger.log_call('/usr/sbin/userdel', '-r', name)
def is_running(self):
- logger.verbose("Delegate: %s" % self.name)
+ logger.verbose("controller: is_running: %s" % self.name)
return getpwnam(self.name)[6] == self.SHELL
rc = p.wait()
if rc != 0:
# when this triggers, the error sometimes doesn't get printed
- logger.log ("in curlwrapper.retrieve, got stderr <%s>"%err)
+ logger.log ("curlwrapper: retrieve, got stderr <%s>"%err)
raise xmlrpclib.ProtocolError(url, rc, err, postdata)
else:
return data
self._compute_effective_rspecs()
# create and destroy accounts as needed
- logger.verbose("database:sync : fetching accounts")
+ logger.verbose("database: sync : fetching accounts")
existing_acct_names = accounts.all()
for name in existing_acct_names:
if name not in self:
- logger.verbose("database:sync : ensure_destroy'ing %s"%name)
+ logger.verbose("database: sync : ensure_destroy'ing %s"%name)
accounts.get(name).ensure_destroyed()
for name, rec in self.iteritems():
# protect this; if anything fails for a given sliver
# we still need the other ones to be handled
try:
sliver = accounts.get(name)
- logger.verbose("database:sync : looping on %s (shell account class from pwd %s)" %(name,sliver._get_class()))
+ logger.verbose("database: sync : looping on %s (shell account class from pwd %s)" %(name,sliver._get_class()))
# Make sure we refresh accounts that are running
if rec['instantiation'] == 'plc-instantiated':
- logger.verbose ("database.sync : ensure_create'ing 'instantiation' sliver %s"%name)
+ logger.verbose ("database: sync : ensure_create'ing 'instantiation' sliver %s"%name)
sliver.ensure_created(rec)
elif rec['instantiation'] == 'nm-controller':
- logger.verbose ("database.sync : ensure_create'ing 'nm-controller' sliver %s"%name)
+ logger.verbose ("database: sync : ensure_create'ing 'nm-controller' sliver %s"%name)
sliver.ensure_created(rec)
# Back door to ensure PLC overrides Ticket in delegation.
elif rec['instantiation'] == 'delegated' and sliver._get_class() != None:
# if the ticket has been delivered and the nm-contoroller started the slice
# update rspecs and keep them up to date.
if sliver.is_running():
- logger.verbose ("database.sync : ensure_create'ing 'delegated' sliver %s"%name)
+ logger.verbose ("database: sync : ensure_create'ing 'delegated' sliver %s"%name)
sliver.ensure_created(rec)
except:
- logger.log_exc("database.sync failed to handle sliver",name=name)
+ logger.log_exc("database: sync failed to handle sliver",name=name)
# Wake up bwmom to update limits.
bwmon.lock.set()
dump_requested = False
db_lock.release()
try: tools.write_file(DB_FILE, lambda f: f.write(db_pickle))
- except: logger.log_exc("failed in database.start.run")
+ except: logger.log_exc("database: failed in database.start.run")
global db
try:
f = open(DB_FILE)
try: db = cPickle.load(f)
finally: f.close()
+ except IOError:
+ logger.log ("database: Could not load %s -- starting from a fresh database"%DB_FILE)
+ db = Database()
except:
- logger.log_exc("failed in database.start")
+ logger.log_exc("database: failed in start")
db = Database()
tools.as_daemon_thread(run)
# $Id$
import os
-import logger
import subprocess
class IPTables:
dev_default = tools.get_default_if()
def start(options, conf):
- logger.log("net plugin starting up...")
+ logger.log("net: plugin starting up...")
def GetSlivers(data, config, plc):
- logger.verbose("net:GetSlivers called.")
- InitInterfaces(plc, data) # writes sysconfig files.
+ logger.verbose("net: GetSlivers called.")
+ if not 'interfaces' in data:
+ logger.log_missing_data('net.GetSlivers','interfaces')
+ return
+ plnet.InitInterfaces(logger, plc, data)
if 'OVERRIDES' in dir(config):
if config.OVERRIDES.get('net_max_rate') == '-1':
logger.log("net: Slice and node BW Limits disabled.")
if len(bwlimit.tc("class show dev %s" % dev_default)):
- logger.verbose("*** DISABLING NODE BW LIMITS ***")
+ logger.verbose("net: *** DISABLING NODE BW LIMITS ***")
bwlimit.stop()
else:
InitNodeLimit(data)
def InitNodeLimit(data):
- if not 'networks' in data: return
# query running network interfaces
devs = sioc.gifconf()
for dev in devs:
macs[sioc.gifhwaddr(dev).lower()] = dev
- for network in data['networks']:
+ for interface in data['interfaces']:
# Get interface name preferably from MAC address, falling
# back on IP address.
- hwaddr=network['mac']
+ hwaddr=interface['mac']
if hwaddr <> None: hwaddr=hwaddr.lower()
if hwaddr in macs:
- dev = macs[network['mac']]
- elif network['ip'] in ips:
- dev = ips[network['ip']]
+ dev = macs[interface['mac']]
+ elif interface['ip'] in ips:
+ dev = ips[interface['ip']]
else:
- logger.log('%s: no such interface with address %s/%s' % (network['hostname'], network['ip'], network['mac']))
+ logger.log('net: %s: no such interface with address %s/%s' % (interface['hostname'], interface['ip'], interface['mac']))
continue
# Get current node cap
old_bwlimit = None
# Get desired node cap
- if network['bwlimit'] is None or network['bwlimit'] < 0:
+ if interface['bwlimit'] is None or interface['bwlimit'] < 0:
new_bwlimit = bwlimit.bwmax
else:
- new_bwlimit = network['bwlimit']
+ new_bwlimit = interface['bwlimit']
if old_bwlimit != new_bwlimit:
# Reinitialize bandwidth limits
if not 'groups' in data: return
if "Internet2" in data['groups']:
- logger.log("This is an Internet2 node. Setting rules.")
+ logger.log("net: This is an Internet2 node. Setting rules.")
i2nodes = []
i2nodeids = plc.GetNodeGroups(["Internet2"])[0]['node_ids']
for node in plc.GetInterfaces({"node_id": i2nodeids}, ["ip"]):
os.popen("/sbin/iptables -t mangle " + cmd)
def InitNAT(plc, data):
- if not 'networks' in data: return
# query running network interfaces
devs = sioc.gifconf()
macs[sioc.gifhwaddr(dev).lower()] = dev
ipt = iptables.IPTables()
- for network in data['networks']:
+ for interface in data['interfaces']:
# Get interface name preferably from MAC address, falling
# back on IP address.
- hwaddr=network['mac']
+ hwaddr=interface['mac']
if hwaddr <> None: hwaddr=hwaddr.lower()
if hwaddr in macs:
- dev = macs[network['mac']]
- elif network['ip'] in ips:
- dev = ips[network['ip']]
+ dev = macs[interface['mac']]
+ elif interface['ip'] in ips:
+ dev = ips[interface['ip']]
else:
- logger.log('%s: no such interface with address %s/%s' % (network['hostname'], network['ip'], network['mac']))
+ logger.log('net: %s: no such interface with address %s/%s' % (interface['hostname'], interface['ip'], interface['mac']))
continue
try:
- settings = plc.GetInterfaceTags({'interface_tag_id': network['interface_tag_ids']})
+ settings = plc.GetInterfaceTags({'interface_tag_id': interface['interface_tag_ids']})
except:
continue
ipt.add_pf(fields)
ipt.commit()
-def InitInterfaces(plc, data):
- if not 'networks' in data: return
- plnet.InitInterfaces(logger, plc, data)
-
def start(options, config):
pass
def GetSlivers(config, plc):
'''Run call backs defined in modules'''
try:
- logger.log("Syncing w/ PLC")
+ logger.log("nm: Syncing w/ PLC")
# retrieve GetSlivers from PLC
data = plc.GetSlivers()
# use the magic 'default' slice to retrieve system-wide defaults
# used to be done only in verbose; very helpful though, and tedious to obtain,
# so let's dump this unconditionnally
logger.log_slivers(data)
- logger.verbose("Sync w/ PLC done (3)")
+ logger.verbose("nm: Sync w/ PLC done")
except:
- logger.log_exc("failed in nm.GetSlivers")
+ logger.log_exc("nm: failed in GetSlivers")
# XXX So some modules can at least boostrap.
logger.log("nm: Can't contact PLC to GetSlivers(). Continuing.")
data = {}
try:
callback = getattr(module, 'GetSlivers')
callback(data, config, plc)
- except: logger.log_exc("nm.GetSlivers failed to run callback for module %r"%module)
+ except: logger.log_exc("nm: GetSlivers failed to run callback for module %r"%module)
def getPLCDefaults(data, config):
attr_dict = {}
for attr in slice.get('attributes'): attr_dict[attr['tagname']] = attr['value']
if len(attr_dict):
- logger.verbose("Found default slice overrides.\n %s" % attr_dict)
+ logger.verbose("nm: Found default slice overrides.\n %s" % attr_dict)
config.OVERRIDES = attr_dict
return
# NOTE: if an _default slice existed, it would have been found above and
continue
sliver['attributes'].append({ 'tagname':'vref','value':slicefamily})
except:
- logger.log_exc("Could not overwrite 'vref' attribute from 'GetSliceFamily'",name=sliver['name'])
+ logger.log_exc("nm: Could not overwrite 'vref' attribute from 'GetSliceFamily'",name=sliver['name'])
def run():
if options.module:
assert options.module in known_modules
running_modules=[options.module]
- logger.verbose('Running single module %s'%options.module)
+ logger.verbose('nm: Running single module %s'%options.module)
else:
running_modules=known_modules
for module in running_modules:
plc = PLCAPI(config.plc_api_uri, config.cacert, session, timeout=iperiod/2)
#check auth
- logger.log("Checking Auth.")
+ logger.log("nm: Checking Auth.")
while plc.check_authentication() != True:
try:
plc.update_session()
- logger.log("Authentication Failure. Retrying")
+ logger.log("nm: Authentication Failure. Retrying")
except:
- logger.log("Retry Failed. Waiting")
+ logger.log("nm: Retry Failed. Waiting")
time.sleep(iperiod)
- logger.log("Authentication Succeeded!")
+ logger.log("nm: Authentication Succeeded!")
while True:
# Main NM Loop
- logger.verbose('mainloop - nm:getSlivers - period=%d random=%d'%(iperiod,irandom))
+ logger.verbose('nm: mainloop - calling GetSlivers - period=%d random=%d'%(iperiod,irandom))
GetSlivers(config, plc)
delay=iperiod + random.randrange(0,irandom)
- logger.verbose('mainloop - sleeping for %d s'%delay)
+ logger.verbose('nm: mainloop - sleeping for %d s'%delay)
time.sleep(delay)
- except: logger.log_exc("failed in nm.run")
+ except: logger.log_exc("nm: failed in run")
if __name__ == '__main__':
try:
authstatus = self.AuthCheck()
except:
- logger.log_exc("failed in plcapi.check_authentication")
+ logger.log_exc("plcapi: failed in plcapi.check_authentication")
return authstatus
CODEMUXCONF="/etc/codemux/codemux.conf"
def start(options, conf):
- logger.log("codemux plugin starting up...")
+ logger.log("codemux: plugin starting up...")
def GetSlivers(data, config, plc = None):
"""
import tools
def start(options, config):
- logger.log("rawdisk plugin starting up...")
+ logger.log("rawdisk: plugin starting up...")
def get_unused_devices():
devices = []
# should check whether its the proper type of device
continue
- logger.log("Copying %s to %s" % (i, path))
+ logger.log("rawdisk: Copying %s to %s" % (i, path))
try:
if os.path.exists(path):
os.unlink(path)
import tools
def start(options, conf):
- logger.log("sliverauth plugin starting up...")
+ logger.log("sliverauth: plugin starting up...")
def SetSliverTag(plc, slice, tagname, value):
node_id = tools.node_id()
try:
slivertag_id=plc.AddSliceTag(slice,tagname,value,node_id)
except:
- logger.log ("SetSliverTag - CAUGHT exception for (probably delegated) slice=%(slice)s tag=%(tagname)s node_id=%(node_id)d"%locals())
+ logger.log ("sliverauth: SetSliverTag - CAUGHT exception for (probably delegated) slice=%(slice)s tag=%(tagname)s node_id=%(node_id)d"%locals())
pass
else:
slivertag_id=slivertags[0]['slice_tag_id']
d = [random.choice(string.letters) for x in xrange(32)]
hmac = "".join(d)
SetSliverTag(plc,sliver['name'],'hmac',hmac)
- logger.log("sliverauth setting %s hmac" % sliver['name'])
+ logger.log("sliverauth: setting %s hmac" % sliver['name'])
path = '/vservers/%s/etc/planetlab' % sliver['name']
if os.path.exists(path):
if os.path.exists(keyfile):
os.unlink(keyfile)
os.rename(name,keyfile)
- logger.log("sliverauth writing hmac to %s " % keyfile)
+ logger.log("sliverauth: writing hmac to %s " % keyfile)
os.chmod(keyfile,0400)
import tools
def start(options, conf):
- logger.log("personkeys plugin starting up...")
+ logger.log("personkeys: plugin starting up...")
def GetSlivers(data, conf = None, plc = None):
if 'accounts' not in data:
if not os.access(dot_ssh, os.F_OK): os.mkdir(dot_ssh)
auth_keys = os.path.join(dot_ssh,'authorized_keys')
- logger.log("new keys = %s" % auth_keys)
+ logger.log("specialaccounts: new keys = %s" % auth_keys)
fd, fname = tempfile.mkstemp('','authorized_keys',dot_ssh)
for key in new_keys:
VSYSBKEND="/vsys"
def start(options, conf):
- logger.log("vsys plugin starting up...")
+ logger.log("vsys: plugin starting up...")
def GetSlivers(data, config=None, plc=None):
"""For each sliver with the vsys attribute, set the script ACL, create the vsys directory in the slice, and restart vsys."""
(path, slice) = line.split()
slicesinconf.append(slice)
f.close()
- except: logger.log_exc("failed vsys.parseConf")
+ except: logger.log_exc("vsys: failed parseConf")
return slicesinconf
VSYS_PRIV_DIR = "/etc/planetlab/vsys-attributes"
def start(options, conf):
- logger.log("vsys_privs plugin v0.1")
+ logger.log("vsys_privs: plugin starting")
if (not os.path.exists(VSYS_PRIV_DIR)):
os.makedirs(VSYS_PRIV_DIR)
- logger.log("Created vsys attributes dir")
+ logger.log("vsys_privs: Created vsys attributes dir")
def GetSlivers(data, config=None, plc=None):
data = '\n'.join(v)
f.write(data)
f.close()
- logger.log("Added vsys attribute %s for %s"%(k,slice))
+ logger.log("vsys_privs: added vsys attribute %s for %s"%(k,slice))
# Remove files and directories
# that are invalid
def __init__(self, rec):
name=rec['name']
- logger.verbose ('%s: initing Sliver_VS'%name)
+ logger.verbose ('sliver_vs: %s init'%name)
try:
- logger.log("%s: first chance..."%name)
+ logger.log("sliver_vs: %s: first chance..."%name)
vserver.VServer.__init__(self, name,logfile='/var/log/nm')
except Exception, err:
if not isinstance(err, vserver.NoSuchVServer):
# Probably a bad vserver or vserver configuration file
- logger.log_exc("sliver_vs.__init__ (1) %s",name=name)
- logger.log('%s: recreating bad vserver' % name)
+ logger.log_exc("sliver_vs:__init__ (first chance) %s",name=name)
+ logger.log('sliver_vs: %s: recreating bad vserver' % name)
self.destroy(name)
self.create(name, rec['vref'])
- logger.log("%s: second chance..."%name)
+ logger.log("sliver_vs: %s: second chance..."%name)
vserver.VServer.__init__(self, name,logfile='/var/log/nm')
self.keys = ''
@staticmethod
def create(name, vref = None):
- logger.verbose('Sliver_VS:create - name=%s'%name)
+ logger.verbose('sliver_vs: %s: create'%name)
if vref is None:
- logger.log("%s: ERROR - no vref attached, this is unexpected"%name)
+ logger.log("sliver_vs: %s: ERROR - no vref attached, this is unexpected"%(name))
return
# used to look in /etc/planetlab/family,
# now relies on the 'GetSliceFamily' extra attribute in GetSlivers()
# check the template exists -- there's probably a better way..
if not os.path.isdir ("/vservers/.vref/%s"%vref):
- logger.log ("%s: ERROR Could not create sliver - vreference image %s not found"%(name,vref))
+ logger.log ("sliver_vs: %s: ERROR Could not create sliver - vreference image %s not found"%(name,vref))
return
# guess arch
# set personality: only if needed (if arch's differ)
if tools.root_context_arch() != arch:
file('/etc/vservers/%s/personality' % name, 'w').write(personality(arch))
- logger.log('%s: set personality to %s'%(name,personality(arch)))
+ logger.log('sliver_vs: %s: set personality to %s'%(name,personality(arch)))
@staticmethod
def destroy(name): logger.log_call('/usr/sbin/vuserdel', name)
def start(self, delay=0):
if self.rspec['enabled'] > 0:
- logger.log('%s: starting in %d seconds' % (self.name, delay))
+ logger.log('sliver_vs: %s: starting in %d seconds' % (self.name, delay))
time.sleep(delay)
# VServer.start calls fork() internally,
# so just close the nonstandard fds and fork once to avoid creating zombies
child_pid = os.fork()
if child_pid == 0:
if self.initscriptchanged:
- logger.log('%s: installing initscript' % self.name)
+ logger.log('sliver_vs: %s: installing initscript' % self.name)
def install_initscript():
flags = os.O_WRONLY | os.O_CREAT | os.O_TRUNC
fd = os.open('/etc/rc.vinit', flags, 0755)
os.close(fd)
try:
self.chroot_call(install_initscript)
- except: logger.log_exc("sliver_vs.start",name=self.name)
+ except: logger.log_exc("sliver_vs: start",name=self.name)
tools.close_nonstandard_fds()
vserver.VServer.start(self)
os._exit(0)
else:
os.waitpid(child_pid, 0)
self.initscriptchanged = False
- else: logger.log('not starting, is not enabled', name=self.name)
+ else: logger.log('sliver_vs: not starting, is not enabled', name=self.name)
def stop(self):
- logger.log('%s: stopping' % self.name)
+ logger.log('sliver_vs: %s: stopping' % self.name)
vserver.VServer.stop(self)
def is_running(self):
def set_resources(self,setup=False):
disk_max = self.rspec['disk_max']
- logger.log('%s: setting max disk usage to %d KiB' % (self.name, disk_max))
+ logger.log('sliver_vs: %s: setting max disk usage to %d KiB' % (self.name, disk_max))
try: # if the sliver is over quota, .set_disk_limit will throw an exception
if not self.disk_usage_initialized:
self.vm_running = False
Sliver_VS._init_disk_info_sem.acquire()
- logger.log('%s: computing disk usage: beginning' % self.name)
+ logger.log('sliver_vs: %s: computing disk usage: beginning' % self.name)
try: self.init_disk_info()
finally: Sliver_VS._init_disk_info_sem.release()
- logger.log('%s: computing disk usage: ended' % self.name)
+ logger.log('sliver_vs: %s: computing disk usage: ended' % self.name)
self.disk_usage_initialized = True
vserver.VServer.set_disklimit(self, max(disk_max, self.disk_blocks))
except:
- logger.log_exc('failed to set max disk usage',name=self.name)
+ logger.log_exc('sliver_vs: failed to set max disk usage',name=self.name)
# get/set the min/soft/hard values for all of the vserver
# related RLIMITS. Note that vserver currently only
hard = self.rspec['%s_hard'%type]
update = self.set_rlimit(limit, hard, soft, minimum)
if update:
- logger.log('%s: setting rlimit %s to (%d, %d, %d)'
+ logger.log('sliver_vs: %s: setting rlimit %s to (%d, %d, %d)'
% (self.name, type, hard, soft, minimum))
self.set_capabilities_config(self.rspec['capabilities'])
if self.rspec['capabilities']:
- logger.log('%s: setting capabilities to %s' % (self.name, self.rspec['capabilities']))
+ logger.log('sliver_vs: %s: setting capabilities to %s' % (self.name, self.rspec['capabilities']))
cpu_pct = self.rspec['cpu_pct']
cpu_share = self.rspec['cpu_share']
sysctl=key.split('.')
try:
path="/proc/sys/%s" % ("/".join(sysctl[1:]))
- logger.log("%s: opening %s"%(self.name,path))
+ logger.log("sliver_vs: %s: opening %s"%(self.name,path))
flags = os.O_WRONLY
fd = os.open(path, flags)
- logger.log("%s: writing %s=%s"%(self.name,key,self.rspec[key]))
+ logger.log("sliver_vs: %s: writing %s=%s"%(self.name,key,self.rspec[key]))
os.write(fd,self.rspec[key])
os.close(fd)
except IOError, e:
- logger.log("%s: could not set %s=%s"%(self.name,key,self.rspec[key]))
- logger.log("%s: error = %s"%(self.name,e))
+ logger.log("sliver_vs: %s: could not set %s=%s"%(self.name,key,self.rspec[key]))
+ logger.log("sliver_vs: %s: error = %s"%(self.name,e))
if self.rspec['enabled'] > 0:
if cpu_pct > 0:
- logger.log('%s: setting cpu reservation to %d%%' % (self.name, cpu_pct))
+ logger.log('sliver_vs: %s: setting cpu reservation to %d%%' % (self.name, cpu_pct))
else:
cpu_pct = 0
if cpu_share > 0:
- logger.log('%s: setting cpu share to %d' % (self.name, cpu_share))
+ logger.log('sliver_vs: %s: setting cpu share to %d' % (self.name, cpu_share))
else:
cpu_share = 0
self.set_sched_config(cpu_pct, cpu_share)
# if IP address isn't set (even to 0.0.0.0), sliver won't be able to use network
if self.rspec['ip_addresses'] != '0.0.0.0':
- logger.log('%s: setting IP address(es) to %s' % \
+ logger.log('sliver_vs: %s: setting IP address(es) to %s' % \
(self.name, self.rspec['ip_addresses']))
self.set_ipaddresses_config(self.rspec['ip_addresses'])
if self.is_running():
- logger.log("%s: Setting name to %s" % (self.name, self.slice_id))
+ logger.log("sliver_vs: %s: Setting name to %s" % (self.name, self.slice_id))
self.setname(self.slice_id)
### Sapan's change needs more work
# raise IOException, file does not get created
# might be that /etc/vservers is not available here, are we in the chroot ?
- #logger.log("%s: Storing slice id of %s for PlanetFlow" % (self.name, self.slice_id))
+ #logger.log("sliver_vs: %s: Storing slice id of %s for PlanetFlow" % (self.name, self.slice_id))
#file('/etc/vservers/%s/slice_id' % self.name, 'w').write(self.slice_id)
if self.enabled == False:
if False: # Does not work properly yet.
if self.have_limits_changed():
- logger.log('%s: limits have changed --- restarting' % self.name)
+ logger.log('sliver_vs: %s: limits have changed --- restarting' % self.name)
stopcount = 10
while self.is_running() and stopcount > 0:
self.stop()
self.start()
else: # tell vsh to disable remote login by setting CPULIMIT to 0
- logger.log('%s: disabling remote login' % self.name)
+ logger.log('sliver_vs: %s: disabling remote login' % self.name)
self.set_sched_config(0, 0)
self.enabled = False
self.stop()
in, use the GetSlivers() heartbeat as a cue to scan for expired
slivers."""
- logger.verbose("Entering sm:GetSlivers with fullupdate=%r"%fullupdate)
+ logger.verbose("sm: Entering GetSlivers with fullupdate=%r"%fullupdate)
for key in data.keys():
- logger.verbose('GetSlivers key : ' + key)
+ logger.verbose('sm: GetSlivers key : ' + key)
node_id = None
try:
f = open('/etc/planetlab/node_id')
try: node_id = int(f.read())
finally: f.close()
- except: logger.log_exc("sm.GetSlivers failed to read /etc/planetlab/node_id")
+ except: logger.log_exc("sm: GetSlivers failed to read /etc/planetlab/node_id")
if data.has_key('node_id') and data['node_id'] != node_id: return
return
initscripts = {}
for is_rec in data['initscripts']:
- logger.verbose("initscript: %s" % is_rec['name'])
+ logger.verbose("sm: initscript: %s" % is_rec['name'])
initscripts[str(is_rec['name'])] = is_rec['script']
for sliver in data['slivers']:
- logger.verbose("%s: sm:GetSlivers in slivers loop"%sliver['name'])
+ logger.verbose("sm: %s: sm:GetSlivers in slivers loop"%sliver['name'])
rec = sliver.copy()
rec.setdefault('timestamp', data['timestamp'])
except:
os.seteuid(os.getuid()) # undo su so we can write the log file
os.setegid(os.getgid())
- logger.log_exc("tools.fork_as")
+ logger.log_exc("tools: fork_as")
os._exit(0)
else: os.waitpid(child_pid, 0)
class NMLock:
def __init__(self, file):
- logger.log("Lock %s initialized." % file, 2)
+ logger.log("tools: Lock %s initialized." % file, 2)
self.fd = os.open(file, os.O_RDWR|os.O_CREAT, 0600)
flags = fcntl.fcntl(self.fd, fcntl.F_GETFD)
flags |= fcntl.FD_CLOEXEC
def __del__(self):
os.close(self.fd)
def acquire(self):
- logger.log("Lock acquired.", 2)
+ logger.log("tools: Lock acquired.", 2)
fcntl.lockf(self.fd, fcntl.LOCK_SH)
def release(self):
- logger.log("Lock released.", 2)
+ logger.log("tools: Lock released.", 2)
fcntl.lockf(self.fd, fcntl.LOCK_UN)