Run Ansible playbook without inventory
Asked Answered
L

2

37

Consider if I want to check something quickly. Something that doesn't really need connecting to a host (to check how ansible itself works, like, including of handlers or something). Or localhost will do. I'd probably give up on this, but man page says:

-i PATH, --inventory=PATH

The PATH to the inventory, which defaults to /etc/ansible/hosts. Alternatively, you can use a comma-separated list of hosts or a single host with a trailing comma host,.

And when I run ansible-playbook without inventory, it says:

[WARNING]: provided hosts list is empty, only localhost is available

Is there an easy way to run playbook against no host, or probably localhost?

Lyndes answered 4/7, 2016 at 14:55 Comment(1)
I use echo 'localhost' > hosts.ini, because my real inventories are partitioned in production, reference, testing and development.Devaney
L
47

Prerequisites. You need to have ssh server running on the host (ssh localhost should let you in).

Then if you want to use password authentication (do note the trailing comma):

$ ansible-playbook playbook.yml -i localhost, -k

In this case you also need sshpass.

In case of public key authentication:

$ ansible-playbook playbook.yml -i localhost,

And the test playbook, to get you started:

- hosts: all
  tasks:
    - debug: msg=test

You need to have a comma in the localhost, option argument, because otherwise it would be treated as a path to an inventory. The inventory plugin responsible for parsing the value can be found here.

Lyndes answered 4/7, 2016 at 15:51 Comment(2)
-k asks for a password (I don't know why that's part of the answer). in any case -i localhost doesn't work because one is supposed to pass in an inventory source, not a host name. I get: "[WARNING]: Unable to parse /Users/ekkis/dev/x/ansible-blockchain-node/localhost as an inventory source"Inchoate
@Inchoate -i localhost isn't supposed to work, see the updated answer.Lyndes
H
1

You can define a default inventory with only localhost

See it is explained here: https://docs.ansible.com/ansible/latest/reference_appendices/config.html#the-configuration-file

And in your playbook add use this

- hosts: all
  connection: local
  tasks:
    - debug: msg=test

It will use local connection so no SSH is required (thus it doesn't expose your machine). It might be quicker unless you need to troubleshoot a ssh issue.

Also for quicker feedback loop you can use: gather_facts: no you already know your target.

Heraclitus answered 9/2, 2023 at 9:54 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.