techraf
techraf

Reputation: 68609

How does --inventory option in Ansible work when it is given value with a trailing comma?

Man pages for ansible and ansible-playbook define -i option as:

-i PATH, --inventory=PATH
       The PATH to the inventory hosts file, which defaults to
       /etc/ansible/hosts.

Yet to run on a local system the following syntax is used in examples:

ansible -i "localhost," -c local -m ping localhost

What exactly is this "localhost," with comma at the end (otherwise it is treated as filename) and how does it relate to PATH?

Upvotes: 5

Views: 2196

Answers (3)

supervacuo
supervacuo

Reputation: 9262

This is (now, at least) a documented feature. From Ansible's documentation:

-i, --inventory, --inventory-file
specify inventory host path or comma separated host list. --inventory-file is deprecated

(emphasis added)

What's still not in the manual is that "comma separated host list" means that you need to add a comma even if the "list" is a single item, to distinguish between "target a single host called hostname":

$ ansible -i 'hostname,' ...

and "load inventory from a file called hostname":

$ ansible -i 'hostname' ...

If anyone out there has time, maybe you could submit a pull request to change the help text to explain this (and to add a hyphen in "comma-separated", but maybe that's just me..)

Upvotes: 6

Lakshman Diwaakar
Lakshman Diwaakar

Reputation: 7589

Actually, when you want to run commands against a specific host, don't add -i, instead, run it in the following way:

ansible localhost -m ping 

Use -i only to specify the path for dynamic inventory or hosts.

Upvotes: -2

Bruce P
Bruce P

Reputation: 20759

According to Michael DeHann, who created Ansible, the comma trick you're referring to is a hack that shouldn't be relied upon. It's a hack to run Ansible without an inventory file, for cases where you're going to run against localhost. That way you don't actually have to create an inventory file that just lists localhost.

Upvotes: 3

Related Questions