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:
parent
c16cc13fd8
commit
25f74ebba8
@ -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
|
||||
|
@ -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):
|
||||
|
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.
|
Loading…
x
Reference in New Issue
Block a user