Ansible自动化运维之playbook

作者: admin 分类: 自动化运维 发布时间: 2021-04-23 17:50

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   #写相应模块及任务,注意与上侧格式对齐,空格只需要保持一致即可,比如上侧缩进了三个空格下侧也缩进三个空格,建议缩进两个空格,保持整体美观

注意事项

%title插图%num
  • play中只要执行命令的返回值不为0,就会报错,tasks停止,可以添加下面
  • ignore_errors: True #忽略错误,强制返回成功

本文以构建一个web集群环境和nfs存储的方式为例进行编写,下图为架构拓扑图

%title插图%num

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
%title插图%num

5、执行nfs-server.yml据本(第一次执行显示为黄色,说明数据已改变)

[root@qunniao_30 .ansible]# ansible-playbook nfs-server.yml
%title插图%num

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

%title插图%num


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

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

发表评论