Ansible【第二课】:实施 Ansible Playbook

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)

核心关系

  1. Play:规定「操作哪台机器、要不要 sudo」
  2. tasks:是 Play 下的关键字,代表任务列表
  3. Task:tasks 下面每一条以‑ name:开头的,就是一个 Task(任务)
  4. 模块:每个 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 #把输出打印到终端屏幕#)

几个实用功能:

  1. 语法检查:先检查 yml 文件写没写错,不用真正执行机器上;
  2. 试运行(dry‑run):模拟跑一遍,只输出会做什么改动,不真正修改服务器,用来提前测试脚本;
  3. -v/-vvv增加输出详情,排错看日志;

执行结束会给出统计:ok 成功、changed 改动了系统、failed 失败、skipped 跳过。ok 代表机器已经符合要求,不需要改动。

6 、多个 Play、权限控制

一个 yml 可以写多个 Play,每个 Play 可以针对不同机器组、用不同登录用户、不同 sudo 权限。

可以在 play 里面单独指定remote_user登录哪个账号,become: yes开启 sudo 提权,become_user指定切换成哪个用户。

简单捋一遍完整流程

  1. 写 inventory 清单,登记要管的机器;
  2. 修改 ansible 配置,设置 ssh 连接、提权;
  3. 写 playbook(yml),选定目标主机,写 task,调用模块;
  4. 先语法校验,再试运行测试;
  5. 正式运行脚本,批量在多台机器完成自动化操作。

简单说:清单登记机器,配置文件规定怎么连机器,Playbook 写要干什么活,模块干实际操作,最后执行脚本批量干活。

相关推荐
无言听风雨丶7 小时前
Kubernetes 控制平面深度剖析:从 kubectl apply 到 etcd 写入的全链路
平面·kubernetes·etcd
镜子AI8 小时前
镜子AI 技术复盘:三条自动化链路上的“停止条件“设计
运维·人工智能·自动化
tianyuanwo8 小时前
NetBox 数据库详解:当“关系型数据库”被装进一个网络运维的领域模型里
运维·数据库·netbox
HideF8 小时前
Linux sudo
linux
openFuyao8 小时前
openFuyao x 复旦大学软件工程实验室 Panel 回顾:Agentic时代,集群调度技术体系将如何演进?
kubernetes·openfuyao
FlightYe9 小时前
视界原理之3D视频(四):裸眼、眼镜和头显
android·linux·c++·3d·ffmpeg·音视频
螺蛳粉 螺蛳粉9 小时前
第 05 篇:etcd 深入:Raft 共识、watch 机制与快照备份恢复实战(底座认知 05)
docker·云原生·容器·kubernetes·etcd·分布式存储·kube-apiserver
蹊黎9 小时前
Linux 下用 C 语言实现进度条
linux·c语言·单片机
知已难寻10 小时前
03 · OpenStack的计算管理 Nova
运维·服务器·开发语言·云原生·云计算·openstack·开源软件
huainingning11 小时前
Windows syslog日志服务器搭建与模拟器对接
运维·服务器·智能路由器