aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEthan Jackson <ethan@nicira.com>2011-06-22 13:42:52 -0700
committerEthan Jackson <ethan@nicira.com>2011-06-22 16:11:36 -0700
commit86014a2861398ae3a1857ed24fba3a080853d74c (patch)
tree0f17929d02b91c18fe0ed24f6dbc1917cd1334a0
parent53319f95b9d3d025917110e2688a2cf0616f7071 (diff)
xenserver: Update all external_ids in tap interfaces.
Commit 400430 "xenserver: Give tap devices iface-ids." copies the iface-id from vifs to their related tap device. It turns out this is not sufficient, so this commit copies all relevant external_ids over. Requested-by: Pankaj Thakkar <thakkar@nicira.com> Signed-off-by: Ethan Jackson <ethan@nicira.com> Bug #5954.
-rwxr-xr-xxenserver/usr_share_openvswitch_scripts_ovs-xapi-sync31
1 files changed, 29 insertions, 2 deletions
diff --git a/xenserver/usr_share_openvswitch_scripts_ovs-xapi-sync b/xenserver/usr_share_openvswitch_scripts_ovs-xapi-sync
index 400693cc..02966217 100755
--- a/xenserver/usr_share_openvswitch_scripts_ovs-xapi-sync
+++ b/xenserver/usr_share_openvswitch_scripts_ovs-xapi-sync
@@ -124,8 +124,12 @@ def call_vsctl(args):
s_log.warning("Couldn't call ovs-vsctl")
def set_external_id(table, record, key, value):
- col = 'external-ids:"' + key + '"="' + value + '"'
- call_vsctl(["set", table, record, col])
+ if value:
+ col = 'external-ids:"%s"="%s"' % (key, value)
+ call_vsctl(["set", table, record, col])
+ else:
+ call_vsctl(["remove", table, record, "external-ids", key])
+
# XenServer does not call interface-reconfigure on internal networks,
# which is where the fail-mode would normally be set.
@@ -235,6 +239,27 @@ def handler(signum, frame):
if (signum == signal.SIGHUP):
force_run = True
+def update_tap_from_vif(idl, tap_name, vif_name):
+ ifaces = idl.data["Interface"]
+ tap = None
+ vif = None
+
+ for i in ifaces.values():
+ name = i.name.as_scalar().strip('"')
+ if name == tap_name:
+ tap = i
+ elif name == vif_name:
+ vif = i
+
+ if vif and tap:
+ vxid = vif.external_ids
+ txid = tap.external_ids
+
+ keys = ["attached-mac", "xs-network-uuid", "xs-vif-uuid", "xs-vm-uuid"]
+ for k in keys:
+ if vxid.get(k) != txid.get(k):
+ set_external_id("Interface", tap_name, k, vxid.get(k))
+
def main(argv):
global force_run
@@ -319,6 +344,8 @@ def main(argv):
new_interfaces[vif]["iface-status"] = "inactive"
new_interfaces[name]["iface-status"] = "active"
+ update_tap_from_vif(idl, name, vif)
+
if bridges != new_bridges:
for name,ids in new_bridges.items():
if name not in bridges: