一,使用playbook的好处
Playbook 是由一个或多个play组成的列表,主要功能是将task定义好的角色归并为一组进行统一管理,也就是通过Ansible的模板将多个play组织在一个Playbook中运行。相当于shell脚本,shell脚本与linux普通命令之间的关系就像是playbook与ansible命令之间的关系。都是集中化的一键式部署,减少了工作中的繁琐简单或者是重复性的操作。
1,playbook的特点
- 易读的编排语言
- 适合配置管理和应用部署
- 非常适合部署复杂的工作
2,playbook格式(yaml语言)
playbook由YMAL语言编写。YAML参考了其他多种语言,包括:XML、C语言、Python、Perl等。MAL格式是类似于JSON的文件格式,便于人理解和阅读,同时便于书写。以下为playbook常用到的YMAL格式。
- YMAL中的列表元素以”-”开头然后紧跟着一个空格,后面为元素内容。就像这样- host。
- 同一个列表中的元素应该保持相同的缩进。否则会被当做错误处理。
- playbook中hosts,variables,roles,tasks等对象的表示方法都是键值中间以”:”分隔,”:”后面还要增加一个空格。
- 剧本以.yml后缀
3,palybook的核心元素
Playbook本身由以下各部分组成:
- (1)Hosts 运行指定任务的目标主机;
- 2)Tasks: 任务,即调用模块完成的操作;
- (3)Variables: 变量;内置变量或自定义变量在playbook中调用
- (4)Templates: 模板;使用模板语法的文件,比如说是配置文件等等
- (5)Handles: 处理器,与notity结合使用,当某条件满足时,触发执行的操作;
- (6)Roles: 角色
二,任务列表的元素介绍
Playbook的主体是任务列表。任务列表中的任务依照次序逐个在hosts中指定的所有主机上执行,如果发生错误会将所有已执行任务回滚。
1,模块,模块参数格式
task的任务是按照指定的参数去执行模块。
格式为:
task
- name: 执行项名称
执行的动作: 条件或选项
例如:
tasks:
- name: test connection
ping: ping 20.0.0.20
在Ansible自带模块中,command模块和shell模块只需要一个列表定义即可,无需使用key=value格式。
2.Handles和tags的使用
Handlers用于当关注的资源发生变化时所采取的操作。使用tags让用户选择跳过没有变化的代码,只运行Playbook中发生变化的部分代码。
(1) 某任务的状态在运行后为changed时,可通过“notify”通知给相应的handlers;
(2) 任务可以通过“tags“打标签,通过 ansible-playbook命令 使用 --tags选项能实现仅运行指定的tasks
vim /etc/ansible/nginx.yml
- hosts: nginx
remote_user: root
tasks:
- name:yum install epel-release -y #安装epel源
yum: name=epel-release state=latest
- name: yum install nginx -y #安装nginx
yum: name=nginx state=latest
- name: copy nginx.conf #拷贝配置文件
copy: src=/opt/nginx.conf dest=/etc/nginx/nginx.conf backup=yes
notify:
- reload #会触发handlers中名字为reload的任务
tags:
- reloadnginx
- name: start nginx #启动nginx服务
service: name=nginx state=started
tags:
- startnginx
handlers:
- name: reload #重载配置
service: name=nginx state=reloaded
执行:ansible-playbook nginx.yml
修改配置文件内容之后执行时调用标签ansible-playbook nginx.yml --tags= “reloadnginx”,就会跳过安装步骤直接重载配置文件并启动服务。