Question:
As the subject says. I have some host variables defined in my hosts inventory file. How do I access them in my playbook?
Here is an example. Based on all my research I was expecting foo
and bar
to be part of hostvars
. I can put host specific variables in separate var files, but I would love to keep them in my inventory file “attached” to a host. I don’t want to use it in templates.
ansible version: 1.3.2, ansible_distribution_version: 6.4
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
bash $ bash $ ansible --version ansible 1.3.2 bash $ bash $ cat test_inv.ini [foobar] someHost foo="some string" bar=123 someOtherHost foo="some other string" bar=456 bash $ bash $ cat test.yml --- - name: test variables... hosts: all vars: - some_junk: "1" # gather_facts: no # foo and bar are unavailable whether I gather facts or not. tasks: - debug: msg="hostvars={{hostvars}}" - debug: msg="vars={{vars}}" - debug: msg="groups={{groups}}" - debug: msg="some_junk={{some_junk}}" # - debug: msg="???? HOW DO I PRINT values of host specific variables foo and bar defined in inventory file ???" bash $ bash $ bash $ ansible-playbook -i test_inv.ini test.yml PLAY [test variables...] ****************************************************** GATHERING FACTS *************************************************************** ok: [someHost] TASK: [debug msg="hostvars={{hostvars}}"] ************************************* ok: [someHost] => {"msg": "hostvars={'someHost': {u'facter_operatingsystem': u'RedHat', u'facter_selinux_current_mode': u'enforcing', u'facter_hostname': u'someHost', 'module_setup': True, u'facter_memoryfree_mb': u'1792.70', u'ansible_distribution_version': u'6.4' // ...........snip...........// u'VMware IDE CDR10'}}"} TASK: [debug msg="vars={{vars}}"] ********************************************* ok: [someHost] => {"msg": "vars={'some_junk': '1', 'delegate_to': None, 'changed_when': None, 'register': None, 'inventory_dir': '/login/sg219898/PPP/automation/ansible', 'always_run': False, 'ignore_errors': False}"} TASK: [debug msg="groups={{groups}}"] ***************************************** ok: [someHost] => {"msg": "groups={'ungrouped': [], 'foobar': ['someHost'], 'all': ['someHost']}"} TASK: [debug msg="some_junk=1"] *********************************************** ok: [someHost] => {"msg": "some_junk=1"} PLAY RECAP ******************************************************************** someHost : ok=5 changed=0 unreachable=0 failed=0 bash $ |
Answer:
Doing the following should work:
debug: msg="foo={{foo}}"
The foo
variable will be evaluated in the context of the current host. Tested locally with ansible 1.3.4.