Switch bare metal NIC actions in OpenStackCloud to baremetal Proxy calls

This change allows bare metal NIC actions to use the microversion
negotiation process instead of the hardcoded version 1.6.

Change-Id: I0d31251fc110b9db744509ce6f254745a13acebf
This commit is contained in:
Dmitry Tantsur 2018-10-12 14:48:14 +02:00
parent c16cc13fd8
commit 25f74ebba8
3 changed files with 29 additions and 37 deletions

View File

@ -9433,11 +9433,8 @@ class OpenStackCloud(_normalize.Normalizer):
update_coe_cluster_template = update_cluster_template
def list_nics(self):
msg = "Error fetching machine port list"
data = self._baremetal_client.get("/ports",
microversion="1.6",
error_message=msg)
return data['ports']
"""Return a list of all bare metal ports."""
return [nic._to_munch() for nic in self.baremetal.ports(details=True)]
def list_nics_for_machine(self, uuid):
"""Returns a list of ports present on the machine node.
@ -9446,23 +9443,18 @@ class OpenStackCloud(_normalize.Normalizer):
order to identify the machine.
:returns: A list of ports.
"""
msg = "Error fetching port list for node {node_id}".format(
node_id=uuid)
url = "/nodes/{node_id}/ports".format(node_id=uuid)
data = self._baremetal_client.get(url,
microversion="1.6",
error_message=msg)
return data['ports']
# TODO(dtantsur): support node names here.
return [nic._to_munch()
for nic in self.baremetal.ports(details=True, node_id=uuid)]
def get_nic_by_mac(self, mac):
"""Get bare metal NIC by its hardware address (usually MAC)."""
results = [nic._to_munch()
for nic in self.baremetal.ports(address=mac, details=True)]
try:
url = '/ports/detail?address=%s' % mac
data = self._baremetal_client.get(url)
if len(data['ports']) == 1:
return data['ports'][0]
except Exception:
pass
return None
return results[0]
except IndexError:
return None
def list_machines(self):
"""List Machines.
@ -9497,14 +9489,11 @@ class OpenStackCloud(_normalize.Normalizer):
:returns: ``munch.Munch`` representing the node found or None
if the node is not found.
"""
try:
port_url = '/ports/detail?address={mac}'.format(mac=mac)
port = self._baremetal_client.get(port_url, microversion=1.6)
machine_url = '/nodes/{machine}'.format(
machine=port['ports'][0]['node_uuid'])
return self._baremetal_client.get(machine_url, microversion=1.6)
except Exception:
nic = self.get_nic_by_mac(mac)
if nic is None:
return None
else:
return self.get_machine(nic['node_uuid'])
def inspect_machine(self, name_or_id, wait=False, timeout=3600):
"""Inspect a Barmetal machine

View File

@ -43,20 +43,20 @@ class TestBaremetalPort(base.IronicTestCase):
def test_list_nics(self):
self.register_uris([
dict(method='GET',
uri=self.get_mock_url(resource='ports'),
uri=self.get_mock_url(resource='ports', append=['detail']),
json={'ports': [self.fake_baremetal_port,
self.fake_baremetal_port2]}),
])
return_value = self.cloud.list_nics()
self.assertEqual(2, len(return_value))
self.assertEqual(self.fake_baremetal_port, return_value[0])
self.assertSubdict(self.fake_baremetal_port, return_value[0])
self.assert_calls()
def test_list_nics_failure(self):
self.register_uris([
dict(method='GET',
uri=self.get_mock_url(resource='ports'),
uri=self.get_mock_url(resource='ports', append=['detail']),
status_code=400)
])
self.assertRaises(exc.OpenStackCloudException,
@ -64,11 +64,10 @@ class TestBaremetalPort(base.IronicTestCase):
self.assert_calls()
def test_list_nics_for_machine(self):
query = 'detail?node_uuid=%s' % self.fake_baremetal_node['uuid']
self.register_uris([
dict(method='GET',
uri=self.get_mock_url(
resource='nodes',
append=[self.fake_baremetal_node['uuid'], 'ports']),
uri=self.get_mock_url(resource='ports', append=[query]),
json={'ports': [self.fake_baremetal_port,
self.fake_baremetal_port2]}),
])
@ -76,15 +75,14 @@ class TestBaremetalPort(base.IronicTestCase):
return_value = self.cloud.list_nics_for_machine(
self.fake_baremetal_node['uuid'])
self.assertEqual(2, len(return_value))
self.assertEqual(self.fake_baremetal_port, return_value[0])
self.assertSubdict(self.fake_baremetal_port, return_value[0])
self.assert_calls()
def test_list_nics_for_machine_failure(self):
query = 'detail?node_uuid=%s' % self.fake_baremetal_node['uuid']
self.register_uris([
dict(method='GET',
uri=self.get_mock_url(
resource='nodes',
append=[self.fake_baremetal_node['uuid'], 'ports']),
uri=self.get_mock_url(resource='ports', append=[query]),
status_code=400)
])
@ -104,7 +102,7 @@ class TestBaremetalPort(base.IronicTestCase):
return_value = self.cloud.get_nic_by_mac(mac)
self.assertEqual(self.fake_baremetal_port, return_value)
self.assertSubdict(self.fake_baremetal_port, return_value)
self.assert_calls()
def test_get_nic_by_mac_failure(self):

View File

@ -0,0 +1,5 @@
---
features:
- |
The ``OpenStackCloud`` bare metal NIC calls now support all microversions
supported by the SDK. Previously version 1.6 was hardcoded.