playbook(判断)

  • when关键字
    绝大多数语言中,都使用if作为条件判断的关键字,而在ansible中,条件判断的关键字是when,我们可以使用when关键字为任务指定条件,条件成立,则执行任务,条件不成立,则不执行任务。


    只输出大于1的数字
在ansible中,我们可以使用如下比较运算符

== :比较两个对象是否相等,相等为真

!= :比较两个对象是否不等,不等为真

> : 比较两个值的大小,如果左边的值大于右边的值,则为真

< :比较两个值的大小,如果左边的值小于右边的值,则为真

>= :比较两个值的大小,如果左边的值大于右边的值或左右相等,则为真

<= :比较两个值的大小, 如果左边的值小于右边的值或左右相等,则为真
  • 判断远程主机版本
    我们可以用一条命令查看远程主机的的版本信息

    playbook写法一:
写法2
---
- hosts: testB
  remote_user: root
  tasks:
  - debug:
      msg: "System release is redhat7"
    when:
    - ansible_distribution == "RedHat"
    - ansible_distribution_major_version == "7"
  • 可用的逻辑运算符如下
  • and :逻辑与,当左边与右边同时为真,则返回真
  • or :逻辑或,当左边与右边有任意一个为真,则返回真
  • not :取反,对一个操作体取反
  • ( ) :组合,将一组操作体包装在一起,形成一个较大的操作体
    多个判断信息组合


    否定判断
  • 通过返回值判断执行情况
    什么是返回值?有点像shell中的echo $?


    修改内容,让estimate5.yaml无法正常执行


    修改内容,忽略错误,继续执行下面的task任务


    此时我们可以看到当task2无法正常执行时,rc为127(不为0)
  • 通过返回值判断目录是否存在

  • test判断:我们在shell中经常会用test来判断
    在命令行中通过test -e 来判断目录文件是否存在,并且通过查看返回值来查看结果

    在脚本中:如果符合判断条件返回true 不符合返回false

    判断存在


    判断不存在
写法二: 否定not可以写在前面

---
- hosts: testB
  remote_user: root
  gather_facts: no
  vars:
    testpath: /testdirllll
  tasks:
  - debug:
      msg: "file not exist"
    when: not testpath is exists
  • 判断变量:
    判断变量的一些tests
  • defined : 判断变量是否已经定义,已经定义则返回真
  • undefind : 判断变量是否已经定义,未定义则返回真
  • none : 判断变量值是否为空,如果变量已经定义,但是变值为空,则返回真
  • 判断执行结果
    判断执行结果的一些tests:
  • success或succeeded:通过任务的返回信息判断任务的执行状态,任务执行成功则返回真
  • failure或failed:通过任务的返回信息判断任务的执行状态,任务执行失败则返回真
  • change或changed:通过任务的返回信息判断任务的执行状态,任务执行状态为changed则返回真
  • skip或skipped:通过任务的返回信息判断任务的执行状态,当任务没有满足条件,而被跳过执行时,则返回真
  • ansible warning取消 ansible when_版本号


  • ansible warning取消 ansible when_字符串_02

  • 判断路径
  • 判断路径的一些tests:

注:如下tests的判断均针对于ansible主机中的路径,与目标主机无关

  • file : 判断路径是否是一个文件,如果路径是一个文件则返回真
  • directory : 判断路径是否是一个目录,如果路径是一个目录则返回真
  • link : 判断路径是否是一个软链接,如果路径是一个软链接则返回真
  • mount: 判断路径是否是一个挂载点,如果路径是一个挂载点则返回真
  • exists: 判断路径是否存在,如果路径存在则返回真!

ansible warning取消 ansible when_ansible warning取消_03


ansible warning取消 ansible when_版本号_04


ansible warning取消 ansible when_字符串_05

  • 判断字母包含的字符串是否是纯大/小写
    判断字符串的一些tests:
  • lower:判断包含字母的字符串中的字母是否是纯小写,字符串中的字母全部为小写则返回真
  • upper:判断包含字母的字符串中的字母是否是纯大写,字符串中的字母全部为大写则返回真

ansible warning取消 ansible when_ansible warning取消_06


ansible warning取消 ansible when_字符串_07

  • 判断数值是奇数/偶数/能否被某数整除
    判断数值的一些tests
  • even : 判断数值是否是偶数,是偶数则返回真
  • odd : 判断数值是否是奇数,是奇数则返回真
  • divisibleby(num) : 判断是否可以整除指定的数值,如果除以指定的值以后余数为0,则返回真
  • version:可以用于对比两个版本号的大小,或者与指定的版本号进行对比,使用语法为version(‘版本号’, ‘比较操作符’)当使用version吋,支持多种风格的比较操作符,version支持的比较操作符如下:
  • 大于: >, gt
  • 大于等于: >=, ge
  • 小于: <,lt
  • 小于等于: <<=,le
  • 等于: ==, =, eq
  • 不等于: !=, <>, ne

判断version(对比版本号)

ansible warning取消 ansible when_ansible warning取消_08


ansible warning取消 ansible when_ansible warning取消_09

  • 判断list的子集和父集关系
  • subset:判断一个list是不是另一个list的子集,是另一个list的子集时返回真
  • superset:判断一个list是不是另一个list的父集,是另一个list的父集时返回真
  • 判断是否为字符串


    注意:ansible认为:数字不是字符串,但如果给数字加上信号就是字符串了。字母是字符串


    注意:字母的组合也是字符串,并且加不加引号都是字符串
  • 判断是否为数值


    注意:数字加上引号后就不被ansible认定为数值了,而小数也是数值