zoukankan      html  css  js  c++  java
  • ansible——playbook conditions条件判断

    有些时候,我们需要进行一些条件判断才决定是否执行某个操作,在playbook里面when语句帮我们解决了这个问题。

    比如,如果节点的操作的系统为Debian那么就关机。

    tasks:
      - name: "shut down Debian flavored systems"
        command: /sbin/shutdown -t now
        when: ansible_facts['os_family'] == "Debian"

    当然还可以进行更加复杂的操作,and和or的逻辑判断。
    如果系统是centos6或者是Debian7,那么就关机。

    tasks:
      - name: "shut down CentOS 6 and Debian 7 systems"
        command: /sbin/shutdown -t now
        when: (ansible_facts['distribution'] == "CentOS" and ansible_facts['distribution_major_version'] == "6") or
              (ansible_facts['distribution'] == "Debian" and ansible_facts['distribution_major_version'] == "7")

    如果同时需要多个条件,那么可以这样:

    tasks:
      - name: "shut down CentOS 6 systems"
        command: /sbin/shutdown -t now
        when:
          - ansible_facts['distribution'] == "CentOS"
          - ansible_facts['distribution_major_version'] == "6"

    其实等价于下面:

    tasks:
      - name: "shut down CentOS 6 and Debian 7 systems"
        command: /sbin/shutdown -t now
        when: (ansible_facts['distribution'] == "CentOS" and ansible_facts['distribution_major_version'] == "6")

    有时候你会得到一个变量,它是一个字符串,你可以对其进行数学运算:

    tasks:
      - shell: echo "only on Red Hat 6, derivatives, and later"
        when: ansible_facts['os_family'] == "RedHat" and ansible_facts['lsb']['major_release']|int >= 6

    你还可以根据变量值,来判断:
    变量值:

    vars:
      epic: true

    判断:

    tasks:
        - shell: echo "This certainly is epic!"
          when: epic

    还可以循环:

    tasks:
        - command: echo {{ item }}
          loop: [ 0, 2, 4, 6, 8, 10 ]
          when: item > 5

    配合变量寄存器:

    - name: test play
      hosts: all
    
      tasks:
    
          - shell: cat /etc/motd
            register: motd_contents
    
          - shell: echo "motd contains the word hi"
            when: motd_contents.stdout.find('hi') != -1
  • 相关阅读:
    面试题6 重建二叉树
    面试题5 从尾到头打印链表
    面试题4 替换空格
    面试题3 二维数组中查找
    面试题2 单例
    C++ 强制类型转换
    C++ 11 新特性
    STL 函数对象
    STL 算法
    OpenSSH多路复用Multiplexing配置
  • 原文地址:https://www.cnblogs.com/yangmingxianshen/p/12657225.html
Copyright © 2011-2022 走看看