一.循环
循环迭代任务
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传给配置文件
触发器触发执行重启
四.处理失败任务
- 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 任务失败依旧执行下面的任务
- 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
有触发过程触发器依然触发
- 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不运行