X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=xenserver%2Fetc_xapi.d_plugins_openvswitch-cfg-update;h=7333018687347a620e81573953e0cab979e108c7;hb=61d8d58305e7f9866a6d6c95c3a031c1bdece588;hp=27aeaf624f2de58be8e761de5ba7dcdc0240f34d;hpb=7730bd8fde61da83fefaaee062b66c02332ff28e;p=openvswitch diff --git a/xenserver/etc_xapi.d_plugins_openvswitch-cfg-update b/xenserver/etc_xapi.d_plugins_openvswitch-cfg-update index 27aeaf62..73330186 100755 --- a/xenserver/etc_xapi.d_plugins_openvswitch-cfg-update +++ b/xenserver/etc_xapi.d_plugins_openvswitch-cfg-update @@ -39,6 +39,15 @@ def delete_cacert(): pass def update(session, args): + # Refresh bridge network UUIDs in case this host joined or left a pool. + script = "/opt/xensource/libexec/interface-reconfigure" + try: + retval = subprocess.call([script, "rewrite"]) + if retval != 0: + syslog.syslog("%s exited with status %d" % (script, retval)) + except OSError, e: + syslog.syslog("%s: failed to execute (%s)" % (script, e.strerror)) + pools = session.xenapi.pool.get_all() # We assume there is only ever one pool... if len(pools) == 0: @@ -47,16 +56,29 @@ def update(session, args): raise XenAPIPlugin.Failure("MORE_THAN_ONE_POOL_FOR_HOST", []) pool = session.xenapi.pool.get_record(pools[0]) try: - controller = pool["other_config"]["vSwitchController"] + try: + controller = pool["vswitch_controller"] + except KeyError: + # On systems older than XenServer 5.6.0, we needed to store + # the key in "other_config". + controller = pool["other_config"]["vSwitchController"] except KeyError, e: controller = "" currentController = vswitchCurrentController() if controller == "" and currentController != "": delete_cacert() + try: + emergency_reset(session, None) + except: + pass removeControllerCfg() return "Successfully removed controller config" elif controller != currentController: delete_cacert() + try: + emergency_reset(session, None) + except: + pass setControllerCfg(controller) return "Successfully set controller to " + controller else: @@ -89,7 +111,7 @@ def setControllerCfg(controller): 'managers="ssl:' + controller + ':6632"']) def vswitchCfgQuery(action_args): - cmd = [vsctl, "-vANY:console:emer"] + action_args + cmd = [vsctl, "--timeout=5", "-vANY:console:emer"] + action_args output = subprocess.Popen(cmd, stdout=subprocess.PIPE).communicate() if len(output) == 0 or output[0] == None: output = "" @@ -98,17 +120,20 @@ def vswitchCfgQuery(action_args): return output def vswitchCfgMod(action_args): - cmd = [vsctl, "-vANY:console:emer"] + action_args + cmd = [vsctl, "--timeout=5", "-vANY:console:emer"] + action_args exitcode = subprocess.call(cmd) if exitcode != 0: raise XenAPIPlugin.Failure("VSWITCH_CONFIG_MOD_FAILURE", [ str(exitcode) , str(action_args) ]) def emergency_reset(session, args): - # This function is just a place holder for testing until the real - # functionality is implemented. - syslog.syslog("openvswitch-cfg-update: emergency_reset called") - return "Need to implement emergency_reset" + cmd = [vsctl, "--timeout=5", "emer-reset"] + exitcode = subprocess.call(cmd) + if exitcode != 0: + raise XenAPIPlugin.Failure("VSWITCH_EMER_RESET_FAILURE", + [ str(exitcode) ]) + + return "Successfully reset configuration" if __name__ == "__main__": XenAPIPlugin.dispatch({"update": update,