Merge "NSX-V3| Do not allow adding QoS to router ports"
This commit is contained in:
commit
5ad22c9ec7
@ -721,7 +721,7 @@ class NsxV3Plugin(agentschedulers_db.AZDhcpAgentSchedulerDbMixin,
|
|||||||
def _assert_on_external_net_with_qos(self, net_data):
|
def _assert_on_external_net_with_qos(self, net_data):
|
||||||
# Prevent creating/update external network with QoS policy
|
# Prevent creating/update external network with QoS policy
|
||||||
if validators.is_attr_set(net_data.get(qos_consts.QOS_POLICY_ID)):
|
if validators.is_attr_set(net_data.get(qos_consts.QOS_POLICY_ID)):
|
||||||
err_msg = _("Cannot configure QOS on networks")
|
err_msg = _("Cannot configure QOS on external networks")
|
||||||
raise n_exc.InvalidInput(error_message=err_msg)
|
raise n_exc.InvalidInput(error_message=err_msg)
|
||||||
|
|
||||||
def get_subnets(self, context, filters=None, fields=None, sorts=None,
|
def get_subnets(self, context, filters=None, fields=None, sorts=None,
|
||||||
@ -1675,6 +1675,16 @@ class NsxV3Plugin(agentschedulers_db.AZDhcpAgentSchedulerDbMixin,
|
|||||||
LOG.warning(err_msg)
|
LOG.warning(err_msg)
|
||||||
raise n_exc.InvalidInput(error_message=err_msg)
|
raise n_exc.InvalidInput(error_message=err_msg)
|
||||||
|
|
||||||
|
def _assert_on_router_port_with_qos(self, port_data, device_owner):
|
||||||
|
# Prevent creating/update port with QoS policy
|
||||||
|
# on router-interface ports.
|
||||||
|
if (device_owner == l3_db.DEVICE_OWNER_ROUTER_INTF and
|
||||||
|
validators.is_attr_set(port_data.get(qos_consts.QOS_POLICY_ID))):
|
||||||
|
err_msg = _("Unable to update/create a router port with a QoS "
|
||||||
|
"policy")
|
||||||
|
LOG.warning(err_msg)
|
||||||
|
raise n_exc.InvalidInput(error_message=err_msg)
|
||||||
|
|
||||||
def _filter_ipv4_dhcp_fixed_ips(self, context, fixed_ips):
|
def _filter_ipv4_dhcp_fixed_ips(self, context, fixed_ips):
|
||||||
ips = []
|
ips = []
|
||||||
for fixed_ip in fixed_ips:
|
for fixed_ip in fixed_ips:
|
||||||
@ -1923,6 +1933,9 @@ class NsxV3Plugin(agentschedulers_db.AZDhcpAgentSchedulerDbMixin,
|
|||||||
self._assert_on_external_net_with_compute(port_data)
|
self._assert_on_external_net_with_compute(port_data)
|
||||||
self._assert_on_external_net_port_with_qos(port_data)
|
self._assert_on_external_net_port_with_qos(port_data)
|
||||||
|
|
||||||
|
self._assert_on_router_port_with_qos(
|
||||||
|
port_data, port_data.get('device_owner'))
|
||||||
|
|
||||||
neutron_db = super(NsxV3Plugin, self).create_port(context, port)
|
neutron_db = super(NsxV3Plugin, self).create_port(context, port)
|
||||||
self._extension_manager.process_create_port(
|
self._extension_manager.process_create_port(
|
||||||
context, port_data, neutron_db)
|
context, port_data, neutron_db)
|
||||||
@ -2282,6 +2295,12 @@ class NsxV3Plugin(agentschedulers_db.AZDhcpAgentSchedulerDbMixin,
|
|||||||
self._assert_on_external_net_with_compute(port['port'])
|
self._assert_on_external_net_with_compute(port['port'])
|
||||||
self._assert_on_external_net_port_with_qos(port['port'])
|
self._assert_on_external_net_port_with_qos(port['port'])
|
||||||
|
|
||||||
|
device_owner = (port['port']['device_owner']
|
||||||
|
if 'device_owner' in port['port']
|
||||||
|
else original_port.get('device_owner'))
|
||||||
|
self._assert_on_router_port_with_qos(
|
||||||
|
port['port'], device_owner)
|
||||||
|
|
||||||
old_mac_learning_state = original_port.get(mac_ext.MAC_LEARNING)
|
old_mac_learning_state = original_port.get(mac_ext.MAC_LEARNING)
|
||||||
updated_port = super(NsxV3Plugin, self).update_port(context,
|
updated_port = super(NsxV3Plugin, self).update_port(context,
|
||||||
id, port)
|
id, port)
|
||||||
|
@ -351,10 +351,42 @@ class TestPortsV2(test_plugin.TestPortsV2, NsxV3PluginTestCaseMixin,
|
|||||||
data = {'port': {'network_id': network['network']['id'],
|
data = {'port': {'network_id': network['network']['id'],
|
||||||
'tenant_id': self._tenant_id,
|
'tenant_id': self._tenant_id,
|
||||||
'qos_policy_id': policy_id}}
|
'qos_policy_id': policy_id}}
|
||||||
# Cannot add qos policy to a port on ext network
|
# Cannot add qos policy to a router port
|
||||||
self.assertRaises(n_exc.InvalidInput,
|
self.assertRaises(n_exc.InvalidInput,
|
||||||
self.plugin.create_port, self.ctx, data)
|
self.plugin.create_port, self.ctx, data)
|
||||||
|
|
||||||
|
def test_create_router_port_with_qos_fail(self):
|
||||||
|
with self.network() as network:
|
||||||
|
with self.subnet(network=network, cidr='10.0.0.0/24'):
|
||||||
|
policy_id = uuidutils.generate_uuid()
|
||||||
|
data = {'port': {'network_id': network['network']['id'],
|
||||||
|
'tenant_id': self._tenant_id,
|
||||||
|
'device_owner': 'network:router_interface',
|
||||||
|
'qos_policy_id': policy_id}}
|
||||||
|
# Cannot add qos policy to a router interface port
|
||||||
|
self.assertRaises(n_exc.InvalidInput,
|
||||||
|
self.plugin.create_port, self.ctx, data)
|
||||||
|
|
||||||
|
def test_update_router_port_with_qos_fail(self):
|
||||||
|
with self.network() as network:
|
||||||
|
with self.subnet(network=network, cidr='10.0.0.0/24'):
|
||||||
|
policy_id = uuidutils.generate_uuid()
|
||||||
|
data = {'port': {'network_id': network['network']['id'],
|
||||||
|
'tenant_id': self._tenant_id,
|
||||||
|
'name': 'qos_port',
|
||||||
|
'admin_state_up': True,
|
||||||
|
'fixed_ips': [],
|
||||||
|
'mac_address': '00:00:00:00:00:01',
|
||||||
|
'device_id': 'dummy',
|
||||||
|
'device_owner': ''}}
|
||||||
|
port = self.plugin.create_port(self.ctx, data)
|
||||||
|
policy_id = uuidutils.generate_uuid()
|
||||||
|
data['port'] = {'qos_policy_id': policy_id,
|
||||||
|
'device_owner': 'network:router_interface'}
|
||||||
|
# Cannot add qos policy to a router interface port
|
||||||
|
self.assertRaises(n_exc.InvalidInput,
|
||||||
|
self.plugin.update_port, self.ctx, port['id'], data)
|
||||||
|
|
||||||
def test_create_port_with_qos_on_net(self):
|
def test_create_port_with_qos_on_net(self):
|
||||||
with self.network() as network:
|
with self.network() as network:
|
||||||
policy_id = uuidutils.generate_uuid()
|
policy_id = uuidutils.generate_uuid()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user