我一直在尝试在我们的团队中实施 Ansible 来管理不同类型的应用程序事物,例如产品和应用程序的配置文件、维护脚本的分发……
我们不喜欢在我们的团队中使用“主机名”,因为我们有 300 多个没有意义的名称。因此,我开始在 Ansible hosts 文件中为它们创建别名,例如:
[bpm-i]
bpm-app1-i1 ansible_user=bpmadmin ansible_host=el1001.bc
bpm-app1-i2 ansible_user=bpmadmin ansible_host=el1003.bc
[bpm-u]
bpm-app1-u1 ansible_user=bpmadmin ansible_host=el2001.bc
bpm-app1-u2 ansible_user=bpmadmin ansible_host=el2003.bc
[bpm-all:children]
bpm-i
bpm-u
这意味着我们有一个名为“app1”的 BPM 应用程序,它在集成测试中部署在两台主机上,在用户验收测试中部署在两台主机上。到目前为止,一切都很好。现在,我可以运行 Ansible 剧本来(例如)为团队成员设置 SSH 访问(authorized_keys)或推送维护脚本。我可以在每个主机上单独运行这些 PB,在所有主机 ITT 或 UAT 甚至任何地方运行。
但是,通常情况下,我们会在现有主机上再次安装相同的应用程序 app1,但目的不同——比如“训练”环境。我的反应是这样做:
[bpm-i]
bpm-app1-i1 ansible_user=bpmadmin ansible_host=el1001.bc
bpm-app1-i2 ansible_user=bpmadmin ansible_host=el1003.bc
[bpm-u]
bpm-app1-u1 ansible_user=bpmadmin ansible_host=el2001.bc
bpm-app1-u2 ansible_user=bpmadmin ansible_host=el2003.bc
[bpm-t]
bpm-app1-t1 ansible_user=bpmadmin ansible_host=el2001.bc
bpm-app1-t2 ansible_user=bpmadmin ansible_host=el2003.bc
[bpm-all:children]
bpm-i
bpm-u
bpm-t
但是......现在运行 PB 变得一团糟并导致错误。从逻辑上讲,我有两个别名来访问相同的用户/主机组合:bpm-app1-u1 和 bpm-app1-t1。我不介意,这是完全合乎逻辑的,但是如果我要测试一个新的维护脚本,我会首先将它推送到 bpm-app1-i1 进行测试,如果没问题,我可能会针对 bpm-all 运行 PB。但是由于某些别名的非唯一用户/主机组合,PB 将在同一个用户/主机上运行多次。根据 PB 中的操作,这可能会巧合地起作用,但也可能会严重失败。
有没有办法告诉 Ansible“在所有 - 唯一的用户/主机组合上运行”?