Don't validate local_link_connection when port has client-id
Infiniband ports do not require the local_link_connection field to be populated as the network topology is discoverable by the Infiniband Subnet Manager. This change removes the requirement for local_link_connection for Infiniband ports. Infiniband ports have a client-id in their extra field. Closes-Bug: #1753222 Change-Id: I2bfac4ccaf825bd9aa8ea0d2b447fcd7767acbc5
This commit is contained in:
parent
46ee76aa46
commit
dcebb77d9d
@ -453,6 +453,12 @@ def validate_port_info(node, port):
|
|||||||
:param port: Ironic port object.
|
:param port: Ironic port object.
|
||||||
:returns: True if port info is valid, False otherwise.
|
:returns: True if port info is valid, False otherwise.
|
||||||
"""
|
"""
|
||||||
|
# Note(moshele): client-id in the port extra field indicates an InfiniBand
|
||||||
|
# port. In this case we don't require local_link_connection to be
|
||||||
|
# populated because the network topology is discoverable by the Infiniband
|
||||||
|
# Subnet Manager.
|
||||||
|
if port.extra.get('client-id'):
|
||||||
|
return True
|
||||||
if (node.network_interface == 'neutron' and
|
if (node.network_interface == 'neutron' and
|
||||||
not port.local_link_connection):
|
not port.local_link_connection):
|
||||||
LOG.warning("The local_link_connection is required for "
|
LOG.warning("The local_link_connection is required for "
|
||||||
|
@ -528,6 +528,33 @@ class TestNeutronNetworkActions(db_base.DbTestCase):
|
|||||||
self.assertTrue(res)
|
self.assertTrue(res)
|
||||||
self.assertFalse(log_mock.warning.called)
|
self.assertFalse(log_mock.warning.called)
|
||||||
|
|
||||||
|
@mock.patch.object(neutron, 'LOG', autospec=True)
|
||||||
|
def test_validate_port_info_flat_interface_with_client_id(self, log_mock):
|
||||||
|
self.node.network_interface = 'flat'
|
||||||
|
self.node.save()
|
||||||
|
llc = {}
|
||||||
|
port = object_utils.create_test_port(
|
||||||
|
self.context, node_id=self.node.id, uuid=uuidutils.generate_uuid(),
|
||||||
|
address='52:54:00:cf:2d:33', local_link_connection=llc,
|
||||||
|
extra={'client-id': self._CLIENT_ID})
|
||||||
|
res = neutron.validate_port_info(self.node, port)
|
||||||
|
self.assertTrue(res)
|
||||||
|
self.assertFalse(log_mock.warning.called)
|
||||||
|
|
||||||
|
@mock.patch.object(neutron, 'LOG', autospec=True)
|
||||||
|
def test_validate_port_info_neutron_interface_with_client_id(
|
||||||
|
self, log_mock):
|
||||||
|
self.node.network_interface = 'neutron'
|
||||||
|
self.node.save()
|
||||||
|
llc = {}
|
||||||
|
port = object_utils.create_test_port(
|
||||||
|
self.context, node_id=self.node.id, uuid=uuidutils.generate_uuid(),
|
||||||
|
address='52:54:00:cf:2d:33', local_link_connection=llc,
|
||||||
|
extra={'client-id': self._CLIENT_ID})
|
||||||
|
res = neutron.validate_port_info(self.node, port)
|
||||||
|
self.assertTrue(res)
|
||||||
|
self.assertFalse(log_mock.warning.called)
|
||||||
|
|
||||||
|
|
||||||
@mock.patch.object(neutron, 'get_client', autospec=True)
|
@mock.patch.object(neutron, 'get_client', autospec=True)
|
||||||
class TestValidateNetwork(base.TestCase):
|
class TestValidateNetwork(base.TestCase):
|
||||||
|
@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
fixes:
|
||||||
|
- |
|
||||||
|
Fixes an issue with validation of Infiniband ports. Infiniband ports do not
|
||||||
|
require the ``local_link_connection`` field to be populated as the network
|
||||||
|
topology is discoverable by the Infiniband Subnet Manager. See `bug 1753222
|
||||||
|
<https://launchpad.net/bugs/1753222>`_ for details.
|
Loading…
Reference in New Issue
Block a user