Adds support for node hardware inventory
Adds support for querying a node's hardware inventory as per functionality introduced in API 1.81. Change-Id: I218f3458d701ee9d0ff163884ee6f09992e84363
This commit is contained in:
parent
c70e5d7d96
commit
a087bc0b4b
openstack
releasenotes/notes
@ -332,6 +332,19 @@ class Proxy(proxy.Proxy):
|
||||
"""
|
||||
return self._get_with_fields(_node.Node, node, fields=fields)
|
||||
|
||||
def get_node_inventory(self, node):
|
||||
"""Get a specific node's hardware inventory.
|
||||
|
||||
:param node: The value can be the name or ID of a node or a
|
||||
:class:`~openstack.baremetal.v1.node.Node` instance.
|
||||
|
||||
:returns: The node inventory
|
||||
:raises: :class:`~openstack.exceptions.ResourceNotFound` when no
|
||||
inventory could be found.
|
||||
"""
|
||||
res = self._get_resource(_node.Node, node)
|
||||
return res.get_node_inventory(self, node)
|
||||
|
||||
def update_node(self, node, retry_on_conflict=True, **attrs):
|
||||
"""Update a node.
|
||||
|
||||
|
@ -96,8 +96,8 @@ class Node(_common.ListMixin, resource.Resource):
|
||||
is_maintenance='maintenance',
|
||||
)
|
||||
|
||||
# Ability to change boot_mode and secure_boot, introduced in 1.76 (Xena).
|
||||
_max_microversion = '1.76'
|
||||
# Ability to get node inventory, introduced in 1.81 (Antelope).
|
||||
_max_microversion = '1.81'
|
||||
|
||||
# Properties
|
||||
#: The UUID of the allocation associated with this node. Added in API
|
||||
@ -1312,6 +1312,25 @@ class Node(_common.ListMixin, resource.Resource):
|
||||
)
|
||||
exceptions.raise_from_response(response, error_message=msg)
|
||||
|
||||
def get_node_inventory(self, session, node_id):
|
||||
session = self._get_session(session)
|
||||
version = self._get_microversion(session, action='fetch')
|
||||
request = self._prepare_request(requires_id=True)
|
||||
request.url = utils.urljoin(request.url, 'inventory')
|
||||
|
||||
response = session.get(
|
||||
request.url,
|
||||
headers=request.headers,
|
||||
microversion=version,
|
||||
retriable_status_codes=_common.RETRIABLE_STATUS_CODES,
|
||||
)
|
||||
|
||||
msg = "Failed to get inventory for node {node}".format(
|
||||
node=node_id,
|
||||
)
|
||||
exceptions.raise_from_response(response, error_message=msg)
|
||||
return response.json()
|
||||
|
||||
def patch(
|
||||
self,
|
||||
session,
|
||||
|
@ -1165,3 +1165,46 @@ class TestNodeConsole(base.TestCase):
|
||||
self.session,
|
||||
'true', # not a bool
|
||||
)
|
||||
|
||||
|
||||
@mock.patch.object(node.Node, 'fetch', lambda self, session: self)
|
||||
@mock.patch.object(exceptions, 'raise_from_response', mock.Mock())
|
||||
class TestNodeInventory(base.TestCase):
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
self.node = node.Node(**FAKE)
|
||||
self.session = mock.Mock(
|
||||
spec=adapter.Adapter,
|
||||
default_microversion='1.81',
|
||||
)
|
||||
|
||||
def test_get_inventory(self):
|
||||
node_inventory = {
|
||||
'inventory': {
|
||||
'memory': {'physical_mb': 3072},
|
||||
'cpu': {
|
||||
'count': 1,
|
||||
'model_name': 'qemu64',
|
||||
'architecture': 'x86_64',
|
||||
},
|
||||
'disks': [{'name': 'testvm1.qcow2', 'size': 11811160064}],
|
||||
'interfaces': [{'mac_address': '52:54:00:c7:02:45'}],
|
||||
'system_vendor': {
|
||||
'product_name': 'testvm1',
|
||||
'manufacturer': 'Sushy Emulator',
|
||||
},
|
||||
'boot': {'current_boot_mode': 'uefi'},
|
||||
},
|
||||
'plugin_data': {'fake_plugin_data'},
|
||||
}
|
||||
self.session.get.return_value.json.return_value = node_inventory
|
||||
|
||||
res = self.node.get_node_inventory(self.session, self.node.id)
|
||||
self.assertEqual(node_inventory, res)
|
||||
|
||||
self.session.get.assert_called_once_with(
|
||||
'nodes/%s/inventory' % self.node.id,
|
||||
headers=mock.ANY,
|
||||
microversion='1.81',
|
||||
retriable_status_codes=_common.RETRIABLE_STATUS_CODES,
|
||||
)
|
||||
|
@ -0,0 +1,5 @@
|
||||
---
|
||||
features:
|
||||
- |
|
||||
Adds support for querying a node's hardware inventory as per functionality
|
||||
introduced in API 1.81.
|
Loading…
x
Reference in New Issue
Block a user