• when条件判断、loop循环


    when:

    在Ansible中,提供的唯一一个通用的条件判断是when指令,当when指令的值为true时,则该任务执行,否则不执行该任务。

    例如:

    ---
    - name: 修改文件内容
      hosts: all
      tasks:
              - name: one
                copy:
                        content: 'Development'
                        dest: /etc/issue
                when: "inventory_hostname in groups.dev"   //当主机属于清单列表中的dev组的时候执行,不需要加{{}}
    

    需要注意的是,when指令因为已经明确是做条件判断,所以它的值必定是一个表达式,它会自动隐式地包围一层 {{}} ,所以在写when指令的条件判断时,不要再手动加上 {{}}

    虽然when指令的逻辑很简单:值为true则执行任务,否则不执行任务。但是,它的用法并不简单,因为when指令的值可以是Jinja2的表达式,很多内置在Jinja2中的Python的语法都可以用在when指令中,而这需要掌握Python的基本语法。如果不具备这些知识,那么想要实现某种判断功能可能会感觉到较大的局限性

    loop:

    loop等价于with_list,从名字上可以知道它是遍历数组(列表)的,所以在loop指令中,每个元素都以列表的方式去定义。列表有多少个元素,就循环执行模块多少次,每轮循环中,都会将本次迭代的列表元素保存在控制变量item中。

    例如:

    ---
    - name: set hostname
      hosts: new
      gather_facts: false
      vars:
        hostnames:
          - host: 192.168.200.34
            name: new1
          - host: 192.168.200.35
            name: new2
      tasks: 
        - name: set hostname
          hostname: 
            name: "{{item.name}}"
          when: item.host == inventory_hostname   
          loop: "{{hostnames}}"  //循环变量hostname
    

    在这个示例中,是对 {{hostnames} }进行循环遍历,hostnames中包含两个元素,每个元素都是一个key/value的对象结构。所以,第一次迭代时,item变量的值是:

    {
      host: "192.168.200.34",   //item.host值
      name: "new1"              //item.name值
    }
    

    注意,当loop和when一起使用时,when的条件判断是在循环内部执行的,也就是说循环指令(如loop)的解析顺序早于when指令。

  • 相关阅读:
    Annotation
    GIT的作用以及Versioncontrol为什么要用GIT
    Http协议
    人工智能的可怕与不可怕
    Makefile简易教程
    Node.js 学习笔记之一:学习规划 & 认知 Node.js
    《大教堂与集市》的启示 — 软件工程的另一种选择
    Git简易教程
    谈谈买书与读书
    clang编译器简介
  • 原文地址:https://www.cnblogs.com/wushuai2018/p/16043554.html
Copyright © 2020-2023  润新知