Ansible自动化运维之playbook
playbook-剧本简介
playbook是 一个不同于使用Ansible命令行执行方式的模式,其功能更强大灵活。Playbook可以定制配置,可以按照指定的操作步骤有序执行,支持同步和异步方式,编写格式为YAML格式。
核心元素
- hosts: 主机列表
- Tasks:任务集,由模板定义的操作列表
- Variables:变量
- Templates:模板,即使用模板语法的文件
- Handlers:处理器 ,当某条件满足时,触发执行的操作,与tasks并列
- notity:和handlers结合使用,由handlers定义操作,notity引用执行
- Roles:角色
- tags:标签
play-book基本格式(编写时注意空格,以.yml或.yaml结尾)
--- #特定格式,类似shell脚本开头#!/bin/bash,建议书写
- hosts: db #主机列表,注意-和hosts,hosts:和db之间的空格
remote_user: root #远程执行用户,注意remote_user与上面hosts对齐,使用相同空格
tasks: #任务集,注意与上侧相关格式对齐
- name: install nfs #任务名称,注意这里属于tasks下的子任务,需要比上一级缩进相应的空格
yum:name=nfs-utils,rpcbind #写相应模块及任务,注意与上侧格式对齐,空格只需要保持一致即可,比如上侧缩进了三个空格下侧也缩进三个空格,建议缩进两个空格,保持整体美观
注意事项

- play中只要执行命令的返回值不为0,就会报错,tasks停止,可以添加下面
- ignore_errors: True #忽略错误,强制返回成功
本文以构建一个web集群环境和nfs存储的方式为例进行编写,下图为架构拓扑图

1、设置主机清单(免密钥相关操作略)
[root@qunniao_30 ~]# vim /etc/ansible/hosts [web] 10.1.1.31:22 10.1.1.32 [db] 10.1.1.33
2、创建工作目录
[root@qunniao_30 ~]# mkdir conf html play-book -p
- conf:存放相关配置文件 (提前准备)
- html:存放网站数据 (提前准备)
- play-book:存放据本文件
3、编写nfs部署据本
[root@qunniao_30 .ansible]# vim nfs-server.yml
---
- hosts: db
remote_user: root
tasks: #任务
- name: install nfs
yum: name=nfs-utils,rpcbind
- name: mkdir
file: path=/data recurse=yes owner=nginx group=nginx mode=755
- name: config nfs
copy: src=/root/conf/exports dest=/etc/exports
notify: restart nfs server #与handlers相配套,当检测到配置文件改变后就会触发重启服务
- name: start rpcbind
service: name=rpcbind state=started enabled=yes
- name: start nfs
service: name=nfs state=started enabled=yes
handlers: #处理器,一般用于配置文件修改后自动触发重启服务
- name: restart nfs server
service: name=nfs-server state=restarted
4、模拟执行任务(和实际执行效果一样,只是为真正写数据到远程主机,可检查据本相关错误)
[root@qunniao_30 .ansible]# ansible-playbook -C nfs-server.yml

5、执行nfs-server.yml据本(第一次执行显示为黄色,说明数据已改变)
[root@qunniao_30 .ansible]# ansible-playbook nfs-server.yml

6、验证nfs
[root@qunniao_30 .ansible]# ansible db -m shell -a 'ss -anl | grep 2049'
10.1.1.33 | CHANGED | rc=0 >>
udp UNCONN 0 0 *:2049 *:*
udp UNCONN 0 0 :::2049 :::*
tcp LISTEN 0 64 *:2049 *:*
tcp LISTEN 0 64 :::2049 :::*
7、编写web部署据本(本例部署web软件为nginx)
[root@qunniao_30 .ansible]# cat web.yml
---
- hosts: web
remote_user: root
tasks:
- name: create group
group: name=nginx gid=80
- name: create user
user: name=nginx uid=80 group=nginx create_home=no shell=/sbin/nologin
- name: install nginx,nfs_client
yum: name=nginx,nfs-utils
- name: config nginx
copy: src=/root/conf/nginx.conf dest=/etc/nginx/nginx.conf backup=yes
notify: restart nginx
- name: mount nfs
mount: src=10.1.1.33:/data path=/usr/share/nginx/html fstype=nfs4 opts=defaults state=mounted
- name: owner dir
file: path=/usr/share/nginx/html recurse=yes owner=nginx group=nginx mode=755
- name: copy html
copy: src=/root/html/index.html dest=/usr/share/nginx/html/
- name: start service
service: name=nginx state=started enabled=yes
handlers:
- name: restart nginx
service: name=nginx state=restarted
8、模拟执行任务
[root@qunniao_30 .ansible]# ansible-playbook -C web.yml
9、执行web.yml据本部署web集群(过程略)
[root@qunniao_30 .ansible]# ansible-playbook web.yml
10、验证

温馨提示:如无特殊说明,本站文章均为作者原创,转载请注明出处!


