Lxc

Ansible:如何解析庫存來源

  • October 27, 2018

我正在關注我從 Packt 獲得的 Ansible 教程,我已經創建了 3 個 Ubuntu 容器 (lxc) 並讓它們啟動並執行。我也可以登錄到他們每個人。

我已經通過以下方式下載了 Ansible:git clone ansible-git-url然後獲取了它。

我的工作設置如下: /home/myuser/code在這裡我有 2 個文件夾:(ansible整個 git repo)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 地址創建一個文件。

我的意思是,他沒有說我們需要執行命令來設置它。

您可能想告訴 ansible 主機文件在哪裡ansible.cfg,例如

[defaults]
inventory=inventory

假設inventory實際上是您的庫存文件。

背景

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’s 詳細模式來查看更多預設情況下正在執行的操作:

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

引用自:https://unix.stackexchange.com/questions/458475