Ansible:如何解析库存来源

Ansible:如何解析库存来源

我正在遵循从 Packt 获得的 Ansible 教程,我已经创建了 3 个 Ubuntu 容器 (lxc) 并让它们启动并运行。我还可以登录它们中的每一个。

我通过以下方式下载了 Ansible:git clone ansible-git-url然后获取它。

我的工作设置如下: /home/myuser/code这里有 2 个文件夹:(ansible整个 git 存储库),ansible_course我有 2 个文件:ansible.cfginventory.

inventory包含以下内容:

[allservers]
192.168.122.117 
192.168.122.146
192.168.122.14

[web]
192.168.122.146
192.168.122.14

[database]
192.168.122.117

ansible.cfg包含:

[root@localhost ansible_course]# cat ansible.cfg
[defaults]
host_key_checking = False

然后从这条路径:/home/myuser/code/ansible_course我尝试执行以下命令:

$ ansible 192.168.122.117 -m ping -u root

本教程中的人确实这样做了,他从 中获得了成功响应ping,但我收到以下错误消息:

[WARNING]: Unable to parse /etc/ansible/hosts as an inventory source
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'
[WARNING]: Could not match supplied host pattern, ignoring: 192.168.122.117

在教程中,他从未说过我需要做一些特殊的事情才能提供inventory源,他只是说我们需要使用inventory我们拥有的 Linux 容器的 IP 地址创建一个文件。

我的意思是,他没有说我们需要执行命令来进行设置。

答案1

你可能想告诉 ansible 主机文件在哪里ansible.cfg,例如

[defaults]
inventory=inventory

假设inventory实际上是您的库存文件。

答案2

背景

ansible可以根据ansible.cfg文件来指定文件名inventory,也可以手动指定它,如下所示:

明确告知
$ ansible -i inventory -m ping -u root 192.168.122.117
通过 ansible.cfg 隐式告知
$ ansible -m ping -u root 192.168.122.117

显式的

对于明确告知要使用哪个清单文件的方法,ansible用法显示了以下描述:

ansible使用情况来看:

 -i INVENTORY, --inventory=INVENTORY
          specify inventory host path or comma separated host list.

隐含的

对于隐式方法,你必须更精通 Ansible 才能意识到它是这样工作的。您可以使用ansible的详细模式来查看它默认执行的更多操作:

$ ansible -vvv -m ping -u root box-101
...
...
config file = /Users/user1/somedir/ansible.cfg
...
...
Using /Users/user1/somedir/ansible.cfg as config file
Parsed /Users/user1/somedir/inventory inventory source with ini plugin
META: ran handlers
Using module file /Users/user1/projects/git_repos/ansible/lib/ansible/modules/system/ping.py
...
...
box-101 | SUCCESS => {
    "changed": false,
    "invocation": {
        "module_args": {
            "data": "pong"
        }
    },
    "ping": "pong"
}
...
...

在上面我正在 ping box-101。您可以看到这些行显示ansible.cfg正在使用哪个文件:

config file = /Users/user1/somedir/ansible.cfg
Using /Users/user1/ansible.cfg as config file

并通过这个ansible.cfg文件最终列出哪些清单:

Parsed /Users/user1/somedir/inventory inventory source with ini plugin

正是这些选项将 ansible 定向到该inventory文件:

$ cat ansible.cfg
...
[defaults]
inventory      = inventory
...

相关内容