diff --git a/heat/engine/resources/openstack/mistral/workflow.py b/heat/engine/resources/openstack/mistral/workflow.py index b2db09bdf3..4b24c11798 100644 --- a/heat/engine/resources/openstack/mistral/workflow.py +++ b/heat/engine/resources/openstack/mistral/workflow.py @@ -48,10 +48,10 @@ class Workflow(signal_responder.SignalResponder, PROPERTIES = ( NAME, TYPE, DESCRIPTION, INPUT, OUTPUT, TASKS, PARAMS, - TASK_DEFAULTS, USE_REQUEST_BODY_AS_INPUT + TASK_DEFAULTS, USE_REQUEST_BODY_AS_INPUT, TAGS ) = ( 'name', 'type', 'description', 'input', 'output', 'tasks', 'params', - 'task_defaults', 'use_request_body_as_input' + 'task_defaults', 'use_request_body_as_input', 'tags' ) _TASKS_KEYS = ( @@ -109,6 +109,12 @@ class Workflow(signal_responder.SignalResponder, update_allowed=True, support_status=support.SupportStatus(version='6.0.0') ), + TAGS: properties.Schema( + properties.Schema.LIST, + _('List of tags to set on the workflow.'), + update_allowed=True, + support_status=support.SupportStatus(version='10.0.0') + ), DESCRIPTION: properties.Schema( properties.Schema.STRING, _('Workflow description.'), @@ -532,6 +538,7 @@ class Workflow(signal_responder.SignalResponder, defn_name: {self.TYPE: props.get(self.TYPE), self.DESCRIPTION: props.get( self.DESCRIPTION), + self.TAGS: props.get(self.TAGS), self.OUTPUT: props.get(self.OUTPUT)}} for key in list(definition[defn_name].keys()): if definition[defn_name][key] is None: diff --git a/heat/tests/openstack/mistral/test_workflow.py b/heat/tests/openstack/mistral/test_workflow.py index 9419b8b2a1..9855f67cba 100644 --- a/heat/tests/openstack/mistral/test_workflow.py +++ b/heat/tests/openstack/mistral/test_workflow.py @@ -44,7 +44,21 @@ resources: publish: result: <% $.hello %> """ - +workflow_template_with_tags = """ +heat_template_version: queens +resources: + workflow: + type: OS::Mistral::Workflow + properties: + type: direct + tags: + - tagged + tasks: + - name: hello + action: std.echo output='Good morning!' + publish: + result: <% $.hello %> +""" workflow_template_with_params = """ heat_template_version: 2013-05-23 resources: @@ -747,6 +761,22 @@ class TestMistralWorkflow(common.HeatTestCase): lambda *args, **kw: self.verify_params(*args, **kw)) scheduler.TaskRunner(wf.signal, details)() + def test_workflow_tags(self): + tmpl = template_format.parse(workflow_template_with_tags) + stack = utils.parse_stack(tmpl) + rsrc_defns = stack.t.resource_definitions(stack)['workflow'] + wf = workflow.Workflow('workflow', rsrc_defns, stack) + self.mistral.workflows.create.return_value = [ + FakeWorkflow('workflow')] + scheduler.TaskRunner(wf.create)() + details = {'tags': ['mytag'], + 'params': {'test': 'param_value', 'test1': 'param_value_1'}} + execution = mock.Mock() + execution.id = '12345' + self.mistral.executions.create.side_effect = ( + lambda *args, **kw: self.verify_params(*args, **kw)) + scheduler.TaskRunner(wf.signal, details)() + def test_workflow_params_merge(self): tmpl = template_format.parse(workflow_template_with_params) stack = utils.parse_stack(tmpl)