error 处理机制

默认 ansible 在遇到 error 会立刻停止 playbook

[root@control ansible]# cat ~/ansible/error.yml
---
- hosts: test
tasks:
- name: start a service that does not exist.
service:
name: hehe
state: started
- name: touch a file
file:
path: tmp/service.txt
state: touch

如果第一个任务不能成功执行,那么剧本就会中止,不会执行后续任务。

如果想要在第一个任务执行失败之后,继续执行后续任务,那么……

可以在剧本中添加:ignore_errors: true,可以忽略错误,继续后续的任务

[root@control ansible]# cat ~/ansible/error.yml
---
- hosts: test
tasks:
- name: start a service that does not exist.
service:
name: hehe
state: started
ignore_errors: true
- name: touch a file.
file:
path: /tmp/service.txt
state: touch

以上配置针对是某个任务,如果针对剧本全局忽略错误,可以进行如下配置.

[root@control ansible]# cat ~/ansible/error.yml
---
- hosts: test
ignore_errors: true
tasks:
- name: start a service that does not exist.
service:
name: hehe
state: started
- name: touch a file.
file:
path: /tmp/service.txt
state: touch

handlers

当某个任务需要依赖其他任务怎么办?

  • 可以通过handlers定义一组任务
  • 仅当某个任务触发(notify)handlers时才执行相应的任务
  • 如果有多个notify触发执行handlers任务,也仅执行一次
  • 仅当任务的执行状态为changed时,handlers任务才执行
  • handlers任务在所有其他任务都执行后才执行
[root@control ansible]# cat ~/ansible/handlers.yml
---
- hosts: test
tasks:
- name: create directory.
file:
path: /tmp/parents/subdir/
state: directory
notify: touch file
handlers:
- name: touch file
file:
path: /tmp/parents/subdir/new.txt
state: touch

多次执行playbook该任务状态不再是changed

notify后面名称必须和handlers中的任务名称一致

when 条件判断

  • when可以定义判断条件,条件为真时才执行某个任务
  • 常见条件操作符如:==!=>>=<<=
  • 多个条件可以使用andor分割
  • when表达式中调用变量不要使用{{ }}

1、远程主机剩余内存不足700M则关闭NetworkManager

[root@control ansible]# cat ~/ansible/when_1.yml
---
- hosts: test
tasks:
- name: check memory size.
service:
name: NetworkManager
state: stopped
when: ansible_memfree_mb < 700

2、判断操作系统是RedHat8则创建测试文件(支持多行输入,不保留换行符)

[root@control ansible]# cat ~/ansible/when_2.yml
---
- hosts: test
tasks:
- name: touch a file
file:
path: /tmp/when.txt
state: touch
when: >
ansible_distribution == "RedHat"
and
ansible_distribution_major_version == "8"

block 任务块

使用block可以将多个任务合并为一个组

[root@control ansible]# cat ~/ansible/block_1.yml
---
- hosts: test
tasks:
- name: define a group of tasks.
block:
- name: install httpd
yum:
name: httpd
state: present
- name: start httpd
service:
name: httpd
state: started
when: ansible_distribution == "RedHat"

rescue 定义block任务执行失败时要执行的其他任务

always 定义无论block任务是否成功,都要执行的任务

[root@control ansible]# cat ~/ansible/block_2.yml
---
- hosts: test
tasks:
- block:
- name: touch a file test1.txt
file:
path: /tmp/test1.txt
state: touch
rescue:
- name: touch a file test2.txt
file:
path: /tmp/test2.txt
state: touch
always:
- name: touch a file test3.txt
file:
path: /tmp/test3.txt
state: touch

loop 循环

1、循环创建多个目录

[root@control ansible]# cat ~/ansible/simple_loop.yml
---
- hosts: test
tasks:
- name: mkdir multi directory.
file:
path: /tmp/{{ item }}
state: directory
loop:
- School
- Legend
- Life

item是关键字

2、循环创建多个用户

[root@control ansible]# cat ~/ansible/complex_loop.yml
---
- hosts: test
tasks:
- name: create multi user.
user:
name: "{{ item.iname }}"
password: "{{ item.ipass | password_hash('sha512') }}"
loop:
- { iname: 'term', ipass: '123456' }
- { iname: 'amy', ipass: '654321' }

