根据不同的操作系统安装apache
官方示例:
还可以使用括号,and , or对条件进行分组
也可以指定多条件为列表(and 并且)
条件运算
rsync服务端推送配置文件
rsync客户端推送脚本
通过register将命令执行结果保存至变量,然后通过when语句进行判断
2|0playbook循环语句
在之前的学习过程中,我们经常会有传送文件,创建目录之类的操作,创建2个目录就要写两个file模块来创建,如果要创建100个目录,我们需要写100个file模块???妈耶~~~~ 当然不是,只要有循环即可,减少重复性代码。
启动多个服务
定义变量循环
字典循环
1.创建用户
2.拷贝文件
3|0playbook handler
handler
用来执行某些条件下的任务,比如当配置文件发生变化的时候,通过notify触发handler去重启服务。
实践案例
练习:多个nginx配置文件的推送及触发器
注意:
1.无论多少个task通知了相同的handlers,handlers仅会在所有tasks结束后运行一次。
2.Handlers只有在其所在的任务被执行时,才会被运行;如果一个任务中定义了notify调用Handlers,但是由于条件判断等原因,该任务未被执行,那么Handlers同样不会被执行。
3.Handlers只会在每一个play的末尾运行一次;如果想在一个playbook中间运行Handlers,则需要使用meta模块来实现。例如: -meta: flush_handlers。
4.如果一个play在运行到调用Handlers的语句之前失败了,那么这个Handlers将不会被执行。我们可以使用meta模块的--force-handlers选项来强制执行Handlers,即使Handlers所在的play中途运行失败也能执行。
5.不能使用handlers替代tasks
4|0playbook任务标签
默认情况下,Ansible在执行一个playbook时,会执行playbook中定义的所有任务,Ansible的标签(tag)功能可以给单独任务甚至整个playbook打上标签,然后利用这些标签来指定要运行playbook中的个别任务,或不执行指定的任务。
打标签的方式
1.对一个task打一个标签
2.对一个task打多个标签
3.对多个task打一个标签
打完标签如何使用
-t:执行指定的tag标签任务
--skip-tags:执行--skip-tags之外的标签任务
使用-t指定tag
5|0playbook文件复用
在之前写playbook的过程中,我们发现,写多个playbook没有办法,一键执行,这样我们还要单个playbook挨个去执行,很鸡肋。所以在playbook中有一个功能,叫做include
用来动态调用task任务列表。
只调用task:include_tasks
调用整个task文件:include
(新版本:import_playbook)
在saltstack中,叫做top file
入口文件。
示例一:
示例二
示例三
6|0playbook忽略错误
默认playbook会检测task执行的返回状态,如果遇到错误则会立即终止playbook的后续task执行,然鹅有些时候playbook即使执行错误了也要让其继续执行。
加入参数:ignore_errors:yes 忽略错误
7|0playbook错误处理
如上所述,当task执行失败时,playbook将不再继续执行,包括如果在task中设置了handler也不会被执行。
但是我们可以采取强制措施...
强制调用handler
抑制changed
被管理主机没有发生变化,可以使用参数将change状态改为ok