这是最好的方法吗,或者我是否忽略了 Ansible 工作方式中一些明显的可以使这变得更容易的东西?

这是最好的方法吗,或者我是否忽略了 Ansible 工作方式中一些明显的可以使这变得更容易的东西?

我有一套相当复杂的剧本和导入的角色来构建应用程序平台。所有内容都定义在一个hosts.ini文件中,并广泛使用组来识别专业服务器角色:Web、数据库、搜索等。

但是,整个平台支持两个不同的应用程序实例,在某些情况下,我需要在四个 Web 节点中的两个节点之间设置特定链接。例如,对于下面的主机列表,我想在 app1_node1 和 app1_node2 之间以及 app2_node1 和 app2_node2 之间设置 gluster 卷。

[web]
app1_node1
app1_node2
app2_node1
app2_node2

并有一个剧本可以做到这一点,但一次只能针对两个节点。因此,如果 hosts 文件还包含以下内容:

[webapp1]
app1_node1
app1_node2

[webapp2]
app2_node1
app2_node2

并且剧本被调用--limit=webapp1(或webapp2)一切正常。

但我不确定最好的方法一次性构建所有内容。例如,我可以复制剧本,并在每份剧本中使用不同的主机语句。但这似乎不是一个好主意。

我想到最好的解决方案是有一个中间剧本启动器,如下所示:

---
- name: PLAYBOOK playbook_launcher.yml
  hosts: webapp1

  tasks:

- name: Include playbook
  import_playbook: theplaybook.yml

- hosts: webapp2

  tasks:

- name: Include playbook
  import_playbook: theplaybook.yml

实际剧本中有更广泛的主持人声明。

---
- name: PLAYBOOK theplaybook.yml
  hosts: web

这是最好的方法吗,或者我是否忽略了 Ansible 工作方式中一些明显的可以使这变得更容易的东西?

答案1

尝试使用:

--limit=webapp1:webapp2

相关内容