Ansible - [09] 高级语法的更多相关文章

  1. tn文本分析语言(三):高级语法

    标签(空格分隔): 未分类 高级操作 1.脚本表达式 用双引号包含的脚本被称为脚本表达式,目前支持嵌入Python. 脚本表达式只能在顺序表达式中使用.代码可以在三个位置存在: |位置|功能|例子| ...

  2. Swift高级语法学习总结(转)

    Swift高级语法学习总结 1.函数 1.1 func funcNmae()->(){} 这样就定义了一个函数,它的参数为空,返回值为空,如果有参数和返回值直接写在两个括号里就可以了 1.2 参 ...

  3. CSS 高级语法 ---- 继承和选择器的分组

    1. 选择器的分组 —————————————————————————   可以对选择器进行分组,被分组的选择器享用共同的声明.   h1,h2,h3,h4,h5,h6 { color: green; ...

  4. Swift高级语法学习总结

    Swift基础语法学习总结Swift高级语法学习总结Swift语法总结补充(一) 1.函数 1.1 func funcNmae()->(){} 这样就定义了一个函数,它的参数为空,返回值为空,如 ...

  5. C++ 高级语法学习与总结(代码实例)

     C++11增加了许多的特性,auto就是一个很明显的例子.  还有就是typedid()获取数据变量的类型 看下面简短的代码: atuo: 很像java中的加强for循环..... //获取一个数据 ...

  6. Python自动化 【第七篇】:Python基础-面向对象高级语法、异常处理、Scoket开发基础

    本节内容: 1.     面向对象高级语法部分 1.1   静态方法.类方法.属性方法 1.2   类的特殊方法 1.3   反射 2.     异常处理 3.     Socket开发基础 1.   ...

  7. iOS开发——语法篇OC篇&高级语法精讲二

    Objective高级语法精讲二 Objective-C是基于C语言加入了面向对象特性和消息转发机制的动态语言,这意味着它不仅需要一个编译器,还需要Runtime系统来动态创建类和对象,进行消息发送和 ...

  8. iOS开发——语法篇OC篇&高级语法精讲

    高级语法精讲 一.NSSet.NSMutableSet集合的介绍 1)NSSet.NSMutableSet集合,元素是无序的,不能有重复的值. 2)用实例方法创建一个不可变集合对象 例如: //宏定义 ...

  9. iOS开发——OC篇&OC高级语法

    iOS开发高级语法之分类,拓展,协议,代码块详解 一:分类 什么是分类Category? 分类就是类的补充和扩展部分 补充和扩展的每个部分就是分类 分类本质上是类的一部分 分类的定义 分类也是以代码的 ...

  10. Scala进阶之路-Scala高级语法之隐式(implicit)详解

    Scala进阶之路-Scala高级语法之隐式(implicit)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们调用别人的框架,发现少了一些方法,需要添加,但是让别人为你一 ...

随机推荐

  1. 【分块】LibreOJ 6282 数列分块入门6

    题目 https://loj.ac/p/6282 题解 数据范围 \(1 \leq n \leq 10^5\),因此进行分块最多分 \(\sqrt{10^5} ≈ 318\) 块.且数据是随机生成的, ...

  2. 【Amadeus原创】Docker安装wikijs wiki系统

    拉取mysql8的镜像并运行 docker pull mysql docker run -d -v /data/mysql/data:/var/lib/mysql -v /data/mysql/con ...

  3. FineReport其他js记录

    1.js修改日期组件 背景色 边框 setTimeout(function () { var color = "#092347"; var fontColor = "wh ...

  4. kubernetes上报Pod已用内存不准问题分析

    1.问题描述: 经常有业务反馈在使用容器云平台过程中监控展示的业务使用内存不准,分析了下kubernetes采集Pod内存使用的实现原理以及相应的解决思路 2.问题分析: 2.1 问题排查: 监控数据 ...

  5. [转]CopyPlugin Invalid Options options should be array ValidationError: CopyPlugin Invalid Options

    这个错误是使用webpack的一个plugin出现的错误.这个plugin是copy-webpack-plugin我把文档的例子复制,然后就报了这个错误.文档的例子: const CopyPlugin ...

  6. 海量用户IM聊天室的架构设计与实践

    本文由网易云信资深服务端开发工程师曹佳俊分享,本文收录时有内容修订和重新排版. 1.引言 聊天室是一类非常重要的 IM 业务形态,不同于单聊和群聊,聊天室是一种大规模的实时消息分发系统.聊天室有多种技 ...

  7. 阿里IM技术分享(六):闲鱼亿级IM消息系统的离线推送到达率优化

    本文由阿里闲鱼技术团队逸昂分享,原题"消息链路优化之弱感知链路优化",有修订和改动,感谢作者的分享. 1.引言 闲鱼的IM消息系统作为买家与卖家的沟通工具,增进理解.促进信任,对闲 ...

  8. 使用format_obproxy_digest_log工具分析obproxy网络层耗时SQL

    之前写过一个博客,介绍 ob_tools包 来实施抓取 observer 层的 gv$ob_sql_audit 的SQL,还提供一些分析SQL来通过不同维度分析缓慢的业务SQL语句,免得和应用扯皮说数 ...

  9. 《深入理解Mybatis原理》MyBatis的sqlSession执行流程

    sqlSessionFactory 与 SqlSession 正如其名,Sqlsession对应着一次数据库会话.由于数据库会话不是永久的,因此Sqlsession的生命周期也不应该是永久的,相反,在 ...

  10. Mysql连接报错排查解决记录

    Mysql连接报错排查解决记录 背景: 系统:uos server-1060e ​ 运行环境kvm虚拟机 ​ mysql版本:5.7.44, for Linux (x86_64) 问题现象: 宿主机重 ...