Ansible集群自动化维护(三)
主要内容:Ansible流程控制和调试方法
1 流程控制
流程控制分为
- handler
- when
- loop/with_items
1.1 handler触发器
应用场景:
- 一般用于分发配置文件的时候.
- 如果配置文件发生变化则重启服务,如果没有变化则重启
案例01:没有使用触发器,无论下发文件有没有改变,都需要重启服务
使用触发器之后
执行效果:
- 下发下去的文件识别“有改变”,则触发handler重启服务。
- 如文件没有改变,则不触发重启服务的handler
1.2 when判断
作用:
- 用于给ans运行的task(模块)设置条件,满足或不满足条件在运行对应的模块.
应用建议:
- when进行判断,一般与变量一起使用.
- when条件一般与facts变量或register变量一起使用
1.2.1 单个条件
案例:只想在web01上执行软件安装操作(以Debug msg方式模拟)
执行效果:
扩展1:
扩展2:
1.2.3 多个条件
当存在多个条件时,可以使用and和or
1.3 循环
1.3.1 循环单个变量
循环的两种方式:
常用于批量创建用户、文件夹、重启服务等
案例01:批量启动服务,rpcbind然后nfs
执行效果:
1.3.2 循环多个变量
循环多个变量的例子:批量添加用户
执行效果:
2 剧本调试
分为:
- 剧本单步执行:如何检查语法
- tag标签:如何运行指定task
- 忽略错误 :如中间发生错误是否往后继续
2.1 检查语法和单步执行
选项如下:
- -C –check 模拟运行,不作出改变,一些变量可能会提示报错,因为-C没有真正运行剧本.
- –syntax-check 只做语法检查,不运行.
- -step 单步运行. y执行这个task,n忽略这个task,c自动运行
2.2 tag标签
以部署nfs服务的playbool为例,剧本中打上了几处tags,代码如下:
在运行剧本的时候,可以通过:
- –skip-tags 排除指定的tags,如果多个标签通过”,”分割
2.3 忽略错误
运行剧本的时候,可能存在因为重复运行导致的错误提示,这些提示并非是真的错误,比如:目录已经存在,用
户已经存在。在这种情况下,我们可以通过使用ignore_errors
忽略错误,让剧本可以继续运行。
3 Jinjia2模板
应用场景:
在进行配置文件或普通文件的分发时,如果需要对文件中使用的变量进行解析,则需要使用jinja2文件,如nginx.conf.j2
文件需要使用template模块进行分发。图示如下:
3.1 基本使用
案例: 分发motd文件,motd文件中包含ans变量(目标文件是/etc/motd)
motd文件
剧本分发,分别使用templates和copy两种方法
查看执行结果:
3.2 条件判断(未实践)
根据主机名或ip或其他条件,生成不同的配置文件
3.3 循环语句(未实践)