1.ignore_errors-----忽略错误,继续执行后续任务
一个剧本里边可能存在多个任务,一旦有一个任务中间出错都会导致后续任务的终止,所以ansible有相应的错误处理机制,ignore_errors参数就是针对某一个任务忽略错误的。
例子1:
---
- hosts: test1
ignore_errors: true #针对playbook全局忽略错误
tasks:
- name: 开启一个服务
service:
name: hello
stat: started
例子2:
---
- hosts: test1
tasks:
- name: 开启一个服务
service:
name: hello
stat: started
ignore_errors: true #针对某一任务忽略错误
- name: 复制文件
copy:
src: /tmp/service.txt
dest: /etc/service.txt
2.handlers----解决依赖性的任务
剧本中的某个任务执行可能需要依赖于其他任务先执行,他是一个依赖关系,自己不单独执行,这种情况下就需要用到notify触发执行handlers任务。
注意:1.仅当任务执行状态为changed时handlers任务才执行。
2.如果有多个notify触发执行handlers任务,也仅执行一次。
3.handlers任务在所有其他任务都执行后才执行。
第一次执行:
第二次执行:
3.when----条件判断
定义判断条件,条件为真时才执行某个任务。
1.常见的操作符如下: ==、!= 、>、>=、<=
2.多个条件可以用and或or分割
3.when表达式中调用变量不要使用{{}}
4.>支持多行输入,不保留换行符
例子如下:
4.block任务块---可以将多个任务合并成一个组
1.结合when判断语句使用
剧本如图:
执行后的结果如下:
2.rescue 定义block任务执行失败时要执行其他任务
always定义无论block任务是否成功,都要执行的任务
剧本如图:
执行结果如下:
5.loop循环-----类似于shell脚本中的for循环
# loop实例
---
- hosts: test1
tasks:
- name: 创建用户
user:
name: "{{item.iname}}" #item是关键字,不可以改变名称
password: "{{item.ipass| password_hash('sha512')}}"
loop:
- {iname: 'term', ipass: '123456'}
- {iname: 'amy', ipass: '654321'}
~
运行结果如下: