3.自动化运维工具Ansible 之PlayBook
孙富阳, 江湖人称没人称。多年互联网运维工作经验,曾负责过孙布斯大规模集群架构自动化运维管理工作。擅长Web集群架构与自动化运维,曾负责国内某大型博客网站运维工作。
1.Ansible Playbook基本概述
1.什么是playbook
PlayBook 即”剧本”,”兵书”之意,PlayBook是由以下部分组成的
play : 定义的是主机的角色。(主角还是配角,找哪个明星)
task : 定义的是具体执行的任务。(角色的台词和动作)
playbook : 由一个或多个play(角色)组成,一个play(角色)可以包含多个task(台词,动作,大腕每集拍什么)。
简单理解为: 使用不同的模块完成一件事情
在 Ansible 中”剧本文件”是以yml结尾的文件。 在 SaltStack 中”剧本文件”是以sls结尾的文件。 但是语法,使用的都是 yaml 语法**

2.Ansible playbook与AD-Hoc的关系
1.PlayBook 功能比 ad‐hoc 更全,是对 ad‐hoc 的一种编排.
2.PlayBook 能很好的控制先后执行顺序, 以及依赖关系
3.PlayBook 语法展现更加的直观.
4.playbook 可以持久使用, ad‐hoc 无法持久使用.
2.Ansible Playbook语法书写格式
playbook是由yaml语法书写,结构清晰,可读性强,所以必须掌握yml基础语法
语法 | 描述 |
缩进 | YAML使用固定的缩进风格表示层级结构,每个缩进由两个空格组成, 不能使用tabs |
冒号 | 以冒号结尾的除外,其他所有冒号后面所有必须有空格。 |
短横线 | 表示列表项,使用一个短横杠加一个空格。多个项使用同样的缩进级别作为同一列表。 |
1.下面我们一起来编写一个playbook文件
playbook起步
host: 对哪些主机进行操作
remote_user: 我要使用什么用户执行
tasks: 具体执行什么任务
###人生中第1个剧本 查询所有主机的主机
[root@mb01 ~]# vim /server/playbook/01_playbook.yml
---
- name: shosh
hosts: all
tasks:
- name: show
command: hostname
2.执行playbook,注意观察执行返回的状态颜色
红色:表示有task执行失败,通常都会提示错误信息。
黄色:表示远程主机按照编排的任务执行且进行了改变。
绿色:表示该主机已经是描述后的状态,无需在次运行
3.Ansible Playbook练习实验
1.使用ansible搭建nfs服务
[root@mb01 ~]# cat /server/playbook/host.yml
---
- name: 服务端搭建nfs服务
hosts: 172.16.1.51
remote_user: root
tasks:
- name: 服务端安装nfs服务
yum:
name: nfs-utils
state: installed
- name: 书写配置文件
copy:
content: /data/ 172.16.1.0/24(rw,no_all_squash)
dest: /etc/exports
backup: yes
notify:
- nfs变化,重启nfs
- name: 创建共享目录
file:
path: /data/
state: directory
owner: nfsnobody
group: nfsnobody
mode: 0755
- name: 启动服务
systemd:
name: nfs
state: started
enabled: yes
- name: 启动rcp
systemd:
name: rpcbind
state: started
enabled: yes
handlers:
- name: nfs变化,重启nfs
systemd:
name: nfs
state: restarted
enabled: yes
- name: 客户端挂载
hosts: webs
remote_user: root
tasks:
- name: 安装nfs服务
yum:
name: nfs-utils
state: installed
- name: 执行挂载操作
mount:
src: 172.16.1.51:/data
path: /mnt
state: mounted
fstype: nfs
2.使用ansible搭建rsyncd
编写剧本
[root@mb01 ~]# cat /server/playbook/rsync.yml
---
- name: backup服务器搭建rsync服务
hosts: backup
tasks:
- name: 安装rsync
yum:
name: rsync
state: installed
- name: 拷贝配置文件至backup服务端
copy:
src: /opt/rsyncd.conf
dest: /etc/rsyncd.conf
backup: yes
- name: 创建用户组
group:
name: rsync
gid: "666"
- name: 创建用户
user:
name: rsync
uid: "666"
create_home: no
shell: /sbin/nologin
group: "666"
- name: 创建配置文件指定的目录
file:
path: /backup
state: directory
owner: rsync
group: rsync
- name: 创建密码文件
copy:
content: rsync_backup:123456
dest: /etc/rsync.pass
mode: 0600
- name: 启动rsync服务
systemd:
name: rsyncd
state: started
enabled: yes
- name: 客户端验证
hosts: webs
tasks:
- name: 推送密码文件至rsync客户端
copy:
content: 123456
dest: /etc/rsync.pass
mode: 0600
- name: 测试是否可以执行
command: rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.pass
###在ansible管理端编写被管理端的配置文件
[root@mb01 ~]# cat /opt/rsyncd.conf
uid = rsync
gid = rsync
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 300
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
auth users = rsync_backup
secrets file = /etc/rsync.pass
[backup]
comment = "backup dir by oldboy"
path = /backup
PS:ansibel-playbook命令
#检查语法
[root@mb01 ~]# ansible-playbook --syntax-check /server/playbook/rsync.yml
#测试执行
[root@mb01 ~]# ansible-playbook /server/playbook/rsync.yml -C
#执行
[root@mb01 ~]# ansible-playbook /server/playbook/rsync.yml
未经允许不得转载:孙某某的运维之路 » 3.自动化运维工具Ansible 之PlayBook
评论已关闭