news 2026/10/14 1:13:00

Ansible【第二课】:实施 Ansible Playbook

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 写要干什么活,模块干实际操作,最后执行脚本批量干活。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/14 1:12:58

ElasticSearch父子文档:从数据建模到关联查询的工程实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/14 1:12:55

从Spring XML到SpringBoot:配置进化与自动配置原理剖析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/14 1:12:31

Python用matplotlib实现多波形叠加对比完全指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/14 1:12:29

Python getattr()与map()组合实战:动态属性访问与批量数据处理

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/14 1:11:59

x86_64汇编字符串比较:REPE CMPSB指令原理与SSE优化实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/14 1:11:49

滑动窗口最大值:单调队列原理与O(n)实现详解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华