组件 - playbook Playbook是Ansible的配置,部署,编排语言。他们可以被描述为一个需要希望远程主机执 行命令的方案,或者一组IT程序运行的命令集合。 当执行一些简单的改动时ansible命令是非常有用的,然而它真的作用在于它的脚本能力。 当对一台机器做环境初始化的时候往往需要不止做一件事情,这时使用playbook会更加适 合。通过playbook你可以一次在多台机器执行多个指令。通过这种预先设计的配置保持了机 器的配置统一,并很简单的执行日常任务。
YAML介绍 是一种标记语言 Ansible使用标准的YAML解析器,使用YAML文件语法即可书写playbook。 YAML是一个可读性高的用来表达资料序列的格式,YAML参考了其他多种语言,包括: XML、C语言、Python、Perl以及电子邮件格式RFC2822等。Clark Evans在2001首次发表了 这种语言。 YAML Ain’t Makup Language,即YAML不是XML。不过,在开发这种语言时,YAML的意思 是:Yet Another Makrup Language(仍是一种标记语言),其特性:YAML的可读性好、 YAML和脚本的交互性好、YAML有一个一致的信息模型、YAML易于实现、 YAML可以基于 流来处理、YAML表达能力强,扩展性好。更多的内容及规范参见www.yaml.org。
Playbooks 核心元素: Variables #变量元素,可传递给Tasks/Templates使用; { {}} Tasks #任务元素,由模块定义的操作的列表,即调用模块完成任务; Templates#模板元素,使用了模板语法的文本文件,可根据变量动态生成配置文 件; 有源文件,目标文件可设变量 Handlers #处理器元素,通常指在某事件满足时触发的操作; Roles #角色元素 把playbooks里的东西模块化
playbook的基础组件:
---
- hosts: test //要执行改剧本的主机
vars: //变量
http_port: 80
max_clients: 200
remote_user: root //指定以什么用户执行
tasks: // 下面的内容是tasks的列表
- name: ensure apache is at the latest version // 自定义的任务名
yum: name=httpd state=latest //任务执行的模块和动作
- name: write the apache config file
template: src=/srv/httpd.j2 dest=/etc/httpd.conf
notify: //定义角色执行完后下一步进行的操作,与下方组件handlers关联
- restart apache
- name: ensure apache is running
service: name=httpd state=started
handlers:
- name: restart apache
service: name=httpd state=restarted
name | 描述信息 每个剧本有很多play,每一个play都有一个name,每一个play都可以完成 一个任务, play相当于剧本里的剧情,每个tasks也是由name定义 |
---|---|
hosts | playbook中的每一个paly的目的都是为了让某个或某些以某个指定用户的身份执行任 务。hosts用于指定要执行指定任务的主机,其可以是一个或多个由冒号分割主机组。与命 令模式下的ansible匹配规则一样 |
user | remote_user则用于指定远程主机上的执行任务的用户,也可以使用user |
tasks | 任务列表 play的主体部分是task list. task list中的各任务按次序逐个在hosts中所有指定的主机上执 行,即在所有主机上完成第一个任务后再开始第二个。 |
vars | 有了这个标记才能定义变量 定义变量 |
vars_files | 定义变量文件 |
notify | 如果使用handler处理程序必须使用notify //触发器 任务执行结果如果是发生更改了的,则触发定义在handler的任务执行 |
handlers | 用于当前关注的资源发生变化时采取一定指定的操作 |
语法检测:
#ansible-playbook --syntax-check apache.yam
查询;play参数
ansible-playbook --list-tasks apache.xml
ansible-playbook --list-hosts apache.xml
ansible-playbook --list-tags apache.xml
主机(hosts)和用户(users)
Playbook中的每一个paly的目的都是为了让某个或某些主机以某个指定的用户的身份执行任务,hosts用于指定要执行任务的主机,其可以是一个或多个由冒号分隔主机组,这和前面章节ansible命令提到的的hosts使用一样的语法。remote_user则用于指定远程主机上的执行任务的用户,如上面示例中:
- hosts: test
remote_user: root
不过,remote_user也可用于各task中:
- hosts: test
remote_user: root
tasks:
- name: