一、playbook简介
- Playbooks是ansible执行任务的另一种完全不同的方式,并且功能特别强大。
playbooks是真正简单的配置管理和多机器部署系统的基础,并且非常适合部署复杂的应用程序。 - 官网:playbook官网
二、playbook基本语法
playbook使用yaml语法
yaml语法讲解:yaml语法讲解
yaml语法检验:yaml语法检验(网络检测工具,敏感信息不要输入)样本示例:官网示例
-
先举个栗子
nginx.yml--- - hosts: all tasks: - name: Install nginx yum: name=nginx state=present - name: template nginx.conf template: src=./nginx.conf.j2 dest=/etc/nginx/nginx.conf owner=root group=root mode=0644 validate='nginx -t -c %s' notify: - Restart Nginx Service handlers: - name: Restart Nginx Service service: name=nginx state=restarted
- 1,第一行表示是YAML文件,非必须
- 2,- hosts:后面是主机的组命
- 3,tasks是任务动作的集合,可以有多个任务
- 4,name是操作的描述或注释
- 5,yum是使用yum模块执行,后面跟着一些本模块的参数
- 6,template是模块,src是源文件(jinja2语法的模板文件以 .j2后缀),dest是生成的目标文件。
- 7,notify执行需要有触发条件,如果文件改变,则会触发notify执行(和handlers组合使用,name和上面必须一样)
- 8,service模块,后面是参数
检查yml文件语法是否正确:
ansible-playbook nginx.yml --syntax-check
一般都是缩进错误,空格错误。一定要使用空格,不要使用tab键
A YAML file cannot contain tabs as indentation
yaml文件不能包含制表符作为缩进
执行:
ansible-playbook -i hosts nginx.yml
三、playbook常用内置词汇说明
remote_user: root 【远程ssh认证用户】
sudo: yes 【设置"playbook sudo"操作】
sudo_user: admin 【设置"playbook sudo"操作】
gather_facts: no 【设置facts信息收集】
accelerate: no 【设置accelerate模式(在客户端开启守护进程)】
accelerate_port: 8088 【设置accelerate端口】
max_fail_percentage: 30 【设置任务失败比例,超过30%就停止】
serial: 15 【设置并发数目】
vars:
nginx_port: 80 【设置变量,可通过模板使用变量。】
vars_files:
- "vars.yml" 【 变量的文件】
- ["vars1.yml","vars2.yml"] 【使用列表可传多个文件】
roles:
- docker 【角色】
tasks:
- include:tasks.yml 【引入tasks,也可单独写入任务】
post_tasks:
-name: post_taske 【运行之后的tasks】
handles:
- include:handlers.yml 【由 notify 触发】
四、playbook中的roles角色
官网介绍:roles官网
如果任务多,就可以分别写到不同的角色里。每一个角色再写自己的tasks。这样也好管理。再以roles的方式写入playbook,执行任务。这样在总任务文件中就可以不写tasks了,起到了解耦的作用。
-
简单示例
site.yml:统一入口文件
roles/nginx/tasks/main.yml :角色的入口文件
site.yml和roles同级目录
site.yml中:--- - hosts: ceshi gather_facts: no roles: - nginx
main.yml中:
--- - name: install nginx yum: name=nginx state=present - name: start service nginx service: name=nginx state=restarted
执行:ansible-playbook -i hosts site.yml
五、playbook变量与引用
官网:variables官网
-
(1)、在主机清单里定义变量
[ceshi:vars] key=value
-
(2)、在playbook中定义变量
vars: key:value
-
(3)、在命令行使用变量使用
-e "key=value"
-
(4)、在文件中定义并引用
vars.yml--- key1: value1 key2: value2
playbook中
vars_files: - "vars.yml"
未完待续。。。