Prepare Open vSwitch 1.1.2 release.
[sliver-openvswitch.git] / xenserver / usr_share_openvswitch_scripts_ovs-xapi-sync
index 4d030fd..d1ccc6f 100755 (executable)
@@ -148,6 +148,24 @@ def update_fail_mode(name):
 
     call_vsctl(["set", "bridge", name, "fail_mode=" + fail_mode])
 
+def update_in_band_mgmt(name):
+    rec = get_network_by_bridge(name)
+
+    if not rec:
+        return
+
+    dib = rec['other_config'].get('vswitch-disable-in-band')
+    if not dib:
+        call_vsctl(['remove', 'bridge', name, 'other_config',
+                    'disable-in-band'])
+    elif dib in ['true', 'false']:
+        call_vsctl(['set', 'bridge', name,
+                    'other_config:disable-in-band=' + dib])
+    else:
+        s_log.warning('"' + dib + '"'
+                      "isn't a valid setting for other_config:disable-in-band on " +
+                      name)
+
 def update_bridge_id(name, ids):
     id = get_bridge_id(name, ids.get("xs-network-uuids"))
 
@@ -158,11 +176,13 @@ def update_bridge_id(name, ids):
 
     if ids.get("bridge-id") != primary_id:
         set_external_id("Bridge", name, "bridge-id", primary_id)
+        ids["bridge-id"] = primary_id
 
 def update_iface_id(name, ids):
     id = get_iface_id(name, ids.get("xs-vif-uuid"))
     if ids.get("iface-id") != id and id:
         set_external_id("Interface", name, "iface-id", id)
+        ids["iface-id"] = id
 
 def keep_table_columns(schema, table_name, column_types):
     table = schema.tables.get(table_name)
@@ -234,8 +254,6 @@ def main(argv):
                          "(use --help for help)\n" % ovs.util.PROGRAM_NAME)
         sys.exit(1)
 
-    ovs.daemon.die_if_already_running()
-
     remote = args[0]
     idl = ovs.db.idl.Idl(remote, "Open_vSwitch", monitor_uuid_schema_cb)
 
@@ -267,18 +285,23 @@ def main(argv):
         for rec in idl.data["Bridge"].itervalues():
             name = rec.name.as_scalar()
             xs_network_uuids = rec.external_ids.get("xs-network-uuids")
-            new_bridges[name] = {"xs-network-uuids": xs_network_uuids}
+            bridge_id = rec.external_ids.get("bridge-id")
+            new_bridges[name] = {"xs-network-uuids": xs_network_uuids,
+                                 "bridge-id": bridge_id}
 
         new_interfaces = {}
         for rec in idl.data["Interface"].itervalues():
             name = rec.name.as_scalar()
             xs_vif_uuid = rec.external_ids.get("xs-vif-uuid")
-            new_interfaces[name] = {"xs-vif-uuid": xs_vif_uuid}
+            iface_id = rec.external_ids.get("iface-id")
+            new_interfaces[name] = {"xs-vif-uuid": xs_vif_uuid,
+                                    "iface-id": iface_id}
 
         if bridges != new_bridges:
             for name,ids in new_bridges.items():
                 if name not in bridges:
                     update_fail_mode(name)
+                    update_in_band_mgmt(name)
 
                 if (name not in bridges) or (bridges[name] != ids):
                     update_bridge_id(name, ids)