Playbook介绍
1.1什么是playbook
playbook也是yml语法编写的文本文件,主要是由play和task组成
play:主要是定义主机、主机组
用hosts:定义
task主要定义对主机或者主机组的任务,可以是一个,也可以是很多个
用tasks:定义
总结:
在编写playbook的时候,里面由一个或者是多个play组成;
每一个paly可以包含一个或者多个task;
1.2 playbook和ad-hoc的区别
playbook是ad-hoc的一种编排方式
playbook是可以持续运行的,但ad-hoc只能临时运行一次
playbook适合复杂的任务,ad-hoc适合执行简单的任务
playbook能控制任务先后执行顺序
playbook的编写要求
Playbook是yml语言编写,结构要清晰,可读性强,很多语言都是需要这种语法定义这个yml
语言的要求非常严格,空格也是有明确要求的
========================================================================
要求
1.文件中,禁止使用Tab进行缩进,如果使用编辑软件,需要修改配置将tab缩进,替换空格:
必须是双数:2、4、6、8..
2,文件编码格式,必须和操作系统匹配,默认utf-8
如果使用vi或者vim,它自动和系统匹配
缩进:
yml和yaml使用固定缩进风格表示内容层级,每个缩进由双数的空格对应通常都是2个空格
代表一层
冒号:
除了以冒号结尾的,所有冒号后面,必须有一个空格,举例:(name: zhangsan)
减号:
减号代表项,减号后面必须有空格,举例:-name
。使用vi或者vim编写playbook(最推荐的,因为他会自己匹配编码格式)
。如果要在windows系统内编辑playbook,保存时候一定要使用utf-8编码格式
[root@ansible ~]# vi an-1.yml
[root@ansible ~]# cat an-1.yml
- hosts: webservers #指定针对那个主机或者那个主机组进行管理,下面就要指定具体的工作内容
tasks: #任务列表
- name: 创建一个文件
file: name=/opt/9090.txt state=touch
[root@ansible ~]# ansible-playbook an-1.yml
PLAY [webservers] ***************************************************************************************************************************************
TASK [Gathering Facts] **********************************************************************************************************************************
ok: [192.168.92.20]
TASK [创建一个文件] *************************************************************************************************************************************
changed: [192.168.92.20]
PLAY RECAP **********************************************************************************************************************************************
192.168.92.20 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
[root@ansible ~]# ansible webservers -m shell -a 'ls /opt'
192.168.92.20 | CHANGED | rc=0 >>
9090.txt
a.tar.gz
a.txt
b.tar.gz
ceshi.txt
cp.txt
cp.txt.2585.2026-03-26@20:21:13~
index.html
replace.txt
xxx.txt
[root@ansible ~]#
playbook多任务案例
[root@ansible ~]# vi an-2.yml
[root@ansible ~]# cat an-2.yml
- hosts: webservers
tasks:
- name: 创建129.txt
file:
path: /opt/129.txt
state: touch
- name: 创建150.txt
file:
path: /opt/150.txt
state: touch
[root@ansible ~]# ansible-playbook an-2.yml
PLAY [webservers] ***************************************************************************************************************************************
TASK [Gathering Facts] **********************************************************************************************************************************
ok: [192.168.92.20]
TASK [创建129.txt] **************************************************************************************************************************************
changed: [192.168.92.20]
TASK [创建150.txt] **************************************************************************************************************************************
changed: [192.168.92.20]
PLAY RECAP **********************************************************************************************************************************************
192.168.92.20 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
[root@ansible ~]# ansible webservers -m shell -a 'ls /opt'
192.168.92.20 | CHANGED | rc=0 >>
129.txt
150.txt
9090.txt
a.tar.gz
a.txt
b.tar.gz
ceshi.txt
cp.txt
cp.txt.2585.2026-03-26@20:21:13~
index.html
replace.txt
xxx.txt
[root@ansible ~]#