playbook conditionals

在实际应用过程中经常会碰到不同的主机可能要执行不同的命令,或者执行某个task的时候需要进行一个简单的逻辑判断,此刻就需要在写task的时候进行相应的判断。ansible的所有conditionals方式都是基于使用when进行判断的,when的值是一个条件表达式,如果天剑判断成立,这个task就执行某个操作,如果条件判断不成立,该task不执行或者某个操作会跳过。这里条件判断执行成功的条件为True或者False,关于这个条件表达式也支持多个条件之间and或者or,同时也需要注意条件变量的数据类型。
写一个示例:

-
  hosts: all
  tasks:
    -
      name: Host 192.168.116.130 run this task
      debug: "msg=\"{{ ansible_eno16777736.ipv4.address }}\""
      #1
      when: ansible_eno16777736.ipv4.address == "192.168.116.130"
    -
      name: memtotal < 4096M and processor_cores == 1 run this task
      debug: "msg=\"{{ ansible_fqdn }}\""
      #2
      when: ansible_memtotal_mb < 4096 and ansible_processor_cores == 1
    -
      name: all host run this task
      shell: hostname
      register: info
    -
      name: Hostname is devstack run this task
      debug: "msg=\"{{ ansible_fqdn }}\""
      #3
      when: info['stdout'] == "devstack"
    -
      name: Hostname is web1 run this task
      debug: "msg=\"{{ ansible_fqdn }}\""
      #4
      when: info['stdout'].startswith('web')

第一个when是判断facts信息,因为ansible_eno16777736.ipv4.address的数据结构是一个Python字典,ansible_eno16777736.ipv4.address是取这块网卡的IP地址然后与“192.168.116.130“做比对进行判断,这个判断是一个Python语法的判断,还有ansible_eno16777736.ipv4.address的值是Python的str数据类型,所以一定要用引号。如果是生产环境的话建议还是使用ansible_default_ipv4.address参数项。因为实验环境我这里就一张网卡,所以可以这么设置。

第二个when是判断facts的ansible_memtotal_mb和ansible_processor_cores信息,因为这两个信息的值都是Python的int数据类型,所以这里就不需要引号,然后两个条件表达式用and结合。

第三个when是判断all host run this task的运行结果stdout的值。这里是通过register传参。

第四个when也是判断all host run this task的运行结果stdout的值,这里使用了Python的str内置方法startswith,startswith的方法最终会返回True或False,所以在这里也是一个条件表达式。

运行结果如下:
这里写图片描述
skipping表示该task本机没有执行,这里可以直观的看到那些task在哪些机器上执行了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值