ansible - 如果condition为true,则运行一些包含yml文件

Noa*_*erg 10 ansible

我有一些ubuntu和centos的剧本,我想用main.yml来检查"何时:ansible_os_family =='RedHat'或ansible_distribution =='Centos'"运行剧本(有些人很多:-))

如果我只是

-include: centos-xxx.yml
-include: centos-xaa.yml
-include: centos-xsss.yml
Run Code Online (Sandbox Code Playgroud)

它将运行所有这些
我想要如果符合条件,剧本将运行

我没有找到任何说如何运行的文件包括:如果可能的话,我试图不按每个包括任务

谢谢您的帮助

ted*_*r42 15

您可以使用when条件包含文件.事实上,这有点普遍.

- include: centos-xxx.yml
  when: ansible_os_family == 'RedHat' or ansible_distribution == 'Centos'
- include: debian-xxx.yml
  when: ansible_distribution == 'Debian'
Run Code Online (Sandbox Code Playgroud)

根据您的评论 - 如果您想按顺序运行它们,您有两种选择.这是直截了当的:

- include: centos-a.yml
  when: ansible_os_family == 'RedHat' or ansible_distribution == 'Centos'
- include: centos-b.yml
  when: ansible_os_family == 'RedHat' or ansible_distribution == 'Centos'
- include: centos-c.yml
  when: ansible_os_family == 'RedHat' or ansible_distribution == 'Centos'
- include: centos-d.yml
  when: ansible_os_family == 'RedHat' or ansible_distribution == 'Centos'
Run Code Online (Sandbox Code Playgroud)

或者,你可以这样做:

- include: centos.yml
  when: ansible_os_family == 'RedHat' or ansible_distribution == 'Centos'
Run Code Online (Sandbox Code Playgroud)

在里面centos.yml:

- include: centos-a.yml
- include: centos-b.yml
- include: centos-c.yml
- include: centos-d.yml
Run Code Online (Sandbox Code Playgroud)

  • 看来你在Ansible 2.0中不能再这样做了吗? - https://github.com/ansible/ansible-modules-core/issues/2298 - 任何替代方案? (3认同)
  • 至少1.9.4的一个问题是即使条件失败也包含文件和模块.因此,如果问题是导入例如`yum`模块但是机器没有安装yum,那么无论如何它都会失败. (2认同)
  • 注意:将包括上述所有包含.上面的机制是将`when:...`附加到每个`include:...`行中的每个任务. (2认同)