pxe_filter: fix get blacklist error
According to [1], the Port address and extra field in the same level. Method _get_blacklist should pass port list instead port.address list for InfiniBand mapping. [1] https://github.com/openstack/ironic/blob/master/ironic/objects/port.py Story: 2005729 Task: 31077 Change-Id: Iedc321c840f18fc1aa856b857da2c35318a538ae
This commit is contained in:
parent
b8d1bda4c6
commit
dc7e4d26ae
@ -232,9 +232,9 @@ def _ib_mac_to_rmac_mapping(ports):
|
|||||||
|
|
||||||
|
|
||||||
def _get_blacklist(ironic):
|
def _get_blacklist(ironic):
|
||||||
ports = [port.address for port in
|
ports = [port for port in
|
||||||
ir_utils.call_with_retries(ironic.port.list, limit=0,
|
ir_utils.call_with_retries(ironic.port.list, limit=0,
|
||||||
fields=['address', 'extra'])
|
fields=['address', 'extra'])
|
||||||
if port.address not in node_cache.active_macs()]
|
if port.address not in node_cache.active_macs()]
|
||||||
_ib_mac_to_rmac_mapping(ports)
|
_ib_mac_to_rmac_mapping(ports)
|
||||||
return ports
|
return [port.address for port in ports]
|
||||||
|
@ -386,10 +386,11 @@ class TestGetBlacklist(test_base.BaseTest):
|
|||||||
self.mock_ironic = mock.Mock()
|
self.mock_ironic = mock.Mock()
|
||||||
|
|
||||||
def test_active_port(self):
|
def test_active_port(self):
|
||||||
self.mock_ironic.port.list.return_value = [
|
mock_ports_list = [
|
||||||
mock.Mock(address='foo'),
|
mock.Mock(address='foo'),
|
||||||
mock.Mock(address='bar'),
|
mock.Mock(address='bar'),
|
||||||
]
|
]
|
||||||
|
self.mock_ironic.port.list.return_value = mock_ports_list
|
||||||
self.mock_active_macs.return_value = {'foo'}
|
self.mock_active_macs.return_value = {'foo'}
|
||||||
|
|
||||||
ports = iptables._get_blacklist(self.mock_ironic)
|
ports = iptables._get_blacklist(self.mock_ironic)
|
||||||
@ -397,16 +398,18 @@ class TestGetBlacklist(test_base.BaseTest):
|
|||||||
self.assertEqual(['bar'], ports)
|
self.assertEqual(['bar'], ports)
|
||||||
self.mock_ironic.port.list.assert_called_once_with(
|
self.mock_ironic.port.list.assert_called_once_with(
|
||||||
limit=0, fields=['address', 'extra'])
|
limit=0, fields=['address', 'extra'])
|
||||||
self.mock__ib_mac_to_rmac_mapping.assert_called_once_with(ports)
|
self.mock__ib_mac_to_rmac_mapping.assert_called_once_with(
|
||||||
|
[mock_ports_list[1]])
|
||||||
|
|
||||||
@mock.patch('time.sleep', lambda _x: None)
|
@mock.patch('time.sleep', lambda _x: None)
|
||||||
def test_retry_on_port_list_failure(self):
|
def test_retry_on_port_list_failure(self):
|
||||||
|
mock_ports_list = [
|
||||||
|
mock.Mock(address='foo'),
|
||||||
|
mock.Mock(address='bar'),
|
||||||
|
]
|
||||||
self.mock_ironic.port.list.side_effect = [
|
self.mock_ironic.port.list.side_effect = [
|
||||||
ironic_exc.ConnectionRefused('boom'),
|
ironic_exc.ConnectionRefused('boom'),
|
||||||
[
|
mock_ports_list
|
||||||
mock.Mock(address='foo'),
|
|
||||||
mock.Mock(address='bar'),
|
|
||||||
]
|
|
||||||
]
|
]
|
||||||
self.mock_active_macs.return_value = {'foo'}
|
self.mock_active_macs.return_value = {'foo'}
|
||||||
|
|
||||||
@ -415,4 +418,5 @@ class TestGetBlacklist(test_base.BaseTest):
|
|||||||
self.assertEqual(['bar'], ports)
|
self.assertEqual(['bar'], ports)
|
||||||
self.mock_ironic.port.list.assert_called_with(
|
self.mock_ironic.port.list.assert_called_with(
|
||||||
limit=0, fields=['address', 'extra'])
|
limit=0, fields=['address', 'extra'])
|
||||||
self.mock__ib_mac_to_rmac_mapping.assert_called_once_with(ports)
|
self.mock__ib_mac_to_rmac_mapping.assert_called_once_with(
|
||||||
|
[mock_ports_list[1]])
|
||||||
|
@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
fixes:
|
||||||
|
- |
|
||||||
|
Fixes an issue while mapping port InfiniBand MAC
|
||||||
|
address to EthernetOverInfiniBand MAC. Prior to this fix,
|
||||||
|
it will fail to map and raise an exception.
|
Loading…
Reference in New Issue
Block a user