summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteven Hardy <shardy@redhat.com>2016-11-03 17:42:51 +0000
committerSteven Hardy <shardy@redhat.com>2016-11-03 17:43:51 +0000
commit06205231a332ba942f07a7a07c6a546391d86dc4 (patch)
tree97c135ad96d34215daf99958d2e9f7accb63c85c
parent40a4ed0841789b8980e3161bd18490fb8b4bca7e (diff)
downloadheat-templates-06205231a332ba942f07a7a07c6a546391d86dc4.tar.gz
Add option to pass tags to the ansible hook
Currently we don't support options for the ansible hook, but it would be useful to enable passing tags, like we already do for the puppet hook. Change-Id: Idf7e3aa520fd40a2c4c00b2d26c3c608059bb51d
-rwxr-xr-xhot/software-config/elements/heat-config-ansible/install.d/hook-ansible.py5
-rw-r--r--tests/software_config/test_hook_ansible.py41
2 files changed, 35 insertions, 11 deletions
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 b1dbddc..37a3ad4 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
@@ -49,6 +49,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'])
@@ -74,6 +76,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 5b75182..e4fb36a 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'}
@@ -59,6 +72,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({
@@ -67,7 +86,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({
@@ -80,16 +99,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)