一:when语句
1:基础了解
说到底,还是有多个表达式来组成一个判断语句,很多种的判断语句
1、 为什么需要判断语句:
有的时候play的结果需要依赖于变量,fact或者是前一个任务的执行结果,或者基于上一个task执行返回的结果而决定如何执行后续的task,这个时候就需要条件的判断了,一个很简单的案例,就是挂载磁盘,不需要到被控节点上面去看是否挂成功了,直接使用一个判断,看那个task任务的执行的结果,为0则代表着成功,就进行下一步的任务的执行
2、使用场景
1)目标主机上定义了一个硬限制,比如目标主机的最小内存必须达到多少,才能执行task任务
2)捕获一个命令的输出,根据输出的结果不同来触发不同的task
3)根据不同的目标主机的facts,来执行不同的tasks,如果是node1就是执行A任务,如果是node2就执行B任务
等等等
3、when理解
当判断的结果是一致的话,那么执行task任务,否则的话,就跳过这个任务
ansible中判断语句是when判断,默认when判断,就识别变量,所以的话,不需要使用"{{}}"来引用变量,when inventory_hostname == 'node1'
when与模块的层级是一样的
2:判断的表达式
1:比较运算符
== 比较2边是否相等的,比较字符串和数字
!= 2边是否一致,不一致则为真
>= 比较大小,左边大于右边为真
<= 右边大于左边为真
> 左边大于右边为真
< 右边大于左边为真
案例:
判断运行的task任务的主机是不是node1,如果是的node1则执行任务,
判断主机的freemem大小是否大于1000,如果是的话,则执行任务
//通过facts变量来获取这个内存,然后通过魔法变量来获取这个node1 - name: memfree hosts: node1 tasks: - name: use when debug: msg: dayu1000 when: ansible_memtotal_mb > 1000 - name: node1 debug: msg: hostname is node1 when: inventory_hostname == 'node1'
2:逻辑运算符
and | 逻辑与,2边都为真,则返回真 |
or | 逻辑或,有一个为真,则返回为真 |
not | 逻辑否,对表达式取反,真为假,假为真,在表达式的前面写上 |
() | 当一组的表达式组合在一起后,形成一个更大的表达式,组合内的所有表达式都是逻辑与的关系 |
案例:
#判断主机名为node1,ip地址为10,则打印hello rhce [root@controller mnt]# cat f4.yml - name: use debug hosts: node1 tasks: - debug: msg: hello rhce when: inventory_hostname == 'node1' and ansible_ens160.ipv4.address == '172.25.250.11' #判断主机名是否为node1或者ip地址是30的,则打印rhce [root@controller mnt]# cat f5.yaml - name: hosts: all tasks: - debug: msg: rhce when: inventory_hostname == 'node1' or ansible_ens160.ipv4.address == '172.25.250.30' #使用not来进行判断,判断不是node1的主机即执行任务 应该放在最前面 - name: user kkk hosts: all tasks: - name: debug: msg: hello when: not ansible_hostname == 'node1' #()的使用,主机名是node1并且ip地址是11或者系统是redhat,并且版本是9的则执行任务 ()里面是逻辑与的关系,多个表达式一起表达 [root@controller mnt]# cat f7.yml - name: use debug hosts: all tasks: - debug: msg: hello rhce when: (ansible_hostname == 'node1' and ansible_ens160.ipv4.address == '172.25.250.11') or (ansible_distribution_major_version == '9' and ansible_os_family == 'RedHat')
3:根据rc的返回值来进行判断task任务是否执行成功
根据注册变量,这个能保存上一个tasks任务的执行信息,就是根据rc的值为0则表示执行成功,执行任务,不成功,执行另外的一个任务
[root@controller mnt]# cat f8.yml - hosts: node1 tasks: - shell: ls /etc/passsssss register: get_status ignore_errors: yes - debug: msg: rc is 0 when: get_status.rc == 0 - debug: msg: rc is error when: get_status.rc != 0
二:
标签:语句,判断,RHCE,when,debug,ansible,node1,执行 From: https://www.cnblogs.com/qw77/p/18110178