syntaxansible

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?


Solution

  • 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..)