]> git.apps.os.sepia.ceph.com Git - teuthology.git/commitdiff
Add extra_vars support for Ansible 510/head
authorZack Cerza <zack@redhat.com>
Tue, 26 May 2015 19:55:19 +0000 (13:55 -0600)
committerZack Cerza <zack@redhat.com>
Tue, 2 Jun 2015 16:19:34 +0000 (10:19 -0600)
Signed-off-by: Zack Cerza <zack@redhat.com>
teuthology/task/ansible.py
teuthology/test/task/test_ansible.py

index 43a564aad924fbf75e0e25b5965533f4bb90e76f..89bd28299662ff002e400294efbed9c472f6b9c8 100644 (file)
@@ -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,
index 79cd79d4959ab42b42d43265f04790d2f28bf3a6..edb1eb70a34329f15aa6fe1b7b443854db52af2d 100644 (file)
@@ -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=[],