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)
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
    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)
Ejemplo n.º 4
0
 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)
Ejemplo n.º 5
0
    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)
Ejemplo n.º 6
0
 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)
Ejemplo n.º 7
0
 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)
                 )