一、playbook简介
1、playbook与ad-hoc相比,是一种完全不同的运用。
2、playbook是一种简单的配置管理系统与多机器部署系统的基础,且非常适合于复杂应用的部署。
3、playbook中可以编排有序的执行过程,甚至于做到在多组机器间,来回有序的执行特别指定的步骤,并且可以同步或者异步的发起任务。
4、使用playbook可以方便的重用这些代码,可以移植到不同的机器上面。
5、ansible可以使用普通命令的方式管理主机,如果服务器数量多的话,配置信息比较多,一个一个的敲出来就有点繁琐了,还容易出错,这时可以使用ansible playbook 编写剧本,从而实现更加简便的方式实现任务处理的自动化与流程化。
6、playbook其实就像shell脚本一样,脚本是由多个命令组成,而playbook由多个任务,多个模块组成一个完整的流程控制集合。
二、playbook的语法
1、Playbook主要有以下四部分构成:
target:定义将要执行playbook的远程主机组
variable:定义playbook运行时需要使用的变量
task :定义将要在远程主机上执行的任务列表
handler:定义task执行完成以后需要调用的任务
2、playbook由YMAL语言编写,以下为playbook常用的YMAL格式:
- 文件的第一行应该以“—”三个连字符开始,表明YMAL文件的开始。
- 在同一行中,#之后的内容表示注释,类似于shell,python和ruby。
- YMAL中列表元素以“-”开头然后紧跟着一个空格,同一个列表中的元素应该保持相同的缩进。
3、一个字典是由一个简单的键:值的形式组成(这个冒号后面必须是一个空格):
下面是一个很基本的剧本(Playbook又称为剧本)
---
- hosts: web
remote_user: root
tasks:
- name: install httpd
yum: name=httpd state=installed
- name: add index file
copy: src=/root/index.html dest=/var/www/html/index.html
- name: start service
service: name=httpd state=started enabled=yes
解释:
--- #三个杠表示剧本文件的开头
- hosts: web #执行任务的主机列表,这里是给web主机组
remote_user: root #远程执行用户
tasks: #任务的开始
- name: install httpd #每一个tasks必须有一个名称name,可以理解为一个标记,执行时可以看到
yum: name=httpd state=installed #使用yum模块执行安装http的功能
- name: add index file
copy: src=/root/index.html dest=/var/www/html/index.html #使用copy模块复制主页文件
- name: start service
service: name=httpd state=started enabled=yes #使用service模块开启服务
其中要注意:
同级的缩进要对齐,hosts,remote_user,tasks 就是同级
每一个模块都使用key=value格式如remote_user: root 冒号后面有空格
remote_user: root 对应 key: value 如果不明白key=value 就记住模块后面等于值,写的时候冒号加空格
三、 剧本的使用
ansible-playbook install.yml
ansible-playbook(命令) install.yml(剧本文件) 一般直接命令加文件也可以