文档章节

ansible的block特性踩坑记

沙米笔记
 沙米笔记
发布于 2018/01/04 18:39
字数 633
阅读 1.6K
收藏 2

      介绍:block是ansible在2.0版本引入的一个特性,块功能可以将任务进行逻辑分组,并且可以在块级别上应用任务变量。同时也可以使用类似于其他编程语言处理异常那样的方法,来处理块内部的任务异常。

     原理:block中的组任务,都会继承block的属相(支持when,不支持with_items),部署时会分别执行组中的任务,并且都会继承block的属相(在任务后添加block的when条件)

1、常规使用

---
- hosts: localhost
  tasks:   
    - block:
        - yum: name={{ item }} state=installed
          with_items:
             - httpd
             - memcached
        - template: src=templates/src.j2 dest=/etc/foo.conf
        - name: start service
          service: name=bar state=started enabled=True
      when: ansible_distribution == 'CentOS'
      become: true
      become_user: root

2、异常处理

rescue:只有脚本报错时才执行

always:无论结果如何都执行

---
- hosts: localhost 
  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"

      The tasks in the block would execute normally, if there is any error the rescue section would get executed with whatever you need to do to recover from the previous error. The always section runs no matter what previous error did or did not occur in the block and rescue sections.

3、常见陷阱

(1)在2.0中添加了块特性,在2.3中添加了块的name特性

错误反例(2.3以下不支持。2.3及以上就支持了)

---
- hosts: localhost
  tasks:
    - name: bbbb          #2.3以下的正确姿势应该去掉block的name
      block:  
        - name: bbbb
          shell: echo bbbb
      when: false

    - name: cccc
      shell: echo cccc

#-----报错
 - name: bbbb
      ^ here

(2)block的子任务中不能添加注册的变量

原因:如果block的when结果是false,就不会执行任务获得注册变量的值,但是组中有些任务调用此注册变量,就会任务失败。

---
- hosts: localhost
  tasks:
    - block:
        - name: aaaa
          shell: echo aaaa
        - name: bbbb
          shell: echo bbbb
          register: results               #-------后面调用会导致失败
        - name: echo {{results.stdout}}   #-------调用了,此任务会失败
          shell: echo cccc
      when: false

    - name: dddd
      shell: echo dddd

 解决办法:可以给block的vars属相添加变量,在block的组任务中进行调用

---
- hosts: localhost
  tasks:
    - name: bbbb
      shell: echo bbb
      register: result                    #-------注册result变量
    - block:
        - name: aaaa
          shell: echo aaaa
        - name: echo {{results}}          #-------调用了
          shell: echo cccc
      when: false
      vars:
        results: "{{result.stdout}}"      #-------使用vars,将注册的result放入block中results变量中

    - name: dddd
      shell: echo dddd

(3)block没有with_items属相

---
- hosts: localhost
  tasks:
    - block:
        - name: aaaa
          shell: echo aaaa
      with_items:                #-----会报错,block不支持此属相
        - myname: dxx          
      when: false

    - name: dddd
      shell: echo dddd

 

© 著作权归作者所有

上一篇: Linux核心命令
下一篇: xmind使用技巧
沙米笔记
粉丝 29
博文 43
码字总数 45024
作品 0
深圳
程序员
私信 提问
加载中

评论(1)

元宏
block是个好功能
[iOS]KVOController踩坑记

KVO 作为 iOS 中一种强大并且有效的机制,为我们检测对象属性的变化提供了帮助; 但系统提供的KVO接口实在太麻烦,所以开发过程中,我们使用了facebook 开源的KVOController。 今天和大家分享...

ChenHuaHeng
2017/12/15
0
0
react-native下遇到的坑,在这里都可以解决

React-Native android在windows下的踩坑记 坑很多,跳之前做好准备。没有VPN的同学请浏览完本文后慎行。 你需要先安装最新版本的node.js(我最后使用的是v4.1.2),前往官网下载>> 注:我win...

hqxluoyang
2015/10/27
156
0
centos 7( linux )下搭建elasticsearch踩坑记

目录 概述 环境准备 elasticsearch配置 启动踩坑记 彩蛋 概述 公司最近在做全文检索的项目,发现elasticsearch踩了不少坑,百度点进去又是坑,在此记录一下自己的踩坑历程。 本文旨在单机版的e...

java_龙
2018/10/17
630
4
centos 7( linux )下安装elasticsearch教程

目录 概述 环境准备 elaticsearch简介 安装elasticsearch 彩蛋 概述 很久没有写博客了,最近在做全文检索的项目,发现elasticsearch踩了不少坑,百度点进去又是坑,在此记录一下自己的踩坑历程。...

java_龙
2018/10/15
683
0
walle-web-1.2.0部署文档

因为之前在部署walle-web的时候遇到太多坑,所以在这做一次完整的记录,让后面部署的人少踩坑。 环境:lnmp(CentOS6.5 php5.6) svn ansible php需要开启pdo_mysql,exec函数执行 一,compose...

ceeportw
2017/11/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

今日头条技术架构分析,看这篇就对了!

点击上方 "程序员小乐"关注, 星标或置顶一起成长 每天凌晨00点00分, 第一时间与你相约 每日英文 Anywhere, it is a good in the past, recall the number of times many, all would be ligh......

吧主
16分钟前
38
0
影响K8S Pod分配和调度策略的两大关键特性

在Kubernetes中有一个最复杂的调度器可以处理pod的分配策略。基于在pod规范中所提及的资源需求,Kubernetes调度器会自动选择最合适的节点来运行pod。 但在许多实际场景下,我们必须干预调度过...

RancherLabs
19分钟前
59
0
Linux笔记

Linux常用命令之chmod修改文件权限777和754 示例:chmod 777 /etc/squid 运行命令后,squid文件夹(目录)的权限就被修改为777(可读可写可执行)。...

owenzhang24
23分钟前
41
0
教你如何在CentOS7系统上安装postgreSQL11

本文教你如何在CentOS7系统上安装postgreSQL11。 1.添加PostgreSQL Yum存储库 sudo yum install https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-7-x86_64/pgdg-centos11-11-......

Linux就该这么学
30分钟前
51
0
欧盟将禁止公共场所人脸识别:谷歌支持,微软反对

   来源:新浪、VB   近日,彭博社披露的一份欧盟人工智能“白皮书”草案显示,欧盟计划对人工智能开发者提出具有法律约束力的新要求,以确保现代科技的开发和使用符合道德规范。    ...

水果黄瓜
33分钟前
23
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部