ansible中的任务执行控制

一.循环

循环迭代任务

1. 简单循环

loop :

赋值列表

- value1
- value2
- ...
{{item}} ## 迭代变量名称

实例

---
- name : create file
hosts : 172.25.0.254
tasks :
- name : file module
file :
name : / mnt / {{item}}
state : present
loop :
- westos_file1
- westos_file2
2. 循环散列或字典列表
---
- name : create file
hosts : 172.25.0.254
tasks :
- name : file module
service :
name : "{{ item.name}}"
state : "{{ item.state }}"
loop :
- name : httpd
state : started
- name : vsftpd
state : stopped

二.条件

when :
- 条件 1
- 条件 2

条件判断

=
value == " 字符串 ",value == 数字
<
value < 数字
>
value > 数字
<=
value <= 数字
>=
value >= 数字
!=
value != 数字
is defined value value is defined
变量存在
is not defined value is not defined
变量不存在
in value is 变量为
not in value is not in value 变量不为
bool 变量 为 true value
value 的值为 true
bool 变量 false
not value value 的值为 false
value in value2 value 的值在 value2 列表中

多条条件组合

when :
条件 1 and 条件 2
- 条件 1
- 条件 2
when :
条件 1 or 条件 2
when : >
条件 1
or
条件 2
测试题 :
建立 playbook ~/ ansibles / lvm.yml 要求如下 :
* 建立大小为 1500M 名为 exam_lvm 的 lvm 在 westos 组中
* 如果 westos 不存在请输出 :
vg westos is not exist
* 如果 westos 大小不足 1500M 请输出 :
vg westos is less then 1500M
并建立 800M 大小的 lvm

check file 报错但下面都执行了

修改判断

三.触发器

notify :
触发器当遇到更改是触发 handlers
handlers :
触发器触发后执行的动作

实例

---
- name : create virtualhost for web server
hosts : 172.25.0.254
vars_files :
./ vhost_list.yml
tasks :
- name : create document
file :
path : "{{web2.document}}"
state : directory
- name : create vhost.conf
copy :
dest : / etc / httpd / conf.d / vhost.conf
content :
" < VirtualHost *: {{web1.port}} >\ n \ tServerName {{web1.name}} \ n \ tDocumentRoot
{{web1.document}} \ n \ tCustomLog logs / {{web1.name}}. log combined \ n </ VirtualHost >\ n \ n < VirtualHost *:
{{web2.port}} >\ n \ tServerName {{web2.name}} \ n \ tDocumentRoot {{web2.document}} \ n \ tCustomLog logs /
{{web2.name}}. log combined \ n </ VirtualHost > "
notify :
restart apache
handlers :
- name : restart apache
service :
name : httpd
state : restarted

复制主配置文件

无论文件是否改变都会执行重启

第一次执行

再次执行

加入触发器

将no传给配置文件

触发器触发执行重启

四.处理失败任务

  1. ignore_errors

作用 :

当 play 遇到任务失败是会终止
ignore_errors : yes
将会忽略任务失败使下面的任务继续运行

实例

- name : test
dnf :
name : westos
state : latest
ignore_errors : yes
- name : create file
file :
path : / mnt / westos
state : touch #

install 任务失败依旧执行下面的任务

  1. force_handlers#

作用 :

当任务失败后 play 被终止也会调用触发器进程

#example
---
- name : apache change port
hosts : 172.25.0.254
force_handlers : yes
vars :
http_port : 80
tasks :
- name : configure apache conf file
lineinfile :
path : / etc / httpd / conf / httpd.conf
regexp : " ^ Listen"
line : "Listen {{ http_port }}"
notify : restart apache
- name : install error
dnf :
name : westos
state : latest
handlers :
- name : restart apache
service :
name : httpd
state : restarted
enabled : yes

force_handlers

有触发过程触发器依然触发

  1. changed_when

作用 :

控制任务在何时报告它已进行更改

---
- name : apache change port
hosts : 172.25.0.254
force_handlers : yes
vars :
http_port : 8080
tasks :
- name : configure apache conf file
lineinfile :
path : / etc / httpd / conf / httpd.conf
regexp : " ^ Listen"
line : "Listen {{ http_port }}"
changed_when : true
notify : restart apache
handlers :
- name : restart apache
service :
name : httpd
state : restarted
enabled : yes

文件不被修改触发器不执行

强制更改

每次运行都会触发

强制视为不更改

4. failed_when#

当符合条件时强制任务失败

---
- name : test
hosts : 172.25.0.254
tasks :
- name : shell
shell : echo hello register : westos
failed_when : " 'hello' in westos.stdout"

强制该play执行失败

5. block#

block : ## 定义要运行的任务
rescue :

定义当 block 句子中出现失败任务后运行的任务

always : ## 定义最终独立运行的任务

测试练习

建立 playbook ~/ westos.yml 要求如下 :
建立大小为 1500M 名为 / dev / vdb1 的设备
如果 / dev / vdb 不存在请输入 :
/ dev / vdb is not exist
如果 / dev / vdb 大小不足 2G 请输出 :
/ dev / vdb is less then 2G
并建立 800M 大小的 / dev / vdb1
此设备挂载到 / westos 上

block运行失败会运行rescue中的任务always总是运行

block运行成功rescue不运行

相关推荐
qq_383139843 小时前
ansible playbook安装nacos
ansible
Aimyon_364 天前
⾃动化运维利器 Ansible-Jinja2
运维·ansible
柒月VII5 天前
【Ansible常用命令+模块+Playbook+Roles】
linux·服务器·ansible
Linux运维技术栈5 天前
生产环境centos8 & Red Hat8部署ansible and 一键部署mysql两主两从ansible脚本预告
运维·数据库·mysql·自动化·ansible
Aimyon_365 天前
⾃动化运维利器 Ansible-最佳实战
linux·运维·ansible
饭桶也得吃饭5 天前
运维工具Ansible部署、配置
运维·服务器·ansible
陪小七许个愿5 天前
Ansible一键部署Kubernetes集群
容器·kubernetes·ansible
Aimyon_366 天前
⾃动化运维利器 Ansible-变量
运维·ansible
Aimyon_366 天前
⾃动化运维利器Ansible-基础
运维·windows·ansible
大风吹PP凉8 天前
38配置管理工具(如Ansible、Puppet、Chef)
linux·运维·服务器·ansible·puppet