X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=plugins%2Fprivatebridge.py;h=9489f69cfdf004c5b32781757695017cfccefd9f;hb=74d5761f260b5d887733e826b4ce6aed11f11487;hp=72bff531b8cd9ae7893108278e3cac1912454062;hpb=9e6b9c1ea9e020c55c85b433bac47231d63e9ffd;p=nodemanager.git diff --git a/plugins/privatebridge.py b/plugins/privatebridge.py index 72bff53..9489f69 100644 --- a/plugins/privatebridge.py +++ b/plugins/privatebridge.py @@ -1,44 +1,44 @@ -#!/usr/bin/env python +""" +Private Bridge configurator. +""" -""" Private Bridge configurator. """ - -import httplib -import os import select -import shutil import subprocess import time import tools -from threading import Thread import logger -import tools priority = 9 class OvsException (Exception) : - def __init__ (self, message="no message"): - self.message=message - def __repr__ (self): return message + def __init__(self, message="no message"): + self.message = message + def __repr__(self): + return self.message def start(): logger.log('private bridge plugin starting up...') -def log_call_read(command,timeout=logger.default_timeout_minutes*60,poll=1): - message=" ".join(command) +def log_call_read(command, timeout=logger.default_timeout_minutes*60, poll=1): + message = " ".join(command) logger.log("log_call: running command %s" % message) logger.verbose("log_call: timeout=%r s" % timeout) logger.verbose("log_call: poll=%r s" % poll) - trigger=time.time()+timeout + trigger = time.time()+timeout try: - child = subprocess.Popen(command, bufsize=1, - stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=True) + child = subprocess.Popen( + command, bufsize=1, + stdout=subprocess.PIPE, stderr=subprocess.PIPE, + close_fds=True, + universal_newlines=True) stdout = "" while True: # see if anything can be read within the poll interval - (r,w,x)=select.select([child.stdout],[],[],poll) - if r: stdout = stdout + child.stdout.read(1) + (r, w, x) = select.select([child.stdout], [], [], poll) + if r: + stdout = stdout + child.stdout.read(1) # is process over ? returncode=child.poll() # yes @@ -52,27 +52,29 @@ def log_call_read(command,timeout=logger.default_timeout_minutes*60,poll=1): return (returncode, stdout) # child has failed else: - log("log_call:end command (%s) returned with code %d" %(message,returncode)) + log("log_call:end command (%s) returned with code %d" + %(message, returncode)) return (returncode, stdout) # no : still within timeout ? if time.time() >= trigger: child.terminate() - logger.log("log_call:end terminating command (%s) - exceeded timeout %d s"%(message,timeout)) + logger.log("log_call:end terminating command (%s) - exceeded timeout %d s" + %(message, timeout)) return (-2, None) break except Exception as e: - logger.log_exc("failed to run command %s -> %s" % (message,e)) + logger.log_exc("failed to run command %s -> %s" % (message, e)) return (-1, None) ### Thierry - 23 Sept 2014 -# regardless of this being shipped on lxc-only or on all nodes, -# it is safer to check for the availability of the ovs-vsctl command and just print +# regardless of this being shipped on lxc-only or on all nodes, +# it is safer to check for the availability of the ovs-vsctl command and just print # out a warning when it's not there, instead of a nasty traceback def ovs_available (): "return True if ovs-vsctl can be run" try: - child = subprocess.Popen (['ovs-ovsctl', '--help']) + child = subprocess.Popen (['ovs-vsctl', '--help']) child.communicate() return True except: @@ -87,7 +89,7 @@ def ovs_listbridge(): return stdout.split() def ovs_addbridge(name): - (returncode, stdout) = ovs_vsctl(["add-br",name]) + (returncode, stdout) = ovs_vsctl(["add-br", name]) if (returncode != 0): raise OvsException("add-br") def ovs_listports(name): @@ -96,7 +98,7 @@ def ovs_listports(name): return stdout.split() def ovs_delbridge(name): - (returncode, stdout) = ovs_vsctl(["del-br",name]) + (returncode, stdout) = ovs_vsctl(["del-br", name]) if (returncode != 0): raise OvsException("del-br") def ovs_addport(name, portname, type, remoteip, key): @@ -106,11 +108,12 @@ def ovs_addport(name, portname, type, remoteip, key): if key: args = args + ["options:key=" + str(key)] - (returncode, stdout) = ovs_vsctl(args) - if (returncode != 0): raise OvsException("add-port") + returncode, stdout = ovs_vsctl(args) + if (returncode != 0): + raise OvsException("add-port") def ovs_delport(name, portname): - (returncode, stdout) = ovs_vsctl(["del-port",name,portname]) + (returncode, stdout) = ovs_vsctl(["del-port", name, portname]) if (returncode != 0): raise OvsException("del-port") def ensure_slicebridge_created(name, addr): @@ -171,7 +174,7 @@ def GetSlivers(data, conf = None, plc = None): node_id = tools.node_id() if 'slivers' not in data: - logger.log_missing_data("privatebridge.GetSlivers",'slivers') + logger.log_missing_data("privatebridge.GetSlivers", 'slivers') return valid_bridges = [] @@ -179,11 +182,11 @@ def GetSlivers(data, conf = None, plc = None): sliver_name = sliver['name'] # build a dict of attributes, because it's more convenient - attributes={} + attributes = {} for attribute in sliver['attributes']: attributes[attribute['tagname']] = attribute['value'] - bridge_name = attributes.get('slice_bridge_name',None) + bridge_name = attributes.get('slice_bridge_name', None) if bridge_name: configure_slicebridge(sliver, attributes) valid_bridges.append(bridge_name) @@ -202,6 +205,3 @@ def GetSlivers(data, conf = None, plc = None): logger.log("privatebridge: deleting unused bridge %s" % bridge_name) ovs_delbridge(bridge_name) - - -