ansible-playbook一次執行多個playbook,並重新指定hosts組

jasmine456發表於2024-09-14

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_playbookinclude_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,覆蓋各個子 playbookhosts 設定。
  • 也可以為每個子 playbook 單獨指定 hosts,在 import_playbook 時動態傳遞。
  • 使用 ansible-playbook --limit 命令引數來指定目標主機,也是一種靈活的方式。

透過這些方法,可以靈活地控制多個 playbook 的主機範圍,並在需要時統一管理。

相關文章