diff options
author | Ethan Jackson <ethan@nicira.com> | 2011-06-22 13:42:52 -0700 |
---|---|---|
committer | Ethan Jackson <ethan@nicira.com> | 2011-06-22 16:11:36 -0700 |
commit | 86014a2861398ae3a1857ed24fba3a080853d74c (patch) | |
tree | 0f17929d02b91c18fe0ed24f6dbc1917cd1334a0 | |
parent | 53319f95b9d3d025917110e2688a2cf0616f7071 (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-x | xenserver/usr_share_openvswitch_scripts_ovs-xapi-sync | 31 |
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: |