summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <vilouskubajj@gmail.com>2022-11-08 18:25:54 +0000
committerJakub Jelinek <vilouskubajj@gmail.com>2022-11-22 18:37:49 +0000
commit4073d198390914b3582e7692e3032d0d644b9479 (patch)
treefac2169d0d1c8d527ce71f3db2ce2582bff9a9fd
parent59b0dc459907a0c13562c70037ee32d25742ca73 (diff)
downloadironic-4073d198390914b3582e7692e3032d0d644b9479.tar.gz
Get inventory from Inspector
Get inventory data and store it in the local database. Story: 2010275 Task: 46204 Change-Id: Id2e1462362e97d0152f3948e978a05ec16ca8e4d
-rw-r--r--ironic/drivers/modules/inspector.py12
-rw-r--r--ironic/tests/unit/drivers/modules/test_inspector.py29
2 files changed, 40 insertions, 1 deletions
diff --git a/ironic/drivers/modules/inspector.py b/ironic/drivers/modules/inspector.py
index 833934793..45f3a87f5 100644
--- a/ironic/drivers/modules/inspector.py
+++ b/ironic/drivers/modules/inspector.py
@@ -36,6 +36,7 @@ from ironic.conf import CONF
from ironic.drivers import base
from ironic.drivers.modules import deploy_utils
from ironic.drivers.modules import inspect_utils
+from ironic.objects import node_inventory
LOG = logging.getLogger(__name__)
@@ -339,7 +340,8 @@ def _check_status(task):
task.node.uuid)
try:
- status = _get_client(task.context).get_introspection(node.uuid)
+ inspector_client = _get_client(task.context)
+ status = inspector_client.get_introspection(node.uuid)
except Exception:
# NOTE(dtantsur): get_status should not normally raise
# let's assume it's a transient failure and retry later
@@ -363,6 +365,14 @@ def _check_status(task):
_inspection_error_handler(task, error)
elif status.is_finished:
_clean_up(task)
+ introspection_data = inspector_client.get_introspection_data(
+ node.uuid, processed=True)
+ inventory_data = introspection_data.pop("inventory")
+ plugin_data = introspection_data
+ node_inventory.NodeInventory(
+ node_id=node.id,
+ inventory_data=inventory_data,
+ plugin_data=plugin_data).create()
def _clean_up(task):
diff --git a/ironic/tests/unit/drivers/modules/test_inspector.py b/ironic/tests/unit/drivers/modules/test_inspector.py
index 09d70eba9..5eb702e41 100644
--- a/ironic/tests/unit/drivers/modules/test_inspector.py
+++ b/ironic/tests/unit/drivers/modules/test_inspector.py
@@ -24,6 +24,7 @@ from ironic.conductor import task_manager
from ironic.drivers.modules import inspect_utils
from ironic.drivers.modules import inspector
from ironic.drivers.modules.redfish import utils as redfish_utils
+from ironic import objects
from ironic.tests.unit.db import base as db_base
from ironic.tests.unit.objects import utils as obj_utils
@@ -552,6 +553,34 @@ class CheckStatusTestCase(BaseTestCase):
self.task)
self.driver.boot.clean_up_ramdisk.assert_called_once_with(self.task)
+ def test_status_ok_store_inventory(self, mock_client):
+ mock_get = mock_client.return_value.get_introspection
+ mock_get.return_value = mock.Mock(is_finished=True,
+ error=None,
+ spec=['is_finished', 'error'])
+ mock_get_data = mock_client.return_value.get_introspection_data
+ mock_get_data.return_value = {
+ "inventory": {"cpu": "amd"}, "disks": [{"name": "/dev/vda"}]}
+ inspector._check_status(self.task)
+ mock_get.assert_called_once_with(self.node.uuid)
+ mock_get_data.assert_called_once_with(self.node.uuid, processed=True)
+
+ stored = objects.NodeInventory.get_by_node_id(self.context,
+ self.node.id)
+ self.assertEqual({"cpu": "amd"}, stored["inventory_data"])
+ self.assertEqual({"disks": [{"name": "/dev/vda"}]},
+ stored["plugin_data"])
+
+ def test_status_error_dont_store_inventory(self, mock_client):
+ mock_get = mock_client.return_value.get_introspection
+ mock_get.return_value = mock.Mock(is_finished=True,
+ error='boom',
+ spec=['is_finished', 'error'])
+ mock_get_data = mock_client.return_value.get_introspection_data
+ inspector._check_status(self.task)
+ mock_get.assert_called_once_with(self.node.uuid)
+ mock_get_data.assert_not_called()
+
@mock.patch('ironic.drivers.modules.inspector._get_client', autospec=True)
class InspectHardwareAbortTestCase(BaseTestCase):