diff --git a/hot/software-config/elements/heat-config-ansible/install.d/hook-ansible.py b/hot/software-config/elements/heat-config-ansible/install.d/hook-ansible.py index 53190f8..0cf83e4 100755 --- a/hot/software-config/elements/heat-config-ansible/install.d/hook-ansible.py +++ b/hot/software-config/elements/heat-config-ansible/install.d/hook-ansible.py @@ -50,6 +50,8 @@ def main(argv=sys.argv): for input in c['inputs']: variables[input['name']] = input.get('value', '') + tags = c['options'].get('tags') + fn = os.path.join(WORKING_DIR, '%s_playbook.yaml' % c['id']) vars_filename = os.path.join(WORKING_DIR, '%s_variables.json' % c['id']) heat_outputs_path = os.path.join(OUTPUTS_DIR, c['id']) @@ -75,6 +77,9 @@ def main(argv=sys.argv): '--extra-vars', '@%s' % vars_filename ] + if tags: + cmd.insert(-1, '--tags') + cmd.insert(-1, tags) log.debug('Running %s' % (' '.join(cmd),)) try: subproc = subprocess.Popen(cmd, stdout=subprocess.PIPE, diff --git a/tests/software_config/test_hook_ansible.py b/tests/software_config/test_hook_ansible.py index 4acc796..0f2830c 100644 --- a/tests/software_config/test_hook_ansible.py +++ b/tests/software_config/test_hook_ansible.py @@ -27,6 +27,19 @@ class HookAnsibleTest(common.RunScriptTest): 'id': '1234', 'name': 'fake_resource_name', 'group': 'ansible', + 'options': {}, + 'inputs': [ + {'name': 'foo', 'value': 'bar'}, + {'name': 'another', 'value': 'input'} + ], + 'config': 'the ansible playbook' + } + + data_tags = { + 'id': '1234', + 'name': 'fake_resource_name_tags', + 'group': 'ansible', + 'options': {'tags': 'abc,def'}, 'inputs': [ {'name': 'foo', 'value': 'bar'}, {'name': 'another', 'value': 'input'} @@ -60,6 +73,12 @@ class HookAnsibleTest(common.RunScriptTest): }) def test_hook(self): + self._hook_run() + + def test_hook_tags(self): + self._hook_run(data=self.data_tags, options=['--tags', 'abc,def']) + + def _hook_run(self, data=None, options=None): self.env.update({ 'TEST_RESPONSE': json.dumps({ @@ -68,7 +87,7 @@ class HookAnsibleTest(common.RunScriptTest): }), }) returncode, stdout, stderr = self.run_cmd( - [self.hook_path], self.env, json.dumps(self.data)) + [self.hook_path], self.env, json.dumps(data or self.data)) self.assertEqual(0, returncode, stderr) self.assertEqual({ @@ -81,16 +100,16 @@ class HookAnsibleTest(common.RunScriptTest): ansible_playbook = self.working_dir.join('1234_playbook.yaml') vars_filename = self.working_dir.join('1234_variables.json') - self.assertEqual( - [ - self.fake_tool_path, - '-i', - 'localhost,', - ansible_playbook, - '--extra-vars', - '@%s' % vars_filename - ], - state['args']) + expected_args = [ + self.fake_tool_path, + '-i', + 'localhost,', + ansible_playbook, + '--extra-vars'] + if options: + expected_args += options + expected_args.append('@%s' % vars_filename) + self.assertEqual(expected_args, state['args']) # Write 'variables' to file variables = self.json_from_file(vars_filename)