ansible-playbook条件判断(when)

一.简述:

ansible在实际应用中,必不可少的会遇到不同的主机执行不同的命令,或者针对某个task做一些判断(类似if语句),而此时,就需要用到playbook的when方法。when的值是一个条件表达式,当条件成立(对应python中的True和False)时就会执行某个操作,否则跳过。when也支持多个条件中的and和or(不过在判断一个变量时,需要注意下数据类型)。

二.使用方式: 

案例:

---
- hosts: all
  gather_facts: False

  tasks:
      - name: tesggs
        debug: msg="{{ inventory_hostname }}"
        when: inventory_hostname == "BJCER11-18.opi.com" "test" in group_names  #当主机名相等,并test包含在主机组列表中时,执行debug语句

另,when还支持类似jinja2的filter(有些是ansible特有的)方法,套用一个官方doc的例子:

---
- hosts: test

  tasks:
      - command: /bin/false
        register: result       #赋值result==False
        ignore_errors: True    #忽略错误信息(否则会中断执行(后面语句不执行))

      - command: /bin/ls
        when: result|failed            #result匹配failed时
      - command: /bin/something_else
        when: result|success                #匹配success
      - command: /bin/still/something_else
        when: result|skipped                #匹配skipped

执行结果如下:

TASK [setup] *******************************************************************
ok: [BJCER11-18.opi.com]

TASK [command] *****************************************************************
fatal: [BJCER11-18.opi.com]: FAILED! => {"changed": true, "cmd": ["/bin/false"], "delta": "0:00:00.075582", "end": "2016-06-23 12:42:24.359958", "failed": true, "rc": 1, "start": "2016-06-23 12:42:24.284376", "stderr": "", "stdout": "", "stdout_lines": [], "warnings": []}
...ignoring

TASK [command] *****************************************************************
changed: [BJCER11-18.opi.com]

TASK [command] *****************************************************************
skipping: [BJCER11-18.opi.com]

TASK [command] *****************************************************************
skipping: [BJCER11-18.opi.com]
可发现when: result|failed执行了,后面的两个并没有执行!
当需要将返回的字符串与数字类型进行比较时,可使用int方法:
 
tasks:
  - shell: echo "only on centos 6, derivatives, and later"
    when: ansible_os_family == "Centos" and ansible_lsb.major_release|int >= 6

当然,同样支持变量(var=True)赋值然后when(when var ||  when not var)的判断方法!

参考:http://docs.ansible.com/ansible/playbooks_conditionals.html

----------------------------------------------------------------------------------------------

深耕运维行业多年,擅长linux、容器云原生、运维自动化等方面。
承接各类运维环境部署、方案设计/实施、服务代运维工作,欢迎沟通交流 !

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值