"""vsys configurator. Maintains ACLs and script pipes inside vservers based on slice attributes."""
-import logger
import os
+import subprocess
+
+import logger
import tools
VSYSCONF="/etc/vsys.conf"
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."""
+ """
+ For each sliver with the vsys attribute:
+ set the script ACL, create the vsys directory in the slice, and restart vsys
+ """
if 'slivers' not in data:
- logger.log_missing_data("vsys.GetSlivers",'slivers')
+ logger.log_missing_data("vsys.GetSlivers", 'slivers')
return
# Touch ACLs and create dict of available
_restart = False
# Parse attributes and update dict of scripts
if 'slivers' not in data:
- logger.log_missing_data("vsys.GetSlivers",'slivers')
+ logger.log_missing_data("vsys.GetSlivers", 'slivers')
return
for sliver in data['slivers']:
for attribute in sliver['attributes']:
restartService()
# check for systemctl, use it if present
-def restartService ():
+# keyword being 'start', 'stop' or 'restart'
+def handleService(keyword):
if tools.has_systemctl():
- logger.log("vsys: restarting vsys service through systemctl")
- logger.log_call(["systemctl", "restart", "vsys"])
+ logger.log("vsys: %s'ing vsys service through systemctl"%keyword)
+ return logger.log_call(["systemctl", keyword, "vsys"], timeout=5)
else:
- logger.log("vsys: restarting vsys service through /etc/init.d/vsys")
- logger.log_call(["/etc/init.d/vsys", "restart", ])
+ logger.log("vsys: %s'ing vsys service through /etc/init.d/vsys"%keyword)
+ return logger.log_call(["/etc/init.d/vsys", keyword], timeout=5)
+
+def startService():
+ return handleService ('start')
+def stopService():
+ return handleService ('stop')
+def restartService():
+ return handleService ('restart')
def createVsysDir(sliver):
- '''Create /vsys directory in slice. Update vsys conf file.'''
+ """Create /vsys directory in slice. Update vsys conf file."""
try:
os.mkdir("/vservers/%s/vsys" % sliver)
return True
for (root, dirs, files) in os.walk(VSYSBKEND):
for file in files:
if file.endswith(".acl") and not file.startswith("local_"):
- f = open(root+"/"+file,"r+")
- scriptname = file.replace(".acl", "")
- scriptacls[scriptname] = []
- for slice in f.readlines():
- scriptacls[scriptname].append(slice.rstrip())
- f.close()
+ with open(root+"/"+file, "r+") as f:
+ scriptname = file.replace(".acl", "")
+ scriptacls[scriptname] = []
+ for slice in f.readlines():
+ scriptacls[scriptname].append(slice.rstrip())
# return what scripts are configured for which slices.
return scriptacls
if (len(slivers) != len(oldslivers)) or \
(len(set(oldslivers) - set(slivers)) != 0):
logger.log("vsys: Updating %s" % VSYSCONF)
- f = open(VSYSCONF,"w")
+ f = open(VSYSCONF, "w")
for sliver in slivers:
f.write("/vservers/%(name)s/vsys %(name)s\n" % {"name": sliver})
f.truncate()
# before shutting down slivers, it is safe to first remove them from vsys's scope
# so that we are sure that no dangling open file remains
-# this will also restart vsys if needed
+# this will also stop vsys if needed (in which case it return True to tell caller to restart vsys once done)
def removeSliverFromVsys (sliver):
current_slivers=parseConf()
new_slivers= [ s for s in current_slivers if s != sliver ]
if writeConf (current_slivers, new_slivers):
- restartService()
+ stopService()
trashVsysHandleInSliver (sliver)
+ return True
else:
logger.log("vsys.removeSliverFromConf: no need to remove %s"%sliver)
-
+ return False
def trashVsysHandleInSliver (sliver):
slice_vsys_area = "/vservers/%s/vsys"%sliver
if not os.path.exists(slice_vsys_area):
logger.log("vsys.trashVsysHandleInSliver: no action needed, %s not found"%slice_vsys_area)
return
- ret=subprocess.call([ 'rm', '-rf' , slice_vsys_area])
- logger.log ("vsys.trashVsysHandleInSliver: Removed %s (retcod=%s)"%(slice_vsys_area,retcod))
+ retcod=subprocess.call([ 'rm', '-rf' , slice_vsys_area])
+ logger.log ("vsys.trashVsysHandleInSliver: Removed %s (retcod=%s)"%(slice_vsys_area, retcod))