X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=vsys.py;h=d26ee4a6525bc9e1a337a98c0a9184e47a9739cf;hb=187bb4c3140fd0820a92d61eeda004b52403a955;hp=5766f8249bdb0ed9a4d0b3e7abd3b7ee8bce7c6c;hpb=ed1fe6fee3120d76fffb9ab676003a39c8ba313f;p=nodemanager.git diff --git a/vsys.py b/vsys.py index 5766f82..d26ee4a 100644 --- a/vsys.py +++ b/vsys.py @@ -5,7 +5,6 @@ import logger import os -import vserver from sets import Set VSYSCONF="/etc/vsys.conf" @@ -18,44 +17,37 @@ def start(options, config): def GetSlivers(data): """For each sliver with the vsys attribute, set the script ACL, create the vsys directory in the slice, and restart vsys.""" # Touch ACLs and create dict of available - # XXX ...Sigh... fromkeys will use an immutable - #scripts = dict.fromkeys(touchAcls(),[])A scripts = {} for script in touchAcls(): scripts[script] = [] # slices that need to be written to the conf slices = [] + _restart = False # Parse attributes and update dict of scripts for sliver in data['slivers']: for attribute in sliver['attributes']: - if attribute['name'] == 'vsys': - # Check to see if sliver is running. If not, continue - try: - if vserver.VServer(sliver['name']).is_running(): - if sliver['name'] not in slices: - # add to conf - slices.append(sliver['name']) - # As the name implies, when we find an attribute, we - createVsysDir(sliver['name']) - # add it to our list of slivers that need vsys - if attribute['value'] in scripts.keys(): - scripts[attribute['value']].append(sliver['name']) - except: - logger.log("vsys: sliver %s not running yet. Deferring." \ - % sliver['name']) - pass + if attribute['tagname'] == 'vsys': + if sliver['name'] not in slices: + # add to conf + slices.append(sliver['name']) + _restart = createVsysDir(sliver['name']) or _restart + if attribute['value'] in scripts.keys(): + scripts[attribute['value']].append(sliver['name']) # Write the conf - writeConf(slices, parseConf()) + _restart = writeConf(slices, parseConf()) or _restart # Write out the ACLs - if writeAcls(scripts, parseAcls()): + if writeAcls(scripts, parseAcls()) or _restart: logger.log("vsys: restarting vsys service") os.system("/etc/init.d/vsys restart") def createVsysDir(sliver): '''Create /vsys directory in slice. Update vsys conf file.''' - try: os.makedirs("/vservers/%s/vsys" % sliver) - except OSError: pass + try: + os.mkdir("/vservers/%s/vsys" % sliver) + return True + except OSError: + return False def touchAcls(): @@ -66,8 +58,10 @@ def touchAcls(): scripts = [] for (root, dirs, files) in os.walk(VSYSBKEND): for file in files: + # ingore scripts that start with local_ + if file.startswith("local_"): continue if file.endswith(".acl"): - acls.append(file.rstrip(".acl")) + acls.append(file.replace(".acl", "")) else: scripts.append(file) for new in (Set(scripts) - Set(acls)): @@ -105,9 +99,9 @@ def parseAcls(): scriptacls = {} for (root, dirs, files) in os.walk(VSYSBKEND): for file in files: - if file.endswith(".acl"): + if file.endswith(".acl") and not file.startswith("local_"): f = open(root+"/"+file,"r+") - scriptname = file.rstrip(".acl") + scriptname = file.replace(".acl", "") scriptacls[scriptname] = [] for slice in f.readlines(): scriptacls[scriptname].append(slice.rstrip()) @@ -129,6 +123,9 @@ def writeConf(slivers, oldslivers): f.write("/vservers/%(name)s/vsys %(name)s\n" % {"name": sliver}) f.truncate() f.close() + return True + else: + return False def parseConf(): @@ -143,5 +140,3 @@ def parseConf(): f.close() except: logger.log_exc() return slicesinconf - -