diff --git a/ironic_inspector/conductor/manager.py b/ironic_inspector/conductor/manager.py index 2fa00b3f2..b0bfebadd 100644 --- a/ironic_inspector/conductor/manager.py +++ b/ironic_inspector/conductor/manager.py @@ -126,16 +126,16 @@ class ConductorManager(object): introspect.abort(node_id, token=token) @messaging.expected_exceptions(utils.Error) - def do_reapply(self, context, node_id, token=None): + def do_reapply(self, context, node_uuid, token=None): try: - data = process.get_introspection_data(node_id, processed=False, + data = process.get_introspection_data(node_uuid, processed=False, get_json=True) except utils.IntrospectionDataStoreDisabled: raise utils.Error(_('Inspector is not configured to store ' 'data. Set the [processing]store_data ' 'configuration option to change this.'), code=400) - process.reapply(node_id, data) + process.reapply(node_uuid, data) def periodic_clean_up(): # pragma: no cover diff --git a/ironic_inspector/main.py b/ironic_inspector/main.py index ca3f62a80..6a7842ccd 100644 --- a/ironic_inspector/main.py +++ b/ironic_inspector/main.py @@ -310,9 +310,11 @@ def api_introspection_reapply(node_id): if flask.request.content_length: return error_response(_('User data processing is not ' 'supported yet'), code=400) - + if not uuidutils.is_uuid_like(node_id): + node = ir_utils.get_node(node_id, fields=['uuid']) + node_id = node.uuid client = rpc.get_client() - client.call({}, 'do_reapply', node_id=node_id) + client.call({}, 'do_reapply', node_uuid=node_id) return '', 202 diff --git a/ironic_inspector/process.py b/ironic_inspector/process.py index 29673423c..8d476cfef 100644 --- a/ironic_inspector/process.py +++ b/ironic_inspector/process.py @@ -285,20 +285,20 @@ def _finish(node_info, ironic, introspection_data, power_off=True): node_info=node_info, data=introspection_data) -def reapply(node_ident, data=None): +def reapply(node_uuid, data=None): """Re-apply introspection steps. Re-apply preprocessing, postprocessing and introspection rules on stored data. - :param node_ident: node UUID or name + :param node_uuid: node UUID :raises: utils.Error """ LOG.debug('Processing re-apply introspection request for node ' - 'UUID: %s', node_ident) - node_info = node_cache.get_node(node_ident, locked=False) + 'UUID: %s', node_uuid) + node_info = node_cache.get_node(node_uuid, locked=False) if not node_info.acquire_lock(blocking=False): # Note (mkovacik): it should be sufficient to check data # presence & locking. If either introspection didn't start diff --git a/ironic_inspector/test/unit/test_main.py b/ironic_inspector/test/unit/test_main.py index 892231ba6..800701bed 100644 --- a/ironic_inspector/test/unit/test_main.py +++ b/ironic_inspector/test/unit/test_main.py @@ -370,7 +370,7 @@ class TestApiReapply(BaseAPITest): self.app.post('/v1/introspection/%s/data/unprocessed' % self.uuid) self.client_mock.call.assert_called_once_with({}, 'do_reapply', - node_id=self.uuid) + node_uuid=self.uuid) def test_user_data(self): res = self.app.post('/v1/introspection/%s/data/unprocessed' % @@ -392,7 +392,7 @@ class TestApiReapply(BaseAPITest): message = json.loads(res.data.decode())['error']['message'] self.assertEqual(str(exc), message) self.client_mock.call.assert_called_once_with({}, 'do_reapply', - node_id=self.uuid) + node_uuid=self.uuid) def test_generic_error(self): exc = utils.Error('Oops', code=400) @@ -405,7 +405,16 @@ class TestApiReapply(BaseAPITest): message = json.loads(res.data.decode())['error']['message'] self.assertEqual(str(exc), message) self.client_mock.call.assert_called_once_with({}, 'do_reapply', - node_id=self.uuid) + node_uuid=self.uuid) + + @mock.patch.object(ir_utils, 'get_node', autospec=True) + def test_reapply_with_node_name(self, get_mock): + get_mock.return_value = mock.Mock(uuid=self.uuid) + self.app.post('/v1/introspection/%s/data/unprocessed' % + 'fake-node') + self.client_mock.call.assert_called_once_with({}, 'do_reapply', + node_uuid=self.uuid) + get_mock.assert_called_once_with('fake-node', fields=['uuid']) class TestApiRules(BaseAPITest):