Playbook核心元素

Hosts #执行的远程主机列表 Tasks #任务集 Variables #内置变量或自定义变量在playbook中调用 Templates #模板,可替换模板文件中的变量并实现一些简单逻辑的文件 Handlers 和 notity #结合使用,由特定条件触发的操作,满足条件方才执行,否则不执行 tags #标签 指定某条任务执行,用于选择运行playbook中的部分代码。 ansible具有幂等性,因此会自动跳过没有变化的部分,即便如此,有些代码为测试其确实没有发生变化的时间依然会非常地长。此时,如果确信其没有变化,就可以通过tags跳过此些代码片断

remote_user: #可用于Host和task中。也可以通过指定其通过sudo的方式在远程主机上执行任务,其可用于play全局或某任务;此外,甚至可以在sudo时使用sudo_user指定sudo时切换的用户

task列表和action play的主体部分是task list, task list中的各任务按次序逐个在hosts中指定 的所有主机上执行,即在所有主机上完成第一个任务后,再开始第二个任务 task的目的是使用指定的参数执行模块,而在模块参数中可以使用变量。模 块执行是幂等的,这意味着多次执行是安全的,因为其结果均一致 每个task都应该有其name,用于playbook的执行结果输出,建议其内容能 清晰地描述任务执行步骤。如果未提供name,则action的结果将用于输出

Handlers 是task列表,这些task与前述的task并没有本质上的不同,用于当关注的资源发 生变化时,才会采取一定的操作 Notify此action可用于在每个play的最后被触发,这样可避免多次有改变发生 时每次都执行指定的操作,仅在所有的变化发生完成后一次性地执行指定操作。 在notify中列出的操作称为handler,也即notify中调用handler中定义的操作


Ansible PlayBook应用.

PlayBook是由一个或多个“play"组成的列表,play的主要功能是为ansible中的task定义好的角色,指定剧本对应的服务器组。

Task是一个任务,task调用ansible各种模块module,将多个play组织在一个PlayBook剧本中,然后组成一个非常完整的流程控制集合。

基于Ansible PlayBook还可以收集命令,创建任务集,大大降低管理工作的复杂程度,PlayBook采用YAML语法结构,易于阅读,方便配置。

YAML(yet another markup language)是一种直观的能被 电脑识别的数据序列化格式,是一具容易阅读,容易和脚本语言交互,用来表达资料序列的编程语言。这参考了其它多种语言,包括XML、C语言、Python、Perl以及电子邮件格式FRC2822,是类似于标准通用标记语言的子集XML的数据描述语言,但语法比XML简单。YAML使用空白字符和分行来分隔资料,适用于grep、Python、Perl、Ruby操作。

YAML语言特性

A. 可读性强

B. 和脚本语言的交互性好

C. 使用实理语言的数据类型

D. 一致的信息模型

E. 易于实现

F. 可以基于流来处理

G. 可扩展性强

PlayBooks组件包括内容如下:

A. target:定义PlayBook使用的远程主机组。

\1. hosts:定义远程主机组

\2. user:执行该任务的用户

\3. sudo:设置为yes的时候,执行任务的时候使用root权限

\4. sudo_user:指定sudo普通用户

\5. connection:默认基于SSH连接客户端

\6. gather_facks:获取远程主机facts基础信息

B. variable:定义PlayBook使用的变量。

\1. vars:定义格式,变量名:变量值

\2. vars_files:指定变量文件

\3. vars_prompt:用户交互模式自定义变量

\4. setup:模块获取远程主机的值

C. task:定义远程主机上执行的任务列表。

\1. name:任务显示名称也即屏幕显示信息

\2. action:定义执行的动作

\3. copy:复制本地文件到远程主机

\4. template:复制本地文件到远程主机,可以引用本地变量

\5. service:定义服务的状态

D. handler:定义task执行完成以后需要调用的任务,例如配置文件被改动,则启用handler任务重启相关联的服务。

YAML语法简介

 在单一档案中,可用连续三个连字号(——)区分多个档案。另外,还有选择性的连续三 个点号( ... )用来表示档案结尾

 次行开始正常写Playbook的内容,一般建议写明该Playbook的功能

 使用#号注释代码

 缩进必须是统一的,不能空格和tab混用

 缩进的级别也必须是一致的,同样的缩进代表同样的级别,程序判别配置的级别是通过 缩进结合换行来实现的

 YAML文件内容是区别大小写的, k/v的值均需大小写敏感

 多个k/v可同行写也可换行写,同行使用,分隔

 v可是个字符串,也可是另一个列表

 一个完整的代码块功能需最少元素需包括 name 和 task

 一个name只能包括一个task

 YAML文件扩展名通常为yml或yaml