Ansible_palybook介绍及应用
1 playbook(剧本)介绍
- playbook是一个不同于使用Ansible命令执行方式的模式,简单来说,playbook是一个非常简单的配置管理多主机部署系统,不同于任何已经存在的模式,可以作为一个适合部署复杂应用程序基础。Playbook可以制定配置,可以按照指定的操作步骤有序执行,支持同步和异步方式。值得注意的是-playbook是通过YAML格式来进行描述定义的
- play是针对清单中选定的主机运行的一组有序任务。playbook是一个文本文件,其中包含由一个或多个按特定顺序运行的play组成的列表
##1.2核心元素
Tasks: //任务,有模块定义的操作列表
Variables: // 变量
Templates: //模块,即使用模块语法的文件
Handlers: //处理器,当某个条件满足时,出发执行的操作
Roles: //角色
1.3 主要组成部分介绍
1.3.1 hosts和users
在playnook中的每一个play都可以选择在那些服务器和以什么用户完成,hosts一行可以是一个主机组,主机,多个主机,中间以冒号分隔开,可以使用通配模式
1.3.2 Tasks(任务)
- Play的主体部分是tasks列表中的个任务按次序逐个在hosts中指定的主机上执行,即在所有主机上完成第一个任务后在开始执行第二个任务。在运行playbook时(从上到下执行),如果一个hoist执行tasks失败,整个tasks都会回滚,修正playbook中的错误,然后重新执行
- 每一个task必须有一个名称name,这样在运行playbook时,从输出的任务执行信息中可以辨认出属于哪一个task
- ansible的自带模块中,command模块和shell模块无需使用key=value格式
1.3.3 Handlers(触发器)
- handlers也是一些task的列表,和一般的task并没有什么区别
- 是由通知者进行的notify,如果没有被notify,则Handlers不会执行,反则就会执行
- 不管多少个通知者进行notify,等到play中的所有task执行完成后,handlers也只会被执行一次
1.3.4 Templates(模板)
- Jinja是基于Python的模块引擎。template类是jinja的另一个重要组件,可以看作一个编译过的模块文件,用来生产目标文件,传递Python的变量给模块去替换模块中的标记
1.4 Playbook的语法结构
Playbook是以YAML格式编写的文本文件,通常使用扩展名yml保存。Playbook使用空格字符缩进来表示其数据结构。YAML对用于缩进的空格数量没有严格的要求,但有两个基本的规则
- 处于层次结构中同一级别的数据元素(例如同一列表中的项目)必须具有相同的缩进量
- 如果项目属于其他项目的子项,其缩进量必须大于父项
1.5 YAML编写技巧
-
缩进
YAML使用一个固定的缩进风格表示数据层关系,建议使用两个空格 -
冒号
冒号两边表示key和value -
短横杠
想要表示列表项,使用一个短横杠加一个空格。多个项使用同样的缩进级别作为同一列表的一部分
---