我有一套相当复杂的剧本和导入的角色来构建应用程序平台。所有内容都定义在一个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