Change generate fencing parameters to call workflow

Update the client and tests to call the workflow
tripleo.parameters.v1.generate_fencing_parameters instead of the action
tripleo.parameters.generate_fencing directly.

Change-Id: I9539109db4edd4b5fa2ee365cc8b3055bd2c5df7
Depends-On: I63f3a579af5aa70080f8c9cdd5eb0e8f5b3d17da
Partial-Bug: #1640436
This commit is contained in:
Brad P. Crochet
2018-02-27 13:57:53 +00:00
parent 02299c8f74
commit c366263407
4 changed files with 56 additions and 25 deletions

View File

@@ -92,15 +92,13 @@ class TestGenerateFencingParameters(utils.TestCommand):
self.cmd = overcloud_parameters.GenerateFencingParameters(self.app, self.cmd = overcloud_parameters.GenerateFencingParameters(self.app,
None) None)
self.app.client_manager.workflow_engine = mock.Mock() self.app.client_manager = mock.Mock()
self.workflow = self.app.client_manager.workflow_engine @mock.patch(
'tripleoclient.workflows.parameters.generate_fencing_parameters',
def test_generate_parameters(self): autospec=True)
nodes_file = tempfile.NamedTemporaryFile(suffix='.json', delete=False, def test_generate_parameters(self, mock_gen_fence):
mode="wt") mock_open_context = mock.mock_open(read_data="""
self.addCleanup(os.unlink, nodes_file.name)
nodes_file.write("""
{ {
"nodes": [ "nodes": [
{ {
@@ -127,24 +125,24 @@ class TestGenerateFencingParameters(utils.TestCommand):
] ]
} }
""") """)
nodes_file.close()
os.environ["OS_USERNAME"] = "test_os_username" os.environ["OS_USERNAME"] = "test_os_username"
os.environ["OS_PASSWORD"] = "test_os_password" os.environ["OS_PASSWORD"] = "test_os_password"
os.environ["OS_AUTH_URL"] = "test://auth.url" os.environ["OS_AUTH_URL"] = "test://auth.url"
os.environ["OS_TENANT_NAME"] = "test_os_tenant_name" os.environ["OS_TENANT_NAME"] = "test_os_tenant_name"
arglist = [nodes_file.name] arglist = ['node_file.json']
verifylist = [] verifylist = []
self.workflow.action_executions.create.return_value = mock.MagicMock( mock_gen_fence.return_value = '{"result":[]}'
output='{"result":[]}')
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
self.cmd.take_action(parsed_args)
self.workflow.action_executions.create.assert_called_once_with( with mock.patch('six.moves.builtins.open', mock_open_context):
'tripleo.parameters.generate_fencing', parsed_args = self.check_parser(self.cmd, arglist, verifylist)
{ self.cmd.take_action(parsed_args)
mock_gen_fence.assert_called_once_with(
self.app.client_manager,
**{
'nodes_json': [ 'nodes_json': [
{ {
u'mac': [u'00:11:22:33:44:55'], u'mac': [u'00:11:22:33:44:55'],
@@ -168,5 +166,4 @@ class TestGenerateFencingParameters(utils.TestCommand):
'ipmi_cipher': None, 'ipmi_cipher': None,
'ipmi_lanplus': False, 'ipmi_lanplus': False,
'ipmi_level': None 'ipmi_level': None
}, })
run_sync=True, save_result=True)

View File

@@ -209,3 +209,17 @@ class TestParameterWorkflows(utils.TestCommand):
std_output = mock_print.getvalue() std_output = mock_print.getvalue()
self.assertNotIn('TestParameter1', std_output) self.assertNotIn('TestParameter1', std_output)
def test_generate_fencing_parameters(self):
self.websocket.wait_for_messages.return_value = iter([{
"execution": {"id": "IDID"},
"status": "SUCCESS",
"fencing_parameters": "{}"
}])
parameters.generate_fencing_parameters(
self.app.client_manager, **{})
self.workflow.executions.create.assert_called_once_with(
'tripleo.parameters.v1.generate_fencing_parameters',
workflow_input={})

View File

@@ -21,7 +21,6 @@ from osc_lib.i18n import _
from tripleoclient import command from tripleoclient import command
from tripleoclient import exceptions from tripleoclient import exceptions
from tripleoclient import utils from tripleoclient import utils
from tripleoclient.workflows import base
from tripleoclient.workflows import parameters from tripleoclient.workflows import parameters
@@ -125,11 +124,11 @@ class GenerateFencingParameters(command.Command):
'ipmi_level': parsed_args.ipmi_level, 'ipmi_level': parsed_args.ipmi_level,
'ipmi_cipher': parsed_args.ipmi_cipher, 'ipmi_cipher': parsed_args.ipmi_cipher,
'ipmi_lanplus': parsed_args.ipmi_lanplus, 'ipmi_lanplus': parsed_args.ipmi_lanplus,
} }
result = base.call_action(
self.app.client_manager.workflow_engine, result = parameters.generate_fencing_parameters(
'tripleo.parameters.generate_fencing', self.app.client_manager, **workflow_input)
**workflow_input)
fencing_parameters = yaml.safe_dump(result, default_flow_style=False) fencing_parameters = yaml.safe_dump(result, default_flow_style=False)
if parsed_args.output: if parsed_args.output:
parsed_args.output.write(fencing_parameters) parsed_args.output.write(fencing_parameters)

View File

@@ -138,3 +138,24 @@ def check_deprecated_parameters(clients, container):
'role-specific inputs.') 'role-specific inputs.')
print('\n'.join([' {}'.format(param) print('\n'.join([' {}'.format(param)
for param in invalid_role_specific_params])) for param in invalid_role_specific_params]))
def generate_fencing_parameters(clients, **workflow_input):
workflow_client = clients.workflow_engine
tripleoclients = clients.tripleoclient
with tripleoclients.messaging_websocket() as ws:
execution = base.start_workflow(
workflow_client,
'tripleo.parameters.v1.generate_fencing_parameters',
workflow_input=workflow_input)
for payload in base.wait_for_messages(workflow_client,
ws, execution, 600):
if payload['status'] != 'SUCCESS':
raise exceptions.WorkflowServiceError(
'Exception generating fencing parameters: {}'.format(
payload['message']))
if ('fencing_parameters' in payload and
(payload.get('status', 'FAILED') == "SUCCESS")):
return payload['fencing_parameters']