我正在遵循从 Packt 获得的 Ansible 教程,我已经创建了 3 个 Ubuntu 容器 (lxc) 并让它们启动并运行。我还可以登录它们中的每一个。
我通过以下方式下载了 Ansible:git clone ansible-git-url
然后获取它。
我的工作设置如下:
/home/myuser/code
这里有 2 个文件夹:(ansible
整个 git 存储库),ansible_course
我有 2 个文件:ansible.cfg
和inventory
.
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
...