【RH294知识点汇总】第 5 章 《 将文件部署到受管主机 》
本文摘要:本章介绍了使用Ansible进行文件管理和Jinja2模板部署的方法。文件管理方面,通过ansible.builtin和ansible.posix集合的模块实现文件增删改查、权限控制及SELinux配置,包括copy、fetch、file等核心模块功能。Jinja2模板部分,讲解了模板语法(变量输出、逻辑控制)、模板构建要素(变量、facts数据)及template模块的部署应用,支持循
目录

一、目标
完成本章学习后,可使用 Ansible 部署、管理、修改受管主机文件,并管控文件权限、所属、SELinux 上下文;熟练运用Jinja2 模板部署自定义配置文件。
二、在主机上修改和拷贝文件
1. 核心文件模块分类
Ansible 文件管理模块主要集成于ansible.builtin(随 ansible-core 预装)和ansible.posix集合,覆盖文件全生命周期操作,核心模块功能如下:
| 所属集合 | 模块名称 | 核心功能 |
|---|---|---|
| ansible.builtin | blockinfile | 插入 / 更新 / 删除标记包围的多行文本块 |
| copy | 控制节点→受管主机复制文件,可配置文件属性 | |
| fetch | 受管主机→控制节点提取文件,按主机名归档 | |
| file | 创建 / 删除文件 / 目录,管理权限、SELinux、时间戳 | |
| lineinfile | 确保文件中存在指定单行文本 | |
| stat | 检索文件状态信息,类 Linux stat 命令 | |
| ansible.posix | patch | 向文件应用 GNU 补丁 |
| synchronize | 基于 rsync 实现文件 / 目录快速同步 |
2. 文件自动化操作示例
-
创建空白文件:使用
file模块 +state: touch,等效 Linux touch 命令,可同步配置所有者、组、权限。 -
修改文件属性:
file模块支持配置SELinux 上下文(setype参数),等效 chcon 命令。 -
复制 / 提取文件:
copy实现本地到远程分发;fetch实现远程到本地拉取。 -
编辑文件:
lineinfile处理单行文本;blockinfile处理多行文本块。 -
删除文件:
file模块 +state: absent,确保目标文件不存在。 -
检索文件状态:
stat模块可获取文件校验和(md5 等)、权限等信息。 -
文件同步:
synchronize模块基于 rsync 实现高效文件 / 目录同步。
三、Jinja2 模板部署自定义文件
1. Jinja2 基础简介
-
Ansible默认采用 Jinja2作为模板引擎,用于动态生成文件、引用变量。
-
核心语法:
-
{{ EXPR }}:输出变量 / 表达式结果 -
{% EXPR %}:编写逻辑(循环、条件) -
{# COMMENT #}:添加模板注释
-
2. Jinja2 模板构建
-
模板核心要素:数据、自定义变量、受管主机 facts,可通过
ansible 主机名 -m setup获取主机 facts。 -
模板文件无强制后缀,可直接嵌入变量与逻辑代码。
3. 模板部署使用
-
核心部署模块:ansible.builtin.template,将控制节点模板渲染后分发到受管主机。
-
关键参数:
src(本地模板路径)、dest(远程目标路径),支持配置权限、所属等属性。
4. 模板控制结构
-
循环(for):遍历列表、主机组,批量生成配置(如动态生成 /etc/hosts)。
-
条件(if):按变量判断是否渲染内容,实现差异化配置。
5. 变量过滤器
-
用于数据格式转换,核心过滤器:
to_json/to_yaml/to_nice_json/to_nice_yaml、from_json/from_yaml,实现格式互转。
四、本章核心总结
-
ansible.builtin/ansible.posix模块覆盖文件增删改查、权限、SELinux 等全场景管理。
-
Jinja2 模板结合
template模块,实现动态、差异化的配置文件部署。 -
模板支持循环、条件、过滤器,大幅提升 Ansible 文件管理的灵活性与自动化能力。
更多推荐
所有评论(0)