RH294 第 2 章(实施 Ansible Playbook)
这一章讲怎么写、配、跑 Ansible 自动化脚本(Playbook)。
1、Inventory 主机清单
清单就是记录所有要管理的机器,告诉 Ansible 要操作哪些服务器。
- 静态清单:直接写文本文件,写主机名、IP,还能把机器分到不同组,方便批量操作一整组机器;支持通配符批量写一批主机。可以用命令查看清单里面有哪些机器、分组。
- 动态清单:不是手写,通过脚本程序动态获取机器列表,适合云平台机器经常变动的场景。
如果不写清单,Ansible 就不知道该连哪台机器。
2、Ansible 配置文件
配置文件用来设置 Ansible 的全局行为,比如去哪找主机清单、SSH 怎么连接受管机器、超时时间等等。
配置文件有好几个优先级:项目目录下的配置 > 用户家目录配置 > 系统全局配置。
可以用工具查看当前生效的全部配置。
连接相关配置:
Ansible靠 SSH 去连别的机器。可以配置登录用户名、ssh 端口、密码、是否用 sudo 提权。
可以配置免密登录,也可以运行脚本的时候输入密码。
become相关参数控制要不要切换 root 权限,很多操作(装软件、改系统文件)必须提权才能完成。
3、Playbook 剧本(YAML 格式)
Playbook就是 Ansible 的脚本文件,后缀 yml,用 YAML 语法写,靠缩进控制层级,缩进错就直接报错。
- 一个 Playbook 可以包含多个 Play;一个 Play 就是针对一批主机,执行一堆任务 task。
- 每个 task 调用模块干活,模块就是 Ansible 现成工具,装软件、建用户、复制文件都有对应的模块,不用自己敲原始 shell 命令。
- 幂等性:多次执行,效果和执行一次完全相同;已经达到目标状态,就不做任何改动。Ansible 大部分内置模块都是幂等的。
YAML 注意点:用空格缩进,不能用 Tab,冒号后面必须带空格,列表用-开头。
统计上面这份文件
- Play:1 个
- Task(任务):3 个
- 模块:3 个(yum、copy、service)
核心关系
- Play:规定「操作哪台机器、要不要 sudo」
- tasks:是 Play 下的关键字,代表任务列表
- Task:tasks 下面每一条以‑ name:开头的,就是一个 Task(任务)
- 模块:每个 Task 里面,真正干活的工具,1 个 Task 只能用 1 个模块
记忆:
Play → 里面有 tasks → tasks 里面有很多 Task → 每个 Task 调用一个模块。
4、模块怎么用
模块是真正干活的工具,系统自带大量内置模块。
可以用命令查模块文档,看模块怎么用、有哪些参数。
尽量优先使用 Ansible 自带模块,少用 shell/command 直接敲命令,shell 命令没有幂等性,反复执行容易出问题。
5、运行 Playbook
用ansible‑navigator run执行剧本。
(ansible‑navigator run -m stdout,加-m stdout #把输出打印到终端屏幕#)
几个实用功能:
- 语法检查:先检查 yml 文件写没写错,不用真正执行机器上;
- 试运行(dry‑run):模拟跑一遍,只输出会做什么改动,不真正修改服务器,用来提前测试脚本;
- -v/-vvv增加输出详情,排错看日志;
执行结束会给出统计:ok 成功、changed 改动了系统、failed 失败、skipped 跳过。ok 代表机器已经符合要求,不需要改动。
6、多个 Play、权限控制
一个 yml 可以写多个 Play,每个 Play 可以针对不同机器组、用不同登录用户、不同 sudo 权限。
可以在 play 里面单独指定remote_user登录哪个账号,become: yes开启 sudo 提权,become_user指定切换成哪个用户。
简单捋一遍完整流程
- 写 inventory 清单,登记要管的机器;
- 修改 ansible 配置,设置 ssh 连接、提权;
- 写 playbook(yml),选定目标主机,写 task,调用模块;
- 先语法校验,再试运行测试;
- 正式运行脚本,批量在多台机器完成自动化操作。
简单说:清单登记机器,配置文件规定怎么连机器,Playbook 写要干什么活,模块干实际操作,最后执行脚本批量干活。