def update_bgpvpn(self, context, id, new_bgpvpn): LOG.debug("update_bgpvpn called with %s for %s" % (new_bgpvpn, id)) fields = None oc_client = self._get_opencontrail_api_client(context) new_bgpvpn = new_bgpvpn["bgpvpn"] old_bgpvpn = self.get_bgpvpn(context, id) bgpvpn = old_bgpvpn.copy() bgpvpn.update(new_bgpvpn) (added_keys, removed_keys, changed_keys) = utils.get_bgpvpn_differences(bgpvpn, old_bgpvpn) if not (added_keys or removed_keys or changed_keys): return utils.make_bgpvpn_dict(bgpvpn, fields) rt_keys = set(["route_targets", "import_targets", "export_targets"]) if "networks" in changed_keys: removed_networks = list(set(old_bgpvpn.get("networks", [])) - set(bgpvpn.get("networks", []))) added_networks = list(set(bgpvpn.get("networks", [])) - set(old_bgpvpn.get("networks", []))) for network_id in removed_networks: self._set_bgpvpn_association(oc_client, "DELETE", old_bgpvpn, network_id) for network_id in added_networks: self._set_bgpvpn_association(oc_client, "ADD", bgpvpn, network_id) elif rt_keys & added_keys or rt_keys & changed_keys or rt_keys & removed_keys: self._set_bgpvpn_association(oc_client, "DELETE", old_bgpvpn) self._set_bgpvpn_association(oc_client, "ADD", bgpvpn) oc_client.kv_store("STORE", key=id, value={"bgpvpn": bgpvpn}) return utils.make_bgpvpn_dict(bgpvpn, fields)
def update_bgpvpn(self, context, id, new_bgpvpn): LOG.debug("update_bgpvpn called with %s for %s" % (new_bgpvpn, id)) oc_client = self._get_opencontrail_api_client(context) old_bgpvpn = self.get_bgpvpn(context, id) networks = old_bgpvpn.get('networks', []) bgpvpn = old_bgpvpn.copy() bgpvpn.update(new_bgpvpn) (added_keys, removed_keys, changed_keys) = \ utils.get_bgpvpn_differences(bgpvpn, old_bgpvpn) if not (added_keys or removed_keys or changed_keys): return utils.make_bgpvpn_dict(bgpvpn) # Does not support to update route distinguisher if 'route_distinguishers' in added_keys | removed_keys | changed_keys: raise bgpvpn_ext.BGPVPNRDNotSupported( driver=OPENCONTRAIL_BGPVPN_DRIVER_NAME) rt_keys = set(['route_targets', 'import_targets', 'export_targets']) if (rt_keys & added_keys or rt_keys & changed_keys or rt_keys & removed_keys): self._set_bgpvpn_association(oc_client, 'DELETE', old_bgpvpn, networks) self._set_bgpvpn_association(oc_client, 'ADD', bgpvpn, networks) oc_client.kv_store('STORE', key=id, value={'bgpvpn': bgpvpn}) return utils.make_bgpvpn_dict(bgpvpn)
def update_bgpvpn(self, context, id, new_bgpvpn): LOG.debug("update_bgpvpn called with %s for %s" % (new_bgpvpn, id)) oc_client = self._get_opencontrail_api_client(context) old_bgpvpn = self.get_bgpvpn(context, id) networks = old_bgpvpn.get('networks', []) bgpvpn = old_bgpvpn.copy() bgpvpn.update(new_bgpvpn) (added_keys, removed_keys, changed_keys) = \ utils.get_bgpvpn_differences(bgpvpn, old_bgpvpn) if not (added_keys or removed_keys or changed_keys): return utils.make_bgpvpn_dict(bgpvpn) # Does not support to update route distinguisher if 'route_distinguishers' in added_keys | removed_keys | changed_keys: raise bgpvpn_ext.BGPVPNRDNotSupported( driver=OPENCONTRAIL_BGPVPN_DRIVER_NAME) rt_keys = set(['route_targets', 'import_targets', 'export_targets']) if (rt_keys & added_keys or rt_keys & changed_keys or rt_keys & removed_keys): self._set_bgpvpn_association(oc_client, 'DELETE', old_bgpvpn, networks) self._set_bgpvpn_association(oc_client, 'ADD', bgpvpn, networks) oc_client.kv_store('STORE', key=id, value={'bgpvpn': bgpvpn}) return utils.make_bgpvpn_dict(bgpvpn)
def update_bgpvpn_postcommit(self, context, old_bgpvpn, bgpvpn): (added_keys, removed_keys, changed_keys) = (utils.get_bgpvpn_differences(bgpvpn, old_bgpvpn)) ATTRIBUTES_TO_IGNORE = set(['name']) moving_keys = added_keys | removed_keys | changed_keys if len(moving_keys ^ ATTRIBUTES_TO_IGNORE): self._push_bgpvpn_associations(context, bgpvpn['id'], rpc_events.UPDATED)
def update_bgpvpn_postcommit(self, context, old_bgpvpn, bgpvpn): super(BaGPipeBGPVPNDriver, self).update_bgpvpn_postcommit(context, old_bgpvpn, bgpvpn) (added_keys, removed_keys, changed_keys) = (utils.get_bgpvpn_differences(bgpvpn, old_bgpvpn)) ATTRIBUTES_TO_IGNORE = set('name') moving_keys = added_keys | removed_keys | changed_keys if len(moving_keys ^ ATTRIBUTES_TO_IGNORE): for net_id in self._networks_for_bgpvpn(context, bgpvpn): if (get_network_ports(context, net_id)): self._update_bgpvpn_for_network(context, net_id, bgpvpn)
def update_bgpvpn_postcommit(self, context, old_bgpvpn, bgpvpn): (added_keys, removed_keys, changed_keys) = (utils.get_bgpvpn_differences(bgpvpn, old_bgpvpn)) for net_id in bgpvpn['networks']: if (get_network_ports(context, net_id)): if ((key in added_keys for key in ('route_targets', 'import_targets', 'export_targets')) or (key in removed_keys for key in ('route_targets', 'import_targets', 'export_targets')) or (key in changed_keys for key in ('route_targets', 'import_targets', 'export_targets'))): self._update_bgpvpn_for_network(context, net_id, bgpvpn)
def update_bgpvpn_postcommit(self, context, old_bgpvpn, bgpvpn): (added_keys, removed_keys, changed_keys) = ( utils.get_bgpvpn_differences(bgpvpn, old_bgpvpn)) for net_id in bgpvpn['networks']: if (get_network_ports(context, net_id)): if ((key in added_keys for key in ('route_targets', 'import_targets', 'export_targets')) or (key in removed_keys for key in ('route_targets', 'import_targets', 'export_targets')) or (key in changed_keys for key in ('route_targets', 'import_targets', 'export_targets'))): self.agent_rpc.update_bgpvpn( context, self._format_bgpvpn(bgpvpn, net_id) )