playbook简介
playbook是ansible用于配置,部署,和管理被控节点的剧本。通过playbook的详细描述,执行其中的一系列tasks,可以让远端主机达到预期的状态。playbook就像Ansible控制器给被控节点列出的的一系列要做的事情,而被控节点必须要完成。
也可以这么理解,playbook 字面意思,即剧本,现实中由演员按照剧本表演,在Ansible中,这次由计算机进行表演,由计算机安装,部署应用,提供对外服务,以及组织计算机处理各种各样的事情。
Playbook使用场景
执行一些简单的任务,使用ad-hoc(调用各种模块,通过命令行来执行命令)命令可以方便的解决问题,但是有时一个设施过于复杂,需要大量的操作时候,执行的ad-hoc命令是不适合的,这时最好使用playbook,就像执行shell命令与写shell脚本一样,也可以理解为批处理任务,不过playbook有自己的语法格式。
playbook和shell脚本的不同:
ansinle的playbook在执行的过程中需要读取inventory清单并且读取配置文件,并且playbook有自己的语法格式。shell命令在执行的过程中不会读取清单。并且两者要完成的任务也是不一样的。
playbook由YAML(另一种标记语言,yet another markup language)语言编写。
yaml 格式通常以 yml 为扩展名,yaml 对于缩进量没有严格要求,但有两个基本原则:
1.处于同一层次结构中同一级别的数据元素必须具有相同的缩进量
2.如果项目属于其他项目的子项,其缩进量必须大于父项
下面是一些playbook编写的示例:
1、查看指定用户westos的临时命令(在命令行中写):
ansible -m user -a "name=westos uid=1000 state=present" 192.168.0.109
2、将1中的命令改写为 playbook的模式:
--- #文档的开始标记
- name: Configure User
hosts: 192.168.0.109 #可选,但是建议使用
tasks:
- name: Westos User
user:
name:westos
uid:1000
state:present
... #结束标记(通常省略)
play 本身是一个键值对集合,同一 play 中的键应当使用相同的缩进量
运行剧本:ansible-playbook user.yml
剧本内容:
---
- name: Setup Webserver
hosts: 192.168.0.109
tasks:
- name: http installe
yum:
name: httpd
state: latest
...
剧本内容:
---
- name: Enable Webserver
hosts: 192.168.0.109
tasks:
- name: Apache is enabled
service:
name: httpd
enabled: true
- name: Vsftpd is enabled
service:
name: vsftpd
enabled: true
...
剧本内容:
---
- name: Install and Start Apache
hosts: 192.168.0.109
tasks:
- name: Apache is present
yum:
name: httpd
state: present
- name: Change index.html
copy:
src: files/index.html #apache的发布页面的来源文件(自己写的)
dest: /var/www/html/index.html
- name: Start Apache
service:
name: httpd
state: started
enabled: true
...
剧本内容:
运行结果:
playbook中的默认发布页面的来源文件:自己新建的文件
查看apache的默认发布页面时记得关闭192.168.0.109的防火墙:
1、提高输出详细程度 :
ansible-playbook 默认输出不提供详细任务执行信息
-v参数提供详细过程,共四个级别:
-v #显示任务结果
-vv #显示任务结果和任务配置
-vvv #包含关于与受管主机的连接信息
-vvvv #增加连接插件相关的额外详细程度选项(包括受管主机上用于执行脚本的用户及所执行的脚本)
2、执行 playbool 前最好先进行语法检测
检测xxxxx.yml剧本是否有语法错误的命令:
ansible-playbook --syntax-check xxxxx.yml
3、执行空运行
空运行会报告执行这个 playbook 将会发生什么,但不会改变目标主机
ansible-playbook -C xxxxx.yml
---
- name: first play
hosts: 192.168.0.109
tasks:
- name: first task
yum:
name: httpd
status: present
- name: second task
service:
name: httpd
enabled: true
- name: second play
hosts: 192.168.0.109
tasks:
- name: first task
service:
name: maridb
enabled: true
...
1、剧本内容:
---
- name: Enabled Firewalld #第一个play,配置apache服务
hosts: 192.168.0.109
become: yes
tasks:
- name: apache and firewalld installed
yum: #检测 httpd 是否安装和是否是最新版本
name:
- httpd
- firewalld
state: latest
- name: configure index.html
copy: #更改apache的默认发布页面
content: "Welcome to apache!\n"
dest: /var/www/html/index.html
- name: firewalld enabled and running
service: #检测防火墙是否开启并处于开机自启状态
name: firewalld
enabled: true
state: started
- name: firewalld permits httpd
firewalld: #检测防火墙是否允许apache服务
service: http
permanent: true
state: enabled
immediate: yes
- name: httpd enabled and running
service: #检测 httpd 是否开启和设置开机启动
name: httpd
enabled: true
state: started
- name: test webserver #第二个play,检测play是否配置正确
hosts: 192.168.0.109
become: yes #下放权利
tasks:
- name: connect web server
uri: #使用url命令去获取apache服务的链接
url: http://192.168.0.109
return_content: yes
status_code: 200
2、检测该剧本是否有语法错误的命令:
ansible-playbook --syntax-check multi-play.yml
3、空运行
ansible-playbook -C multi-play.yml
4、运行
ansible-playbook multi-play.yml
ansible-playbook -v multi-play.yml #显示细节
# This is a YAML comment
some data # This is also a YAML comment
三种表达方式:
this is a string #直接写字符串
'this is a string' #单引号
"this is a string" #双引号
结束!!!