X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=xenserver%2Fusr_share_openvswitch_scripts_ovs-external-ids;h=07303e3eabd29792c9c75a6b2a7b3491bba08f32;hb=3c4486a5f784731b1cb289d187ad9d9e100407c3;hp=72ecb403cf869f9ce466325893fa1b3105102696;hpb=69c675a07271d6b4b9bfd9ed49ac354f7af24613;p=openvswitch diff --git a/xenserver/usr_share_openvswitch_scripts_ovs-external-ids b/xenserver/usr_share_openvswitch_scripts_ovs-external-ids index 72ecb403..07303e3e 100755 --- a/xenserver/usr_share_openvswitch_scripts_ovs-external-ids +++ b/xenserver/usr_share_openvswitch_scripts_ovs-external-ids @@ -21,11 +21,11 @@ # Bridge table and duplicates its value to the preferred "xs-network-uuids". import getopt +import logging, logging.handlers import os import signal import subprocess import sys -import syslog import time import XenAPI @@ -36,6 +36,14 @@ import ovs.util import ovs.daemon import ovs.db.idl +s_log = logging.getLogger("ovs-external-ids") +l_handler = logging.handlers.RotatingFileHandler( + "/var/log/openvswitch/ovs-external-ids.log") +l_formatter = logging.Formatter('%(filename)s: %(levelname)s: %(message)s') +l_handler.setFormatter(l_formatter) +s_log.addHandler(l_handler) +s_log.setLevel(logging.INFO) + vsctl="/usr/bin/ovs-vsctl" session = None force_run = False @@ -55,8 +63,7 @@ def init_session(): session.xenapi.login_with_password("", "") except: session = None - syslog.syslog(syslog.LOG_WARNING, - "ovs-external-ids: Couldn't login to XAPI") + s_log.warning("Couldn't login to XAPI") return False return True @@ -67,6 +74,8 @@ def init_session(): # record of XAPI. def get_bridge_id(br_name, default=None): if not init_session(): + s_log.warning("Failed to get bridge id %s because" + " XAPI session could not be initialized" % br_name) return default for n in session.xenapi.network.get_all(): @@ -79,32 +88,31 @@ def get_bridge_id(br_name, default=None): # same as "xs-vif-uuid". This may be overridden by defining a # "nicira-iface-id" key in the "other_config" field of the VIF # record of XAPI. -def get_iface_id(if_name, default=None): +def get_iface_id(if_name, xs_vif_uuid): if not if_name.startswith("vif"): - return default - - domain,device = if_name.strip("vif").split(".") + # Treat whatever was passed into 'xs_vif_uuid' as a default + # value for non-VIFs. + return xs_vif_uuid if not init_session(): - return default - - for n in session.xenapi.VM.get_all(): - if session.xenapi.VM.get_domid(n) == domain: - vifs = session.xenapi.VM.get_VIFs(n) - for vif in vifs: - rec = session.xenapi.VIF.get_record(vif) - if rec['device'] == device: - return rec['other_config'].get('nicira-iface-id', default) - return None + s_log.warning("Failed to get interface id %s because" + " XAPI session could not be initialized" % if_name) + return xs_vif_uuid + try: + vif = session.xenapi.VIF.get_by_uuid(xs_vif_uuid) + rec = session.xenapi.VIF.get_record(vif) + return rec['other_config'].get('nicira-iface-id', xs_vif_uuid) + except XenAPI.Failure: + s_log.warning("Could not find XAPI entry for VIF %s" % if_name) + return xs_vif_uuid def set_external_id(table, record, key, value): col = 'external-ids:"' + key + '"="' + value + '"' cmd = [vsctl, "--timeout=30", "-vANY:console:emer", "set", table, record, col] exitcode = subprocess.call(cmd) if exitcode != 0: - syslog.syslog(syslog.LOG_WARNING, - "ovs-external-ids: Couldn't call ovs-vsctl") + s_log.warning("Couldn't call ovs-vsctl") # XAPI on XenServer 5.6 uses the external-id "network-uuids" for internal # networks, but we now prefer "xs-network-uuids". Look for its use and @@ -224,6 +232,7 @@ def main(argv): continue if force_run: + s_log.info("Forced to re-run as the result of a SIGHUP") bridges = {} interfaces = {} force_run = False @@ -263,6 +272,9 @@ def main(argv): if __name__ == '__main__': try: main(sys.argv) - except error.Error, e: - sys.stderr.write("%s\n" % e) - sys.exit(1) + except SystemExit: + # Let system.exit() calls complete normally + raise + except: + s_log.exception("traceback") + sys.exit(ovs.daemon.RESTART_EXIT_CODE)