Get ports by 'binding:host_id' query filter
By retriving ports from neutron by 'binding:host_id', i.e ironic node uuid we can remove the list_node_vifs() call for each node. Story: 2010571 Task: 47302 Change-Id: I1d85f3341e04ddf969027a6f6839f4a807666258
This commit is contained in:
parent
9c2252ea88
commit
a71776b8a4
@ -16,8 +16,6 @@
|
|||||||
import enum
|
import enum
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
from openstack import exceptions as os_exc
|
|
||||||
|
|
||||||
from metalsmith import _utils
|
from metalsmith import _utils
|
||||||
|
|
||||||
|
|
||||||
@ -122,17 +120,14 @@ class Instance(object):
|
|||||||
with full representations of their networks.
|
with full representations of their networks.
|
||||||
"""
|
"""
|
||||||
result = []
|
result = []
|
||||||
vifs = self._connection.baremetal.list_node_vifs(self.node)
|
ports_query = {'binding:host_id': self.node.id}
|
||||||
for vif in vifs:
|
ports = self._connection.network.ports(**ports_query)
|
||||||
try:
|
for port in ports:
|
||||||
port = self._connection.network.get_port(vif)
|
|
||||||
if port.network_id not in Instance.network_cache:
|
if port.network_id not in Instance.network_cache:
|
||||||
Instance.network_cache[port.network_id] = (
|
Instance.network_cache[port.network_id] = (
|
||||||
self._connection.network.get_network(port.network_id))
|
self._connection.network.get_network(port.network_id))
|
||||||
port.network = Instance.network_cache[port.network_id]
|
port.network = Instance.network_cache[port.network_id]
|
||||||
result.append(port)
|
result.append(port)
|
||||||
except os_exc.ResourceNotFound:
|
|
||||||
LOG.warning('vif has missing port: %s', vif)
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
@ -15,8 +15,6 @@
|
|||||||
|
|
||||||
from unittest import mock
|
from unittest import mock
|
||||||
|
|
||||||
from openstack import exceptions as os_exc
|
|
||||||
|
|
||||||
from metalsmith import _instance
|
from metalsmith import _instance
|
||||||
from metalsmith.test import test_provisioner
|
from metalsmith.test import test_provisioner
|
||||||
|
|
||||||
@ -25,13 +23,12 @@ class TestInstanceIPAddresses(test_provisioner.Base):
|
|||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(TestInstanceIPAddresses, self).setUp()
|
super(TestInstanceIPAddresses, self).setUp()
|
||||||
self.instance = _instance.Instance(self.api, self.node)
|
self.instance = _instance.Instance(self.api, self.node)
|
||||||
self.api.baremetal.list_node_vifs.return_value = ['111', '222']
|
|
||||||
self.ports = [
|
self.ports = [
|
||||||
mock.Mock(spec=['network_id', 'fixed_ips', 'network'],
|
mock.Mock(spec=['network_id', 'fixed_ips', 'network'],
|
||||||
network_id=n, fixed_ips=[{'ip_address': ip}])
|
network_id=n, fixed_ips=[{'ip_address': ip}])
|
||||||
for n, ip in [('0', '192.168.0.1'), ('1', '10.0.0.2')]
|
for n, ip in [('0', '192.168.0.1'), ('1', '10.0.0.2')]
|
||||||
]
|
]
|
||||||
self.api.network.get_port.side_effect = self.ports
|
self.api.network.ports.return_value = self.ports
|
||||||
self.nets = [
|
self.nets = [
|
||||||
mock.Mock(spec=['id', 'name'], id=str(i)) for i in range(2)
|
mock.Mock(spec=['id', 'name'], id=str(i)) for i in range(2)
|
||||||
]
|
]
|
||||||
@ -56,9 +53,8 @@ class TestInstanceIPAddresses(test_provisioner.Base):
|
|||||||
mock.Mock(spec=['network_id', 'fixed_ips', 'network'],
|
mock.Mock(spec=['network_id', 'fixed_ips', 'network'],
|
||||||
network_id='0',
|
network_id='0',
|
||||||
fixed_ips=[{'ip_address': '192.168.0.1'}]),
|
fixed_ips=[{'ip_address': '192.168.0.1'}]),
|
||||||
os_exc.ResourceNotFound(),
|
|
||||||
]
|
]
|
||||||
self.api.network.get_port.side_effect = self.ports
|
self.api.network.ports.return_value = self.ports
|
||||||
ips = self.instance.ip_addresses()
|
ips = self.instance.ip_addresses()
|
||||||
self.assertEqual({'name-0': ['192.168.0.1']}, ips)
|
self.assertEqual({'name-0': ['192.168.0.1']}, ips)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user