我試圖建立Ansible能夠根據主機是什麼清單組運行一個劇本。例如,在清單中,我們有:Ansible:根據庫存變量包括劇本
[group1]
host1.sub.domain.tld ansible_host=10.0.0.2
...
[group1:vars]
whatsmyplaybook=build-server.yml
然後,我們希望做一個簡單的劇本,將或多或少地重定向到這是清單中的劇本:
---
- name: Load Playbook from inventory
include: "{{hostvars[server].whatsmyplaybook}}"
凡「server
」變量將是主機的FQDN,從命令行傳遞:
ansible-playbook whatsmyplaybook.yml -e "server=host1.sub.domain.tld"
我們的推理是從全新安裝(PXE啓動)啓動服務器,它只會真正知道它的FQDN,然後有一個firstboot腳本SSH連接到我們的Ansible主機,並啓動以上命令。然而,我們這樣做的時候,我們得到以下錯誤:
ERROR! 'hostvars' is undefined
這表明庫存不會被解析,直至提供host
列表,它吸了很多。有沒有另外一種方法來完成這個?
你爲什麼試這個? Ansible戲劇有'主持人'聲明,它決定了他們被應用到哪個組。您包含的任何遊戲都必須具有此聲明,並將在所有匹配的主機組上運行。 – techraf
@techraf「'我們的推理是從一個全新的安裝(PXE啓動)中啓動一個服務器引導程序,它只會真正知道它的FQDN」。我們已經有了可以填寫'hosts'聲明的劇本,但是當我們重建一臺機器時,它們必須被修改或者運行的範圍太大。我們的目標是消除對此的需求,並允許不知道其角色/劇本的主持人讓Ansible與之競爭。 – MrDrMcCoy