在 Ansible
中,如果你有一個主 playbook
包含了多個 playbook
,而這些子 playbook
指定的 hosts
不一樣,你可以透過兩種方式統一在主 playbook
中指定 hosts
:
1. 在主 playbook
中指定全域性的 hosts
你可以在主 playbook
中透過頂層的 hosts
指定統一的目標主機。這種方式會覆蓋子 playbook
中定義的 hosts
。
示例:
# main_playbook.yml
---
- hosts: all # 在主 playbook 裡統一指定 hosts
import_playbook: playbook1.yml
- hosts: all # 或者為每個 import_playbook 指定
import_playbook: playbook2.yml
- hosts: all
import_playbook: playbook3.yml
這樣,所有子 playbook
將會使用 main_playbook.yml
中定義的 hosts: all
,從而覆蓋各個子 playbook
中定義的 hosts
。
2. 在 include
時動態傳遞 hosts
你可以在 import_playbook
或 include_playbook
時顯式為每個子 playbook
定義不同的 hosts
。這樣即使子 playbook
中有 hosts
定義,也會被覆蓋。
示例:
# main_playbook.yml
---
- import_playbook: playbook1.yml
hosts: webservers # 指定 playbook1 的 hosts
- import_playbook: playbook2.yml
hosts: dbservers # 指定 playbook2 的 hosts
- import_playbook: playbook3.yml
hosts: all # 指定 playbook3 的 hosts
透過這種方式,你可以為每個子 playbook
動態指定不同的目標主機,而不必修改各個子 playbook
的內容。
3. 使用 limit
引數控制執行範圍
除了在 playbook
中直接指定 hosts
,你還可以使用 ansible-playbook
命令中的 --limit
選項來限制主機範圍。例如:
ansible-playbook main_playbook.yml --limit webservers
這樣可以只執行指定主機組 webservers
上的任務,而不需要修改 playbook
檔案中的 hosts
設定。
總結:
- 可以透過在主
playbook
中統一指定hosts
,覆蓋各個子playbook
的hosts
設定。 - 也可以為每個子
playbook
單獨指定hosts
,在import_playbook
時動態傳遞。 - 使用
ansible-playbook --limit
命令引數來指定目標主機,也是一種靈活的方式。
透過這些方法,可以靈活地控制多個 playbook
的主機範圍,並在需要時統一管理。