From 17f20bdaa68e38e802cf614d0ff684a7fac3e2aa Mon Sep 17 00:00:00 2001 From: Dougal Matthews Date: Wed, 15 Mar 2017 15:39:09 +0000 Subject: [PATCH] Support multiple messages from provide workflow This updates the workflow wrapper to use the multiple message interface. Change-Id: I8ec4c3db9a2bd84d8cb577febef177cf6b663a86 Partial-Bug: #1646887 --- .../v1/overcloud_node/test_overcloud_node.py | 24 +++++++------------ .../tests/workflows/test_baremetal.py | 14 ++++------- tripleoclient/workflows/baremetal.py | 8 +++---- 3 files changed, 18 insertions(+), 28 deletions(-) diff --git a/tripleoclient/tests/v1/overcloud_node/test_overcloud_node.py b/tripleoclient/tests/v1/overcloud_node/test_overcloud_node.py index b4aaa4738..c090816a1 100644 --- a/tripleoclient/tests/v1/overcloud_node/test_overcloud_node.py +++ b/tripleoclient/tests/v1/overcloud_node/test_overcloud_node.py @@ -168,11 +168,16 @@ class TestProvideNode(fakes.TestOvercloudNode): # Get the command object to test self.cmd = overcloud_node.ProvideNode(self.app, None) - def test_provide_all_manageable_nodes(self): self.websocket.wait_for_message.return_value = { "status": "SUCCESS", - "message": "" + "message": "Success" } + self.websocket.wait_for_messages.return_value = iter([{ + "status": "SUCCESS", + "message": "Success" + }]) + + def test_provide_all_manageable_nodes(self): parsed_args = self.check_parser(self.cmd, ['--all-manageable'], @@ -187,11 +192,6 @@ class TestProvideNode(fakes.TestOvercloudNode): def test_provide_one_node(self): node_id = 'node_uuid1' - self.websocket.wait_for_message.return_value = { - "status": "SUCCESS", - "message": "Success" - } - parsed_args = self.check_parser(self.cmd, [node_id], [('node_uuids', [node_id])]) @@ -207,11 +207,6 @@ class TestProvideNode(fakes.TestOvercloudNode): node_id1 = 'node_uuid1' node_id2 = 'node_uuid2' - self.websocket.wait_for_message.return_value = { - "status": "SUCCESS", - "message": "Success" - } - argslist = [node_id1, node_id2] verifylist = [('node_uuids', [node_id1, node_id2])] @@ -279,11 +274,10 @@ class TestIntrospectNode(fakes.TestOvercloudNode): 2 if provide else 1) def _check_introspect_nodes(self, parsed_args, nodes, provide=False): - self.websocket.wait_for_message.return_value = { + self.websocket.wait_for_messages.return_value = [{ "status": "SUCCESS", "message": "Success", - "introspected_nodes": {} - } + }] self.cmd.take_action(parsed_args) diff --git a/tripleoclient/tests/workflows/test_baremetal.py b/tripleoclient/tests/workflows/test_baremetal.py index 9962d9928..912d5ef0f 100644 --- a/tripleoclient/tests/workflows/test_baremetal.py +++ b/tripleoclient/tests/workflows/test_baremetal.py @@ -91,9 +91,7 @@ class TestBaremetalWorkflows(utils.TestCommand): def test_provide_success(self): - self.websocket.wait_for_message.return_value = { - "status": "SUCCESS", - } + self.websocket.wait_for_messages.return_value = self.message_success baremetal.provide(self.app.client_manager, node_uuids=[], queue_name="QUEUE_NAME") @@ -107,10 +105,7 @@ class TestBaremetalWorkflows(utils.TestCommand): def test_provide_error(self): - self.websocket.wait_for_message.return_value = { - "status": "FAIL", - "message": "Failed" - } + self.websocket.wait_for_messages.return_value = self.message_failed self.assertRaises( exceptions.NodeProvideError, @@ -135,10 +130,11 @@ class TestBaremetalWorkflows(utils.TestCommand): def test_provide_error_with_format_message(self): - self.websocket.wait_for_message.return_value = { + self.websocket.wait_for_messages.return_value = iter([{ + "execution": {"id": "IDID"}, "status": "FAIL", "message": ['Error1', 'Error2'] - } + }]) self.assertRaises( exceptions.NodeProvideError, diff --git a/tripleoclient/workflows/baremetal.py b/tripleoclient/workflows/baremetal.py index dd7b4f757..cc9f82fe5 100644 --- a/tripleoclient/workflows/baremetal.py +++ b/tripleoclient/workflows/baremetal.py @@ -82,11 +82,11 @@ def provide(clients, **workflow_input): ) with tripleoclients.messaging_websocket(queue_name) as ws: - payload = ws.wait_for_message(execution.id) + for payload in base.wait_for_messages(workflow_client, ws, execution): + if 'message' in payload: + print(payload['message']) - if payload['status'] == 'SUCCESS': - print('Successfully set all nodes to available.') - else: + if payload['status'] != 'SUCCESS': try: message = _format_provide_errors(payload) except Exception: