由於各種原因/限制,我無法在清單檔案中建立新群組,並且需要使用它--limit/-l
來指定主機。
我被告知要做類似的事情:
ansible-playbook -i /path/to/my/inventory/file.ini -l server.1.com server.2.com my-playbook.yml --check --diff
這引發了一個錯誤:
ERROR! the playbook: server.2.com could not be found
來自Ansible 文檔關於這個主題,我發現您可以使用一個單獨的檔案來列出您想要限制的所有主機。就像是:
ansible-playbook -i /path/to/my/inventory/file.ini -l @list-to-limit.txt my-playbook.yml
但是,我需要內聯完成這一切,而不建立額外的檔案。
答案1
相同常見模式適用於命令列選項-l
。引用註釋:
“您可以使用逗號 (,) 或冒號 (:) 來分隔主機清單。在處理範圍和 IPv6 位址時,首選逗號。”
例如,給定庫存
shell> cat hosts
[webservers]
test_01
test_02
[dbservers]
test_03
test_04
和劇本
shell> cat pb.yml
- hosts: all
tasks:
- debug:
var: inventory_hostname
各種主機的模式按預期工作。例如
- Web 伺服器中的所有主機以及 dbserver 中的所有主機
shell> ansible-playbook -i hosts pb.yml -l webservers:dbservers
...
ok: [test_01] =>
inventory_hostname: test_01
ok: [test_02] =>
inventory_hostname: test_02
ok: [test_03] =>
inventory_hostname: test_03
ok: [test_04] =>
inventory_hostname: test_04
- 主機 test_02 和 test_04
shell> ansible-playbook -i hosts pb.yml -l test_02,test_04
ok: [test_02] =>
inventory_hostname: test_02
ok: [test_04] =>
inventory_hostname: test_04
- 網路伺服器中除主機 test_02 之外的所有主機
shell> ansible-playbook -i hosts pb.yml -l webservers:\!test_02
inventory_hostname: test_01
答案2
操作方法如下:
ansible-playbook ./your_playbook --limit "host1,host2,host3,host4"
答案3
我當時有點發呆,當時我完全認為我可以直接列出所有內嵌的主機並且ansible-playbook
能夠理解。
我透過簡單地-l
在命令中的每個主機名稱之前添加來解決我的問題。
(我意識到這可能不是「最佳實踐」)
我的最終命令如下圖所示:
ansible-playbook -i /path/to/my/inventory/file.ini -l server.1.com -l server.2.com my-playbook.yml --check --diff