How does --inventory option in Ansible work when i

2019-01-20 11:28发布

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?

3条回答
够拽才男人
2楼-- · 2019-01-20 12:11

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.

查看更多
三岁会撩人
3楼-- · 2019-01-20 12:20

This is (now, at least) a documented feature. From the man page:

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

查看更多
我想做一个坏孩纸
4楼-- · 2019-01-20 12:23

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.

查看更多
登录 后发表回答