在UNIQUE用户/主机组合上运行Ansible playbook

时间:2016-06-09 08:33:46

标签: ansible aliases

我一直在努力在我们的团队中实施Ansible来管理不同类型的应用程序,例如产品和应用程序的配置文件,维护脚本的分发,......

我们不喜欢在我们的团队中使用“主机名”,因为我们有300多个名字没有意义。为此,我开始在Ansible主机文件中为它们创建别名,如:

[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 playbook(例如)为团队成员设置SSH访问(authorized_keys)或推送维护脚本。我可以在所有主机ITT或UAT上,或者甚至在任何地方,分别在每个主机上运行这些PB。

但是,通常情况下,我们会在现有主机上再次安装相同的应用程序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“Run on ALL - UNIQUE用户/主机组合”?

1 个答案:

答案 0 :(得分:0)

由于大多数任务都会在远程主机上发生变化,因此您可以在运行前使用Conditionals检查主机上的更改。

例如,如果您的Playbook有任务要在远程主机上运行创建文件的脚本,则可以添加when子句以“如果文件存在则跳过任务“并在该文件之前检查该文件是否存在stat任务。

- Check whether script has run in previous instance by looking for file
  stat: path=/path/to/something
  register: something

- name: Run Script when file above does not exist
  command: bash myscript.sh
  when: not something.exists