首先简单说明一下playbook,playbook是什么呢?
```
根本上说playbook和shell脚本没有任何的区别,playbook就像shell一样,也是把一堆的命令组合起来,然后加入对应条件判断等等,在shell脚本中是一条一条的命令,而在playbook中是一个一个的task任务构成,每个task任务可以看做shell中的一条命令;shell脚本一般只是在当前服务器上执行,而playbook则是在不止一个服务器上执行,因此playbook需要在其中指定运行该playbook的服务器名。
playbooks基础组件
Hosts:运行执行任务(task)的目标主机
remote_user:在远程主机上执行任务的用户
tasks:任务列表
handlers:任务,与tasks不同的是只有在接受到通知时才会被触发
templates:使用模板语言的文本文件
variables:变量,变量替换
playbooks中tasks语法使用
file: 操作文件,比如创建文件或目录、删除文件或目录、修改文件权限等
常用参数:
path:指定要操作的文件或目录
state:参数非常灵活,可以包含的值及含义如下
directory - 与path结合说明我们要操作的是一个目录
touch - 与path结合说明我们要操作的是一个文件
link - 创建软连接
hard - 创建硬链接
absent - 删除目标
src:当state设置为link或hard创建链接时,用于说明链接哪个文件,指定链接源
force:值为yes表示强制创建
owner:指定被操作文件的属主
group:指定被操作文件的属组
mode:指定被操作文件的权限
playbook的使用
执行一个创建用户的命令
```
[root@localhost playbook]# vim user.yml
[root@localhost playbook]# cat user.yml
--- //开始标记
- name: user //任务名字
hosts: 192.168.145.163 //指定需要执行的主机和组
tasks: //任务
- name: create user for zs //任务名字
user: //指定模块
name: zs //用户名字
uid: 6100 //用户uid
state: present //用户状态
... //结束标记
运行playbook
[root@ansible ansible]# ansible-playbook playbook/user.yml
PLAY [user] ********************************************************************
TASK [Gathering Facts] *********************************************************
ok: [192.168.145.163]
TASK [create user for zs] *****************************************************
changed: [192.168.145.163]
PLAY RECAP *********************************************************************
192.168.145.163 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0