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、验证

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