Question:
I am trying to run some local command, iterating over inventory file and taking each hostname as an argument to the local command.
Eg: I wanted to run a command “knife node create {{ hostname }}” in my local machine(laptop). The playbook is:
1 2 3 4 5 6 7 8 |
- name: Prep node hosts: 127.0.0.1 connection: local gather_facts: no tasks: - name: node create command: "knife node create {{ hostname | quote }}" |
and my inventory file looks like:
1 2 3 |
[qa-hosts] 10.10.10.11 hostname=example-server-1 |
Ofcourse, it wont work as the inventory has ‘qa-hosts’ and the play is for ‘127.0.0.1’, as I wanted the play to run from my local machine.
Would anyone help me with an idea how to get it done. Basically, I want get the variable ‘hostname’ and pass it to above play block.
Answer:
You could access the hostname by using the following play, as the inventory information are available as hostvars.
1 2 3 4 5 6 7 8 9 10 11 12 |
- hosts: 127.0.0.1 connection: local gather_facts: no tasks: - debug: var=hostvars - name: node create command: "knife node create {{ hostvars[item]['hostname'] }}" with_items: - "{{ groups['qa-hosts'] }}" |