playbooks剧本
playbooks本身由以下各部分组成
- Tasks:任务,即通过task调用ansible的模板将多个操作组织在一个playbook中运行
- Variables:变量
- Template:模板
- Handlers:处理器,当changed状态条件满足时,(notify)触发执行的操作
- Roles:角色
定义、引用变量
指定远程主机sudo切换用户
when条件判断
在ansible中,提供的唯一一个通过的条件判断是when指令,当when指令的值为true时,则该任务执行,否则不执行该任务。
when一个比较常见的应用场景是实现跳过某个主机不执行任务或者只有满足条件的主机执行任务
迭代
ansible提供了很多中循环结构,一般都命名为with_items,作为等同于loop循环
Template模块
Jinja是基于Python的模板引擎。Template类是Jinja的一个重要组件,可以看作是一个编译过的模板文件,用来产生目标文本,传递Python的变量给模板去替换模板中的标记。
tags模块
可以在一个playbook中为某个或某些任务定义“标签”,在执行此playbook时通过ansible-playbook命令使用--tags选项能实现仅运行指定的tasks。
playbook还提供了一个特殊的tags为always。作用就是当使用always当tags的task时,无论执行哪一个tags时,定义有always的tags都会执行。
Roles模块
Ansible为了层次化、结构化地组织Playbook,使用了角色(roles),roles可以根据层次型结构自动装载变量文件、task以及handlers等。简单来讲,roles就是通过分别将变量、文件、任务、模块及处理器放置于单独的目录中,并可以便捷地include它们。roles一般用于基于主机构建服务的场景中,但也可以用于构建守护进程等场景中。
roles 内各目录含义解释
●files
用来存放由 copy 模块或 script 模块调用的文件。
●templates
用来存放 jinjia2 模板,template 模块会自动在此目录中寻找 jinjia2 模板文件。
●tasks
此目录应当包含一个 main.yml 文件,用于定义此角色的任务列表,此文件可以使用 include 包含其它的位于此目录的 task 文件。
●handlers
此目录应当包含一个 main.yml 文件,用于定义此角色中触发条件时执行的动作。
●vars
此目录应当包含一个 main.yml 文件,用于定义此角色用到的变量。
●defaults
此目录应当包含一个 main.yml 文件,用于为当前角色设定默认变量。
●meta
此目录应当包含一个 main.yml 文件,用于定义此角色的特殊设定及其依赖关系。
在一个 playbook 中使用 roles 的步骤:
(1)创建以 roles 命名的目录
(2)创建全局变量目录(可选)
(3)在 roles 目录中分别创建以各角色名称命令的目录
(4)在每个角色命令的目录中分别创建files、handlers、tasks、templates、meta、defaults和vars目录,用不到的目录可以创建为空目录,也可以不创建
(5)在每个角色的 handlers、tasks、meta、defaults、vars 目录下创建 main.yml 文件,千万不能自定义文件名
(6)修改 site.yaml 文件,针对不同主机去调用不同的角色
(7)运行 ansible-playbook
简述Ansible角色
数据中心各种不同类型的主机,如web服务器,数据库服务器,基于开发环境的服务器。随着时间的推移,具有处理所有这些情况的任务和人员的ansible playbook将变得庞大而复杂
- 角色允许将复杂的剧本组织成独立的、更小的剧本和文件
- 角色提供了一种从外部文件加载任务、处理程序和变量的方法
- 角色也可关联和引用静态的文件和模板
- 角色可以编写成满足普通用途需求,并且被重复利用
- 定义角色的文件具有特定的名称,并以严格的目录结构进行组织