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