目录

一、目标

二、在主机上修改和拷贝文件

1. 核心文件模块分类

2. 文件自动化操作示例

三、Jinja2 模板部署自定义文件

1. Jinja2 基础简介

2. Jinja2 模板构建

3. 模板部署使用

4. 模板控制结构

5. 变量过滤器

四、本章核心总结


一、目标

完成本章学习后,可使用 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. 文件自动化操作示例

  1. 创建空白文件:使用file模块 +state: touch,等效 Linux touch 命令,可同步配置所有者、组、权限。

  2. 修改文件属性file模块支持配置SELinux 上下文setype参数),等效 chcon 命令。

  3. 复制 / 提取文件copy实现本地到远程分发;fetch实现远程到本地拉取。

  4. 编辑文件lineinfile处理单行文本;blockinfile处理多行文本块。

  5. 删除文件file模块 +state: absent,确保目标文件不存在。

  6. 检索文件状态stat模块可获取文件校验和(md5 等)、权限等信息。

  7. 文件同步synchronize模块基于 rsync 实现高效文件 / 目录同步。

三、Jinja2 模板部署自定义文件

1. Jinja2 基础简介

  • Ansible默认采用 Jinja2作为模板引擎,用于动态生成文件、引用变量。

  • 核心语法:

    • {{ EXPR }}:输出变量 / 表达式结果

    • {% EXPR %}:编写逻辑(循环、条件)

    • {# COMMENT #}:添加模板注释

2. Jinja2 模板构建

  • 模板核心要素:数据、自定义变量、受管主机 facts,可通过ansible 主机名 -m setup获取主机 facts。

  • 模板文件无强制后缀,可直接嵌入变量与逻辑代码。

3. 模板部署使用

  • 核心部署模块:ansible.builtin.template,将控制节点模板渲染后分发到受管主机。

  • 关键参数:src(本地模板路径)、dest(远程目标路径),支持配置权限、所属等属性。

4. 模板控制结构

  1. 循环(for):遍历列表、主机组,批量生成配置(如动态生成 /etc/hosts)。

  2. 条件(if):按变量判断是否渲染内容,实现差异化配置。

5. 变量过滤器

  • 用于数据格式转换,核心过滤器:to_json/to_yaml/to_nice_json/to_nice_yamlfrom_json/from_yaml,实现格式互转。

四、本章核心总结

  1. ansible.builtin/ansible.posix模块覆盖文件增删改查、权限、SELinux 等全场景管理。

  2. Jinja2 模板结合template模块,实现动态、差异化的配置文件部署。

  3. 模板支持循环、条件、过滤器,大幅提升 Ansible 文件管理的灵活性与自动化能力。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