X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;ds=sidebyside;f=xenserver%2Fusr_share_openvswitch_scripts_ovs-xapi-sync;fp=xenserver%2Fusr_share_openvswitch_scripts_ovs-xapi-sync;h=46b729dac2a81b43e62b78da8f3d48ba8ada5b80;hb=83d75d32c56896053034b81d23de3548e554ca9f;hp=649ddbe536521d870b247e6e953be4b3606391c1;hpb=6cbbf4fa07f12f7f3977a1b3b63783220f4db3ea;p=sliver-openvswitch.git diff --git a/xenserver/usr_share_openvswitch_scripts_ovs-xapi-sync b/xenserver/usr_share_openvswitch_scripts_ovs-xapi-sync index 649ddbe53..46b729dac 100755 --- a/xenserver/usr_share_openvswitch_scripts_ovs-xapi-sync +++ b/xenserver/usr_share_openvswitch_scripts_ovs-xapi-sync @@ -90,33 +90,14 @@ def get_network_by_bridge(br_name): return None # There are possibilities when multiple xs-network-uuids are set for a bridge. -# In cases like that, we should choose the bridge-id whose PIF does not have a -# VLAN associated with it. -def get_single_bridge_id(bridge_ids, default=None): +# In cases like that, we should choose the bridge-id associated with the bridge +# name. +def get_single_bridge_id(bridge_ids, br_name, default=None): global xapi_down - if not init_session(): - vlog.warn("Failed to get single bridge id from %s because" - "XAPI session could not be initialized" % bridge_ids) - return default - - for bridge_id in bridge_ids: - try: - recs = session.xenapi.network.get_all_records_where(\ - 'field "uuid"="%s"' % bridge_id) - if recs: - pifs = recs.values()[0]['PIFs'] - for pif in pifs: - try: - rec = session.xenapi.PIF.get_record(pif) - if rec['VLAN'] == '-1': - return bridge_id - except XenAPI.Failure: - vlog.warn("Could not find XAPI entry for PIF %s" % pif) - continue - - except XenAPI.Failure: - vlog.warn("Could not find XAPI entry for bridge_id %s" % bridge_id) - continue + + rec = get_network_by_bridge(br_name) + if rec and rec['uuid'] in bridge_ids: + return rec['uuid'] vlog.warn("Failed to get a single bridge id from Xapi.") xapi_down = True @@ -314,24 +295,26 @@ def main(): new_bridges = {} for row in idl.tables["Bridge"].rows.itervalues(): if row.name in bridges: - nbd = bridges[row.name] + bridge_id_cache = bridges[row.name] else: # New bridge. update_fail_mode(row) update_in_band_mgmt(row) - nbd = get_bridge_id(row.name) + bridge_id_cache = get_bridge_id(row.name) - bridge_id = nbd + bridge_id = bridge_id_cache if bridge_id is None: bridge_id = row.external_ids.get("xs-network-uuids") if bridge_id and len(bridge_id.split(";")) > 1: bridge_ids = bridge_id.split(";") - bridge_id = get_single_bridge_id(bridge_ids, "") + bridge_id = get_single_bridge_id(bridge_ids, row.name, "") + if bridge_id: + bridge_id_cache = bridge_id if bridge_id is not None: set_external_id(row, "bridge-id", bridge_id.split(";")[0]) - new_bridges[row.name] = nbd + new_bridges[row.name] = bridge_id_cache bridges = new_bridges iface_by_name = {}