how to run local command via ansible-playbook

Viewed 31455

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:

- 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:

[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.

4 Answers

Another alternative is local_action.

In the case of both delegate_to and local_action, be aware that if become = yes then Ansible will of course implicitly try to invoke the action using sudo, and then will probably fail because the password for local sudo will be different to any password you entered for remote sudo.

we can access playbook on localhost machine like:

file: playbook.yml

---
- hosts: localhost
  connection: local
  gather_facts: no
  tasks:
    - name: Print message
      debug:
        msg: Hello Ansible World

file: hosts

[localhost]
127.0.0.1

Command

ansible-playbook -i hosts  playbook.yml
Related