• ansible条件使用--实践


    ansible条件使用

    1、条件使用最简单的方式

    ansible中使用条件最简单的方式如下所示:

    [root@ansibleserver kel]# cat conditions.yml

    ---

    - hosts: servers

      tasks:

            - name: "shutdown centos system"

             command: /sbin/reboot

             when: ansible_lsb.id == "CentOS"

    在以上例子中,主要是根据收集的fact变量来判断哪些是centos服务器,从而将对应的centos服务器进行重启操作,执行结果如下:

    [root@ansibleserver kel]# ansible-playbook -i hosts conditions.yml

    SSH password:

    PLAY [servers] ****************************************************************

    GATHERING FACTS ***************************************************************

    ok: [192.168.1.164]

    ok: [192.168.1.172]

    ok: [192.168.1.171]

    ok: [192.168.1.163]

    TASK: [shutdown centos system] ************************************************

    skipping: [192.168.1.163]

    skipping: [192.168.1.164]

    changed: [192.168.1.172]

    changed: [192.168.1.171]

    PLAY RECAP ********************************************************************

    192.168.1.163              : ok=1    changed=0    unreachable=0    failed=0  

    192.168.1.164              : ok=1    changed=0    unreachable=0    failed=0  

    192.168.1.171              : ok=2    changed=1    unreachable=0    failed=0  

    192.168.1.172              : ok=2    changed=1    unreachable=0    failed=0 

    在上面的结果中,只有centos的服务器进行了重启,然后其他类型的服务器跳过。

    如何来进行过滤fact的变量,如下所示:

    [root@ansibleserver kel]# ansible -i hosts centosservers -m setup -a "filter=ansible_lsb*"

    SSH password:

    192.168.1.171 | success >> {

        "ansible_facts": {

            "ansible_lsb": {

                "codename": "Final",

                "description": "CentOS release 6.4 (Final)",

                "id": "CentOS",

                "major_release": "6",

                "release": "6.4"

            }

        },

        "changed": false

    }

    192.168.1.172 | success >> {

        "ansible_facts": {

            "ansible_lsb": {

                "codename": "Final",

                "description": "CentOS release 6.4 (Final)",

                "id": "CentOS",

                "major_release": "6",

                "release": "6.4"

            }

        },

        "changed": false

    }

    在其中,可以看到引用变量的方式是使用点的方式,在上例中使用的变量为ansible_lsb,然后取id值,那么就是为ansible_lsb.id的方式。

    2、条件使用的组合

    在使用条件的时候,可能有很多种组合来进行判断,从而可以使用如下的方式来使用:

    [root@ansibleserver kel]# cat conditions.yml

    ---

    - hosts: servers

      tasks:

            - name: "shutdown centos system"

              command: /sbin/reboot

              when: (ansible_lsb.id == "CentOS" and ansible_lsb.release == "6.4") or

                     (ansible_lsb.id == "RedHat" and ansible_lsb.release == "6.4")

    在使用when条件语句的时候,可以使用的符号为and,or,然后用括号来包含进去

    3、根据结果判断使用执行下一步

             - command: /bin/ls

               register: result

               ignore_errors: True

             - command: ifconfig

               when: result|failed

             - command: /bin/ls

               when: result|success

             - command: /bin/ls -l

               when: result|skipped

    此例子中主要是根据使用的条件来进行判断执行下一步的命令,在官方手册上执行成功为succeded,在实际进行测试的时候未success,从而在第一句执行的时候,根据变量result得到相关的结果,从而执行下一步的选择。

    4、根据布尔变量来判断执行步骤

    在设定一个布尔变量之后,可以根据布尔变量来进行判断下一步执行的步骤,如下所示:

    [root@ansibleserver kel]# cat conditions1.yml

    ---

    - hosts: servers

      vars:

            epic: True

      tasks:

            - shell: echo "this is epic"

              when: epic

            - shell: echo "this is not epic"

              when: not epic

    在这里设置了布尔变量epic,然后根据布尔变量值,来使用哪些步骤执行,哪些步骤不进行执行

    5、根据变量是否定义判断执行步骤

    当定义了变量的时候执行一个步骤,当未定义变量的时候执行另外一个步骤,如下所示:

    ---

    - hosts: servers

      vars:

            epic: epic

      tasks:

            - shell: echo "this is defined {{epic}}"

              when: epic is defined

            - shell: echo "this is not defined "

              when: kel is undefined

    6、在每个循环中进行判断定义

    ---

    - hosts: servers

      tasks:

            - name: do somethings

              command: echo {{item}}

              with_items: [0,2,4,6,8]

              when: item > 5

    在使用这种方式的时候,在每个循环中会进行判断,如上例子所示,对items的02468这个集合进行判断,当item的值大于5的时候才会执行这个command

    7、在roles中使用条件语句

    ---

    - hosts: servers

      tasks:

      roles:     

            - {role: templatecontrol,when ansible_lsb_id == 'CentOS'}

    在roles中使用的时候,注意符号的使用,在上面中,使用的单独的role,然后用花括号进行包含起来,然后在role中是用逗号进行条件判断

    8、条件导入

    [root@ansibleserver kel]# ls -l RedHat.yml os.default.yml CentOS.yml

    -rw-r--r-- 1 root root 12 Feb  1 15:42 CentOS.yml

    -rw-r--r-- 1 root root 12 Feb  1 15:43 os.default.yml

    -rw-r--r-- 1 root root 12 Feb  1 15:42 RedHat.yml

    [root@ansibleserver kel]# cat conditions1.yml

    ---

    - hosts: servers

      vars_files:

            - ["{{ansible_lsb.id}}.yml","os.default.yml"]

      tasks:

            - name: do somethings

             command: echo {{kel}}

    [root@ansibleserver kel]# cat CentOS.yml

    kel: centos

    [root@ansibleserver kel]# cat RedHat.yml

    kel: redhat

    [root@ansibleserver kel]# cat os.default.yml

    kel: defalt

    在这个里面,根据条件来导入变量的文件,根据fact作为变量,然后来决定使用哪个变量,从而进行导入变量使用

    for linux and python
  • 相关阅读:
    DokuWiki用storage的模式在sae上部署后速度太慢
    让禅道也可以玩BearyChat
    探讨c#中的unchecked是什么意思,起什么作用?
    重温Java的类加载机制
    JVM原理和优化
    为什么使用Redis
    高性能Web服务器Nginx及相关新技术的应用实践-张宴
    潘加宇--领域驱动设计和利润
    程序员跳槽全攻略
    EA强大的画图工具---设计数据库表格
  • 原文地址:https://www.cnblogs.com/kellyseeme/p/5525075.html
Copyright © 2020-2023  润新知