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:
@@ -9433,11 +9433,8 @@ class OpenStackCloud(_normalize.Normalizer):
|
|||||||
update_coe_cluster_template = update_cluster_template
|
update_coe_cluster_template = update_cluster_template
|
||||||
|
|
||||||
def list_nics(self):
|
def list_nics(self):
|
||||||
msg = "Error fetching machine port list"
|
"""Return a list of all bare metal ports."""
|
||||||
data = self._baremetal_client.get("/ports",
|
return [nic._to_munch() for nic in self.baremetal.ports(details=True)]
|
||||||
microversion="1.6",
|
|
||||||
error_message=msg)
|
|
||||||
return data['ports']
|
|
||||||
|
|
||||||
def list_nics_for_machine(self, uuid):
|
def list_nics_for_machine(self, uuid):
|
||||||
"""Returns a list of ports present on the machine node.
|
"""Returns a list of ports present on the machine node.
|
||||||
@@ -9446,22 +9443,17 @@ class OpenStackCloud(_normalize.Normalizer):
|
|||||||
order to identify the machine.
|
order to identify the machine.
|
||||||
:returns: A list of ports.
|
:returns: A list of ports.
|
||||||
"""
|
"""
|
||||||
msg = "Error fetching port list for node {node_id}".format(
|
# TODO(dtantsur): support node names here.
|
||||||
node_id=uuid)
|
return [nic._to_munch()
|
||||||
url = "/nodes/{node_id}/ports".format(node_id=uuid)
|
for nic in self.baremetal.ports(details=True, node_id=uuid)]
|
||||||
data = self._baremetal_client.get(url,
|
|
||||||
microversion="1.6",
|
|
||||||
error_message=msg)
|
|
||||||
return data['ports']
|
|
||||||
|
|
||||||
def get_nic_by_mac(self, mac):
|
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:
|
try:
|
||||||
url = '/ports/detail?address=%s' % mac
|
return results[0]
|
||||||
data = self._baremetal_client.get(url)
|
except IndexError:
|
||||||
if len(data['ports']) == 1:
|
|
||||||
return data['ports'][0]
|
|
||||||
except Exception:
|
|
||||||
pass
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def list_machines(self):
|
def list_machines(self):
|
||||||
@@ -9497,14 +9489,11 @@ class OpenStackCloud(_normalize.Normalizer):
|
|||||||
:returns: ``munch.Munch`` representing the node found or None
|
:returns: ``munch.Munch`` representing the node found or None
|
||||||
if the node is not found.
|
if the node is not found.
|
||||||
"""
|
"""
|
||||||
try:
|
nic = self.get_nic_by_mac(mac)
|
||||||
port_url = '/ports/detail?address={mac}'.format(mac=mac)
|
if nic is None:
|
||||||
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:
|
|
||||||
return None
|
return None
|
||||||
|
else:
|
||||||
|
return self.get_machine(nic['node_uuid'])
|
||||||
|
|
||||||
def inspect_machine(self, name_or_id, wait=False, timeout=3600):
|
def inspect_machine(self, name_or_id, wait=False, timeout=3600):
|
||||||
"""Inspect a Barmetal machine
|
"""Inspect a Barmetal machine
|
||||||
|
|||||||
@@ -43,20 +43,20 @@ class TestBaremetalPort(base.IronicTestCase):
|
|||||||
def test_list_nics(self):
|
def test_list_nics(self):
|
||||||
self.register_uris([
|
self.register_uris([
|
||||||
dict(method='GET',
|
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,
|
json={'ports': [self.fake_baremetal_port,
|
||||||
self.fake_baremetal_port2]}),
|
self.fake_baremetal_port2]}),
|
||||||
])
|
])
|
||||||
|
|
||||||
return_value = self.cloud.list_nics()
|
return_value = self.cloud.list_nics()
|
||||||
self.assertEqual(2, len(return_value))
|
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()
|
self.assert_calls()
|
||||||
|
|
||||||
def test_list_nics_failure(self):
|
def test_list_nics_failure(self):
|
||||||
self.register_uris([
|
self.register_uris([
|
||||||
dict(method='GET',
|
dict(method='GET',
|
||||||
uri=self.get_mock_url(resource='ports'),
|
uri=self.get_mock_url(resource='ports', append=['detail']),
|
||||||
status_code=400)
|
status_code=400)
|
||||||
])
|
])
|
||||||
self.assertRaises(exc.OpenStackCloudException,
|
self.assertRaises(exc.OpenStackCloudException,
|
||||||
@@ -64,11 +64,10 @@ class TestBaremetalPort(base.IronicTestCase):
|
|||||||
self.assert_calls()
|
self.assert_calls()
|
||||||
|
|
||||||
def test_list_nics_for_machine(self):
|
def test_list_nics_for_machine(self):
|
||||||
|
query = 'detail?node_uuid=%s' % self.fake_baremetal_node['uuid']
|
||||||
self.register_uris([
|
self.register_uris([
|
||||||
dict(method='GET',
|
dict(method='GET',
|
||||||
uri=self.get_mock_url(
|
uri=self.get_mock_url(resource='ports', append=[query]),
|
||||||
resource='nodes',
|
|
||||||
append=[self.fake_baremetal_node['uuid'], 'ports']),
|
|
||||||
json={'ports': [self.fake_baremetal_port,
|
json={'ports': [self.fake_baremetal_port,
|
||||||
self.fake_baremetal_port2]}),
|
self.fake_baremetal_port2]}),
|
||||||
])
|
])
|
||||||
@@ -76,15 +75,14 @@ class TestBaremetalPort(base.IronicTestCase):
|
|||||||
return_value = self.cloud.list_nics_for_machine(
|
return_value = self.cloud.list_nics_for_machine(
|
||||||
self.fake_baremetal_node['uuid'])
|
self.fake_baremetal_node['uuid'])
|
||||||
self.assertEqual(2, len(return_value))
|
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()
|
self.assert_calls()
|
||||||
|
|
||||||
def test_list_nics_for_machine_failure(self):
|
def test_list_nics_for_machine_failure(self):
|
||||||
|
query = 'detail?node_uuid=%s' % self.fake_baremetal_node['uuid']
|
||||||
self.register_uris([
|
self.register_uris([
|
||||||
dict(method='GET',
|
dict(method='GET',
|
||||||
uri=self.get_mock_url(
|
uri=self.get_mock_url(resource='ports', append=[query]),
|
||||||
resource='nodes',
|
|
||||||
append=[self.fake_baremetal_node['uuid'], 'ports']),
|
|
||||||
status_code=400)
|
status_code=400)
|
||||||
])
|
])
|
||||||
|
|
||||||
@@ -104,7 +102,7 @@ class TestBaremetalPort(base.IronicTestCase):
|
|||||||
|
|
||||||
return_value = self.cloud.get_nic_by_mac(mac)
|
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()
|
self.assert_calls()
|
||||||
|
|
||||||
def test_get_nic_by_mac_failure(self):
|
def test_get_nic_by_mac_failure(self):
|
||||||
|
|||||||
5
releasenotes/notes/baremetal-ports-cc0f56ae0d192aba.yaml
Normal file
5
releasenotes/notes/baremetal-ports-cc0f56ae0d192aba.yaml
Normal 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.
|
||||||
Reference in New Issue
Block a user