• ansible中的block的用法


    在说block用法之前,先说一下ansible的yaml文件中判断的使用,符合when的条件的时候,执行,不满足条件就不执行,例如:

    - name: when用法举例
      hosts: all
      tasks: 
        - name: 修改文件权限
          file: src=/root/test.txt.j2 dest=/opt/test.txt mode=0644
          when: '$USER=root'

    再来看block的例子:

    - name: block的用法
      hosts: node
      tasks:
        - debug:
          msg: "task1 not in block"
        - block:
            - debug:
                msg: "task2 in block1"
            - debug:
                msg: "task3 in block1"
          when: 2 > 1

    是的,当when的判断语句一样时,可以将任务合并,写起来省力一点。此外,block除了能和when结合起来使用,还有一个很重要的功能,就是"错误处理"功能。
    不用block:

    - hosts: test
      remote_user: root
      tasks:
        - shell: 'cat /etc/redhat-release'
          register: stdout_info
          ignore_errors: true
          rescue:
        - debug:
            msg: 'I caught an error'
          when: 'stdout_info is failed'    

    使用block:

    - hosts: test
      remote_user: root
      tasks:
      - block:
          - shell: 'cat /etc/redhat-release'
        rescue:
          - debug:
              msg: 'I caught an error'

    如上例所示,定义了一个block,这个block中有一个任务,这个任务在目标主机中执行了’‘cat /etc/redhat-release’’'命令,除了block关键字,还有另外一个关键字rescue,rescue关键字与block关键字对齐,rescue的字面意思为"救援",表示当block中的任务执行失败时,会执行rescue中的任务进行补救,当然,在rescue中定义什么任务,是由你决定的。

    也就是说当block中的任务出错时,会执行rescue中的任务,当block中的任务顺利执行时,则不会执行rescue中的任务。

    你可能会问,使用block的方法完成"错误处理"的功能,似乎与使用failed的方法并没有什么不同,除了代码似乎"精简"了一点,block还有其他优势么?其实,使用block的方式还是有一定优势的,当block中有多个任务时,这种优势就比较明显了:

    ---
    - hosts: testuser
      remote_user: root
      tasks:
      - block:
          - debug:
              msg: 'I execute normally'
          - command: /bin/false
          - debug:
              msg: 'I never execute, due to the above task failing'
        rescue:
          - debug:
              msg: 'I caught an error'
          - command: /bin/false
          - debug:
              msg: 'I also never execute'
        always:
          - debug:
              msg: "This always executes"
        when: 2>1
    ————————————————
    版权声明:本文为CSDN博主「大多时候吃素」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/weixin_45138731/article/details/107163388

  • 相关阅读:
    一个数据库版本兼容问题
    ACL原理与配置(一、前言 二、ACL概述 三、ACL的组成实验演示通配符(1)通配符(2) ACL的分类与标识ACL基本配置 ACL高级配置​编辑)
    Ai-WB2模组与手机建立 SPP 连接,以及在 UART-Bluetooth LE 透传模式下传输数据
    分布式事务框架 Seata 入门案例
    【Linux学习】02Linux基础命令
    低代码平台中的“模型驱动”与“表单驱动”有何区别?
    海格里斯HEGERLS托盘搬运机器人四向车引领三维空间集群设备柔性运维
    hive补全连续或非连续空值数据sql
    [Qt网络编程]之UDP通讯的简单编程实现
    ElasticSearch(一):介绍、安装、文档分词
  • 原文地址:https://blog.csdn.net/rqaz123/article/details/126380946