为什么要有 Ansible“大师剧本”?

Ray*_*Ray 2 ansible ansible-playbook

在 Ansible 项目中拥有一本主要剧本有什么意义?Ansible最佳实践描述了这样的项目布局:

production      # inventory file for production servers
staging         # inventory file for staging servers
site.yml        # master playbook
webservers.yml  # playbook for webserver tier
dbservers.yml   # playbook for dbserver tier
Run Code Online (Sandbox Code Playgroud)

主剧本将如下所示:

# site.yml
---
- include: webservers.yml
- include: dbservers.yml
Run Code Online (Sandbox Code Playgroud)

webservers 和 dbservers 看起来像这样:

---
- name: configure webservers
  hosts: webservers

  tasks:
    (tasks go here)

  roles:
    (roles go here)
Run Code Online (Sandbox Code Playgroud)

通常,如果您只有一个清单文件,您可以在 ansible.cfg 文件中指定它:

# ansible.cfg
[defaults]
hostfile = inventory
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用以下命令简单地运行您的剧本:

$ ansible-playbook site.yml
Run Code Online (Sandbox Code Playgroud)

但是,如果我们将库存拆分为两个单独的文件,则在运行 playbook 时始终需要指定一个库存文件:

$ ansible-playbook -i production site.yml
Run Code Online (Sandbox Code Playgroud)

但是,由于您的 webserver 或 dbserver playbook 很可能会指定“hosts: webservers”或“host: dbservers”来指示清单文件中的这些相应组,为什么不直接运行这些命令呢?

$ ansible-playbook -i production webservers.yml
$ ansible-playbook -i production dbservers.yml
Run Code Online (Sandbox Code Playgroud)

拥有一个 site.yml 主剧本会给你带来什么?

谢谢。

Mxx*_*Mxx 5

这个例子非常简单。

想象一下,你有一个相当复杂的基础设施,它的各种组件有 15-20 个不同的剧本。这样的主剧本将确保不仅所有底层剧本都将执行,而且它们将以正确的顺序执行。(即应该先运行什么,dbservers.yml 还是 webservers.yml?)