Ansible-playbook 条件判断when、pause(学习笔记二十三),


有一些模块,例如copy这个模块有一些机制能跳过本次模块的运行.其实我们也可以使用自己的条件语句去配置跳过模块,这样方便你服务能够选择使用不同的包管理(apt,yum)和不同的文件系统.并且你还可以使用set_fact这个模块做成更多的差异配置

你能够使用when这个关键字去达到跳过本次模块运行的效果,when关键字后面跟着的是python的表达式,在表达式中你能够使用任何的变量或者fact,当表达式的结果返回的是false,便会跳过本次的模块

下面一段配置就说明了如何在debian和redhat系统中选择apt还是yum包管理,并且如果不是以上两个系统,会用debug模块把系统打印出来

---

- name: Install VIM

  hosts: all

  tasks:

    - name: Install VIM via yum

      yum: name=vim-enhanced state=installed

      when: ansible_os_family == "RedHat"

    - name: Install VIM via apt

      apt: name=vim state=installed

      when: ansible_os_family == "Debian"

    - name: Unexpected OS family

      debug: msg="OS Family {{ ansible_os_family }} is not supported" fail=yes

      when: not ansible_os_family == "RedHat" or ansible_os_family == "Debian"

条件语句还有一种用法,它还可以让你当达到一定的条件的时候暂停下来,等待你的输入确认.一般情况下,当ansible遭遇到error时,它会直接结束运行.那其实你可以当遭遇到不是预期的情况的时候给使用pause模块,这样可以让用户自己决定是否继续运行任务

name: pause for unexpected conditions

pause: prompt="Unexpected OS"

when: ansible_os_family != "RedHat"

下面一些情景建议你使用条件语句做跳过动作

job里面有不同操作系统的机器

提示用户,然后再执行操作请求

提高性能,避免运行一个需要执行一段时间模块,而且你知道这个模块不会返回changed

相关内容