From: Zack Cerza Date: Tue, 26 May 2015 19:55:19 +0000 (-0600) Subject: Add extra_vars support for Ansible X-Git-Tag: 1.1.0~926^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=a24670de1215886de7dd3df40e4bbae3eed6532b;p=teuthology.git Add extra_vars support for Ansible Signed-off-by: Zack Cerza --- diff --git a/teuthology/task/ansible.py b/teuthology/task/ansible.py index 43a564aad9..89bd282996 100644 --- a/teuthology/task/ansible.py +++ b/teuthology/task/ansible.py @@ -60,6 +60,8 @@ class Ansible(Task): not, we generate a temporary file to use. tags: A string including any (comma-separated) tags to be passed directly to ansible-playbook. + vars: A dict of vars to be passed to ansible-playbook via the + --extra-vars flag Examples: @@ -80,6 +82,12 @@ class Ansible(Task): inventory: /path/to/inventory playbook: /path/to/playbook.yml tags: my_tags + vars: + var1: string_value + var2: + - list_item + var3: + key: value """ def __init__(self, ctx, config): @@ -228,9 +236,10 @@ class Ansible(Task): # Assume all remotes use the same username user = self.cluster.remotes.keys()[0].user extra_vars = dict(ansible_ssh_user=user) + extra_vars.update(self.config.get('vars', dict())) args = [ 'ansible-playbook', '-v', - "--extra-vars='%s'" % json.dumps(extra_vars), + "--extra-vars", "'%s'" % json.dumps(extra_vars), '-i', self.inventory, '--limit', ','.join(fqdns), self.playbook_file.name, diff --git a/teuthology/test/task/test_ansible.py b/teuthology/test/task/test_ansible.py index 79cd79d495..edb1eb70a3 100644 --- a/teuthology/test/task/test_ansible.py +++ b/teuthology/test/task/test_ansible.py @@ -1,3 +1,4 @@ +import json import os import yaml @@ -286,6 +287,40 @@ class TestAnsibleTask(TestTask): assert args.count('--tags') == 1 assert args[args.index('--tags') + 1] == 'user,pubkeys' + def test_build_args_no_vars(self): + task_config = dict( + playbook=[], + ) + task = Ansible(self.ctx, task_config) + task.setup() + args = task._build_args() + assert args.count('--extra-vars') == 1 + vars_str = args[args.index('--extra-vars') + 1].strip("'") + extra_vars = json.loads(vars_str) + assert extra_vars.keys() == ['ansible_ssh_user'] + + def test_build_args_vars(self): + extra_vars = dict( + string1='value1', + list1=['item1'], + dict1=dict(key='value'), + ) + + task_config = dict( + playbook=[], + vars=extra_vars, + ) + task = Ansible(self.ctx, task_config) + task.setup() + args = task._build_args() + assert args.count('--extra-vars') == 1 + vars_str = args[args.index('--extra-vars') + 1].strip("'") + got_extra_vars = json.loads(vars_str) + assert 'ansible_ssh_user' in got_extra_vars + assert got_extra_vars['string1'] == extra_vars['string1'] + assert got_extra_vars['list1'] == extra_vars['list1'] + assert got_extra_vars['dict1'] == extra_vars['dict1'] + def test_teardown_inventory(self): task_config = dict( playbook=[],