Ansible - [09] 高级语法
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可以定义判断条件,条件为真时才执行某个任务
- 常见条件操作符如:
==、!=、>、>=、<、<= - 多个条件可以使用
and或or分割 - 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] 高级语法的更多相关文章
- tn文本分析语言(三):高级语法
标签(空格分隔): 未分类 高级操作 1.脚本表达式 用双引号包含的脚本被称为脚本表达式,目前支持嵌入Python. 脚本表达式只能在顺序表达式中使用.代码可以在三个位置存在: |位置|功能|例子| ...
- Swift高级语法学习总结(转)
Swift高级语法学习总结 1.函数 1.1 func funcNmae()->(){} 这样就定义了一个函数,它的参数为空,返回值为空,如果有参数和返回值直接写在两个括号里就可以了 1.2 参 ...
- CSS 高级语法 ---- 继承和选择器的分组
1. 选择器的分组 ————————————————————————— 可以对选择器进行分组,被分组的选择器享用共同的声明. h1,h2,h3,h4,h5,h6 { color: green; ...
- Swift高级语法学习总结
Swift基础语法学习总结Swift高级语法学习总结Swift语法总结补充(一) 1.函数 1.1 func funcNmae()->(){} 这样就定义了一个函数,它的参数为空,返回值为空,如 ...
- C++ 高级语法学习与总结(代码实例)
C++11增加了许多的特性,auto就是一个很明显的例子. 还有就是typedid()获取数据变量的类型 看下面简短的代码: atuo: 很像java中的加强for循环..... //获取一个数据 ...
- Python自动化 【第七篇】:Python基础-面向对象高级语法、异常处理、Scoket开发基础
本节内容: 1. 面向对象高级语法部分 1.1 静态方法.类方法.属性方法 1.2 类的特殊方法 1.3 反射 2. 异常处理 3. Socket开发基础 1. ...
- iOS开发——语法篇OC篇&高级语法精讲二
Objective高级语法精讲二 Objective-C是基于C语言加入了面向对象特性和消息转发机制的动态语言,这意味着它不仅需要一个编译器,还需要Runtime系统来动态创建类和对象,进行消息发送和 ...
- iOS开发——语法篇OC篇&高级语法精讲
高级语法精讲 一.NSSet.NSMutableSet集合的介绍 1)NSSet.NSMutableSet集合,元素是无序的,不能有重复的值. 2)用实例方法创建一个不可变集合对象 例如: //宏定义 ...
- iOS开发——OC篇&OC高级语法
iOS开发高级语法之分类,拓展,协议,代码块详解 一:分类 什么是分类Category? 分类就是类的补充和扩展部分 补充和扩展的每个部分就是分类 分类本质上是类的一部分 分类的定义 分类也是以代码的 ...
- Scala进阶之路-Scala高级语法之隐式(implicit)详解
Scala进阶之路-Scala高级语法之隐式(implicit)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们调用别人的框架,发现少了一些方法,需要添加,但是让别人为你一 ...
随机推荐
- 2000 Star,是时候为我的开源项目更新下功能了
哈喽啊,我是阿朗,马上就要年末了,已经半年多没有更新文章了.年初定的计划早已经忘的一干二净.再不捡起来一点东西,就要2025年了. 要写点东西了. 你是一个博客撰写专家,你擅长开发领域,你喜欢使用通俗 ...
- LeetCode题集-9 - 回文数
题目:给你一个整数 x ,如果 x 是一个回文整数,返回 true :否则,返回 false . 回文数 是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 例如,121 是回文,而 123 不 ...
- 【C#】【报错解决】找不到请求的Net Framework Data ProVider。可能没有安装。
如题报错截图如上,解决方法如下 第一步:找到[引用]中的MySql.Data中的版本号 第二步,在Web.config中添加如下配置 <system.data> <DbProvide ...
- 基于Three.js的大屏3D地图(一)
依赖安装 yarn add three yarn add @types/three yarn add d3-geo three库安装后在node_modules下其还包含核心three/src和插件t ...
- 将现有的系统环境文件打包成Docker镜像文件
一.现有A系统Centos7操作: 备注:A系统里最好不安装Docker,否则会报错 卸载不必要软件包 yum remove -y iwl* *firmware* --exclude=kernel-f ...
- Qt数据库应用19-图片转pdf
一.前言 用户的需求真的是千奇百怪,刚做完不同页面横向纵向排版的需求,又来个需要图片转pdf的需求,提供静态函数直接使用. 经过这么些年的社会的毒打,我的原则是:用户是上帝和大爷,尽量站在用户的角度换 ...
- Qt开发经验小技巧191-195
关于QList队列的处理中,我们最常用的就是调用append函数添加item,往前插入item很多人第一印象就是调用insert(0,xxx)来插入,其实QList完全提供了往前追加item的函数pr ...
- Qt开源作品2-视频流播放vlc内核
一.前言 上一个作品是ffmpeg内核做的,由于ffmpeg太过于强大,很多初学者会看的云里雾里懵逼状态,也有很多用户只需要一个简单的播放视频流即可,根本不需要涉及到负责的解码转码等,于是vlc就上场 ...
- [转]在WorldWind中加入*.x格式的三维模型
Nasa支持的WorldWind项目最近推出了1.4RC5版,可以加入三维模型,效果如下图所示: 点击查看大图 WW1.4对XML配置文件增加了许多新的元素,其中ModelFeature就是用来增加三 ...
- CH32V203F6P6-TSSOP20测试之02---点灯成功
一.问题思考 直接用官方提供的例程,为何下载程序后没有什么响应,难道自己设计的电路有什么不妥? 于是,对于电路进行具体分析,结果发现: 第一.官方的BOOT0采用杜邦线连接,在芯片手册好像找不到关于B ...