Block qos config in floating ip.

Change-Id: I0cdb5b5fcfa3dc6f5771081bb12081ce31b16d3c
This commit is contained in:
ansao-aci
2020-10-06 18:08:34 +05:30
committed by Thomas Bachman
parent 0dbc7a0159
commit 4af9431ab9
3 changed files with 32 additions and 0 deletions

View File

@@ -120,6 +120,10 @@ class InvalidNetworkForQos(exceptions.BadRequest):
"an external or SVI network.")
class InvalidPolicyTargetForQos(exceptions.BadRequest):
message = _("Apic_aim does not support QoS policy for Floating IP.")
class InvalidPreexistingBdForNetwork(exceptions.BadRequest):
message = _("The Bridge Domain specified in apic:distinguished_names "
"either does not exist in ACI or belongs to another network "

View File

@@ -28,6 +28,7 @@ from neutron_lib.db import utils as db_utils
from neutron_lib import exceptions
from neutron_lib.plugins import constants
from neutron_lib.plugins import directory
from neutron_lib.services.qos import constants as qos_consts
from oslo_log import log as logging
from oslo_utils import excutils
@@ -36,6 +37,8 @@ from gbpservice.neutron.db import api as db_api
from gbpservice.neutron import extensions as extensions_pkg
from gbpservice.neutron.extensions import cisco_apic_l3 as l3_ext
from gbpservice.neutron.plugins.ml2plus import driver_api as api_plus
from gbpservice.neutron.plugins.ml2plus.drivers.apic_aim import (
exceptions as aim_exceptions)
from gbpservice.neutron.plugins.ml2plus.drivers.apic_aim import (
extension_db as extn_db)
from gbpservice.neutron.plugins.ml2plus.drivers.apic_aim import (
@@ -234,6 +237,8 @@ class ApicL3Plugin(extraroute_db.ExtraRoute_db_mixin,
@n_utils.transaction_guard
def create_floatingip(self, context, floatingip):
if floatingip['floatingip'].get(qos_consts.QOS_POLICY_ID):
raise aim_exceptions.InvalidPolicyTargetForQos()
fip = floatingip['floatingip']
# REVISIT: This ensure_tenant call probably isn't needed, as
# FIPs don't map directly to any AIM resources. If it is
@@ -284,6 +289,8 @@ class ApicL3Plugin(extraroute_db.ExtraRoute_db_mixin,
@n_utils.transaction_guard
def update_floatingip(self, context, id, floatingip):
if floatingip['floatingip'].get(qos_consts.QOS_POLICY_ID):
raise aim_exceptions.InvalidPolicyTargetForQos()
old_fip = self.get_floatingip(context, id)
result = super(ApicL3Plugin, self).update_floatingip(
context, id, floatingip)

View File

@@ -26,6 +26,7 @@ from neutron.api.rpc.agentnotifiers import dhcp_rpc_agent_api
from neutron.db.models import securitygroup as sg_models
from neutron.db.port_security import models as psec_models
from neutron.extensions import dns
from neutron.objects.qos import policy as policy_object
from neutron.tests.unit.db import test_db_base_plugin_v2 as test_plugin
from neutron.tests.unit.extensions import test_address_scope
from neutron.tests.unit.extensions import test_securitygroup
@@ -36,12 +37,15 @@ from neutron_lib.plugins import constants as pconst
from neutron_lib.plugins import directory
from opflexagent import constants as ocst
from oslo_config import cfg
from oslo_utils import uuidutils
import webob.exc
import gbpservice.common.utils as g_utils
from gbpservice.neutron.db import api as db_api
from gbpservice.neutron.db.grouppolicy import group_policy_mapping_db
from gbpservice.neutron.extensions import cisco_apic
from gbpservice.neutron.plugins.ml2plus.drivers.apic_aim import (
exceptions as exceptions)
from gbpservice.neutron.plugins.ml2plus.drivers.apic_aim import (
mechanism_driver as md)
from gbpservice.neutron.services.grouppolicy.common import (
@@ -3468,6 +3472,14 @@ class TestPolicyTarget(AIMBaseTestCase,
host='h1')
self.assertEqual(2000, mapping['interface_mtu'])
def _make_qos_policy(self):
ctx = nctx.get_admin_context()
qos_policy = policy_object.QosPolicy(
ctx, project_id=uuidutils.generate_uuid(),
shared=False, is_default=False)
qos_policy.create()
return qos_policy
def _do_test_gbp_details_no_pt(self, use_as=True, routed=True,
pre_vrf=None):
# Create port and bind it
@@ -3522,6 +3534,15 @@ class TestPolicyTarget(AIMBaseTestCase,
'tenant_id': network['tenant_id'],
'port_id': port_id}})
qosPolicy = self._make_qos_policy()
self.assertRaises(exceptions.InvalidPolicyTargetForQos,
self.l3_plugin.create_floatingip,
nctx.get_admin_context(),
{'floatingip': {'floating_network_id':
ext_net1['id'],
'tenant_id': network['tenant_id'],
'port_id': port_id,
'qos_policy_id': qosPolicy.id}})
self._bind_port_to_host(port_id, 'h1')
mapping = self.mech_driver.get_gbp_details(
self._neutron_admin_context, device='tap%s' % port_id,