如何通过Ansible-playbook实现自动化应用部署?
摘要:前面已经介绍过Ansible的安装配置及常见模块的使用 --《Linux下使用Ansible处理批量操作》 Palybook简介 palybook是由一个或多个paly组成的列表,play的主要功能在于将事先归并为一组的主机装扮成事先通过a
前面已经介绍过Ansible的安装配置及常见模块的使用 --《Linux下使用Ansible处理批量操作》
Palybook简介
palybook是由一个或多个paly组成的列表,play的主要功能在于将事先归并为一组的主机装扮成事先通过ansible中的task定义好的角色。从根本上来讲,所谓 task 无非是调用 ansible 的一个 module。将多个play组织在一个 playbook 中,即可以让它们联同起来按事先编排好的机制同唱一台大戏。
一个playbook由以下几个部分组成
hosts:运行执行任务(task)的目标主机。
remote_user:在远程主机上执行任务的用户。
tasks:任务集。
varniables: 内置变量或自定义变量在playbook中调用,变量替换{{ variable_name }}。
templates:模板,即使用模板语法的文件,比如配置文件等,使用jinja2语法。
handlers:和notity结合使用,由特定条件触发的操作,满足条件方才执行,否则不执行。
tags:标签,指定某条任务执行,用于选择运行playbook中的部分代码。
注意:
gather_facts是一个play级别的指令设置,是负责收集目标主机信息的任务,由setup模块提供。默认情况下,每个play都会先执行这个特殊的任务,收集完信息之后才开始执行其它任务。但是,收集目标主机信息的效率很低,如果能够确保playbook中不会使用到所收集的信息,可以显式指定gather_facts: no来禁止这个默认执行的收集任务。
handler用来执行某些条件下的任务,比如当配置文件发生变化的时候,通过notify触发handler去重启服务。在saltstack中也有类似的触发器,写法相对Ansible简单,只需要watch,配置文件即可。
为什么引入Playbook?
playBook功能比ad-hoc更全,是对ad-hoc的一种编排。
playBook能很好的控制先后执行顺序,以及依赖关系。
playBook语法展现更加的直观。
playbook可以持久使用,ad-hoc无法持久使用。
YAML的基本语法规则
playbook文件扩展名可以是yaml,也可以是yml。使用“#”号表示注释至行尾。
在playbook文件中,可以连续三个减号(---)区分多个play。还有选择性的连续三个点(...)用来表示play的结尾,也可省略。
第二行开始正常写playbook的内容,一般都会写上描述该playbook的功能。建议尽量为每个play和每个task都命名,且名称具有唯一性。
只允许使用空格,缩进的级别必须是一致的,同样的缩进代表同样的级别,不能用Tab键缩进;程序判别配置的级别是通过缩进结合换行实现的。
YAML文件内容是区分大小写的,key/value的值均需大小写敏感。多个key/value可同行写也可换行写。同行使用分号(:)分隔,换行写需要以减号(-)分隔。
YAML支持以下常用几种数据类型
标量:单个的、不可再分的值 ;不可在分的量。包括字符串,布尔值,整数,浮点数,Null,时间,日期。key对应value
对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
三种常见的数据格式
XML:Extensible Markup Language,可扩展标记语言,可用于数据交换和配置。
JSON:JavaScript Object Notation, JavaScript 对象表记法,主要用来数据交换或配置,不支持注释。
YAML:YAML Ain't Markup Language YAML 不是一种标记语言, 主要用来配置,大小写敏感,不支持tab。
