Ansible集群自动化维护(二)
主要内容:剧本和变量
1 剧本
1.1 剧本介绍
什么是ansible的剧本(play book)?
- 剧本是一个yaml格式的文件,用于长久保存并且实现批量管理、维护、部署的文件。
- 类似于脚本存放命令和变量,剧本中存放各模块的使用命令
- 剧本是未来我们批量管理、运维必会的内容
剧本和ansible命令的区别:
|
ansible剧本 |
ans ad-hoc(单条命令) |
共同点 |
批量管理,使用模块 |
批量管理,使用模块 |
区别 |
方便重复调用 |
不是很方便,不容易重复 |
应用建议(应用场景) |
部署服务,多个步骤的任务 |
测试模块,临时性任务 |
1.2 剧本的书写格式
剧本的书写格式
书写playbook注意事项:
- 同一个层级的内容对齐的.
- 不同层级的通过2个空格对齐
- 不能使用tab键
1.3 第一个剧本
使用剧本在对象机器创建文件
执行的时候有奶牛:
可以删除软件 或 修改ansible.cfg配置进行关闭 #nocows = 1去掉注释即可
1.4 剧本案例
1.4.1 案例01-创建目录
创建目录并分发文件,要求:
- 创建目录/server/files/
- /etc/hosts文件发送过去/server/files/
剧本编写:
以上剧本path和state仍写在一行,更像是一条命令,改进后如下:
执行
1.4.2 案例02-安装软件
分发软件包、安装软件包、启动服务
步骤:
- zabbix-agent软件包(下载)
- 安装软件包
- 配置(略)
- 启动开机自启动
实现如下:
运行剧本
1.4.3 案例03-部署服务
NFS服务
- nfs服务端:在backup上部署nfs服务,共享/backup-nfs目录,all_squash,匿名用户:nfsnobody
- nfs客户端:web挂载 /ans-upload目录挂载nfs服务端共享的/backup-nfs(永久挂载)
流程梳理:
- 服务端流程:
- 部署nfs-utils,rpcbind
- 修改配置文件
- 创建共享目录并改所有者
- 启动服务rpcbind,nfs(注意顺序)
- 客户端流程:
- 安装nfs-utils
- 挂载与永久挂载
实现:
2 变量
ansible中额的变量无处不在,,ans中大部分地方都可以定义变量.
可以定义变量的地方 |
说明 |
在剧本文件中定义 |
比较常用. 仅仅限于当前的play使用. |
register变量(注册变量) |
实现例如脚本中反引号 的功能,可以获取命令结果 |
变量文件(根据主机清单分分组进行定义变量 ) |
如果多个剧本,使用相同的变量,大型的剧本roles |
inventory主机清单中定义变量 |
未来可以用于批量修改主机使用,其他很少用了. |
命令行中 |
几乎不用. |
facts变量 |
一般用于获取主机基本信息:ip,主机名,系统 (centos/ubuntu) 如果不需要可以关闭,用于加速剧本的执行 |
2.1 剧本中的变量
在剧本中使用变量:
- 仅仅在当前play生效.
- 一般用来存放路径,用户名,ip地址,类似于之前使用的脚本.
- 注意引号使用.
案例:批量创建/oldboy/lidao/upload/
关于双引号的注意事项:
2.2 共用变量(变量文件)
将变量写入新建的变量文件vars.yml,然后在剧本中引用
2.3 共用变量(根据主机组)
group_vars根据主机清单的分组去匹配变量文件,可以根据主机组创建变量文件,例如:
未来一般使用all分组即可,把所有变量存放在一起,供剧本使用
案例:
执行:
2.4 facts变量
什么是facts变量?
- 运行剧本的时候ans会收集每个主机的基本信息,这些信息形成的变量叫做facts变量。
- facts变量可以通过setup模块获取
常用的fact变量
案例:批量修改系统/etc/motd文件,登录的时候输出系统的基本信息,如
主机名、内存总大小、ip地址、发行版本、cpu数、核心数
温馨提示: template vs copy模块
copy仅仅传输数据,复制文件
template 传输数据,复制文件的时候,文件中的变量会被解析和运行
关于facts变量实际应用案例:
- 通过facts变量获取系统的基本信息
- 通过facts变量获取信息并进行判断
- 如果不需要可以进行关闭,加速剧本的运行( gather_facts: no)
2.5 register变量
本质上就是用来实现脚本中的反引号功能,用户通过命令获取的内容都存放到Register变量中
符号说明:
msg:中的|
表示下面的内容是多行. |
也可以用于其他模块中