Ansible中的任务控制关键字
摘要:本文介绍了Ansible自动化工具中的关键控制结构。主要包括:1)循环(loop)和条件(when)的使用方法及其组合应用;2)处理程序(handler)的概念及通过notify触发执行的机制;3)通过change_when和failed_when修改任务返回值;4)块(block)结构及其三种类型(普通块、救援块、始终运行块)的功能和使用场景。这些控制结构为Ansible提供了灵活的流程控
一、结构控制
循环(loop):该关键字会使所在的task循环,该task中的item变量在每次循环都会迭代loop中的每个值或变量。
例:
name: 打印列表
debug:
msg: "当前输出是 {{ item }}"
loop:
- data1
- data2
- data3
输出:
当前输出是data1
当前输出是data2
当前输出是data3
条件(when):该关键字使得task仅在when内条件成立时才执行。
例:
name: 仅打印列表中的偶数
debug:
msg: "{{ item }} 是偶数"
loop: [1, 2, 3, 4, 5]
when: item % 2 == 0
当一个task中同时有loop和when时,when会检查每一个循环,决定该循环是否执行。
二、处理程序(handler)
是一种特殊的任务,但是不会被动的运行,而是通过其他任务中的通知(notify)关键字条件调用。它被多次触发时,只会在该play中其他任务(task)运行完毕后运行一次。如果本应触发它的任务执行失败,则它会被跳过,可以通过force_handless强制调用。
例:
name: 修改配置文件
src: config.j2
dest: /etc/app.conf
notify: 重启服务
handlers:
name: 重启服务
service:
name:app
state: restarted
三、修改返回值
如果任务执行失败或更改了受控节点内容,默认会返回change和failure值。可以通过change_when和failed_when修改任务的返回值。
例:
name: 检查文件是否存在
stat:
path: /tmp/test.txt
register: file_info
failed_when: file_info.stat.exists == false
changed_when: file_info.stat.size > 0
四、块(block)
可以在任务中划分块,块有三种类型:
普通块(block):其下是任务的目标过程。
救援块(rescue):在block中命令失败时,改为运行rescue块的内容。
始终运行块(always):这个块中的命令总是执行。
例:
block:
name: 尝试安装软件包
apt:
name: nginx
state: present
rescue:
name: 安装失败时执行
debug:
msg: "安装失败,执行备用操作"
always:
name: 无论结果如何都执行
debug:
msg: "块执行完毕"
更多推荐
所有评论(0)