目录
[二、Ansible 角色结构与使用](#二、Ansible 角色结构与使用)
[1. 角色核心作用](#1. 角色核心作用)
[2. 角色标准目录结构](#2. 角色标准目录结构)
[3. 角色变量规则](#3. 角色变量规则)
[4. 角色调用方式](#4. 角色调用方式)
[三、Ansible 角色创建](#三、Ansible 角色创建)
[1. 标准创建流程](#1. 标准创建流程)
[2. 角色依赖管理](#2. 角色依赖管理)
[1. 外部来源](#1. 外部来源)
[2. ansible-galaxy 核心命令](#2. ansible-galaxy 核心命令)
[3. 批量安装](#3. 批量安装)
[五、Ansible 内容集合](#五、Ansible 内容集合)
[1. 核心价值](#1. 核心价值)
[2. 安装与配置](#2. 安装与配置)
[3. 使用规范](#3. 使用规范)
[六、RHEL 系统角色](#六、RHEL 系统角色)
[1. 核心优势](#1. 核心优势)
[2. 获取方式](#2. 获取方式)
[3. 典型示例](#3. 典型示例)

一、目标
熟练使用Ansible 角色 和Ansible 内容集合 快速开发 Playbook,实现代码复用;掌握角色创建、外部角色获取、内容集合使用,以及RHEL 系统角色的标准化配置。
二、Ansible 角色结构与使用
1. 角色核心作用
-
将复杂 Playbook 拆分为独立模块,支持复用、共享、并行开发。
-
自动加载任务、处理程序、变量、文件、模板,简化脚本编写。
2. 角色标准目录结构
角色以目录为单位,核心子目录及功能如下:
| 子目录 | 核心功能 | 关键文件 |
|---|---|---|
| defaults | 角色默认变量,最低优先级 | main.yml |
| files | 静态文件,任务直接引用 | 自定义文件 |
| handlers | 处理程序(handler)定义 | main.yml |
| meta | 角色元信息、依赖关系 | main.yml |
| tasks | 角色核心任务定义 | main.yml |
| templates | Jinja2 模板文件 | 自定义.j2 文件 |
| tests | 角色测试用清单与 Playbook | test.yml |
| vars | 角色内部变量,最高优先级 | main.yml |
3. 角色变量规则
-
vars/main.yml:内部专用变量,优先级高,禁止外部修改。
-
defaults/main.yml:默认变量,优先级低,支持用户自定义覆盖。
-
优先级顺序:清单变量 > Play 变量 > 角色调用传参 > defaults 变量 > vars 变量。
4. 角色调用方式
-
静态导入 :
ansible.builtin.import_role,解析阶段加载,变量 /handler 全局生效。 -
动态包含 :
ansible.builtin.include_role,运行时加载,变量仅作用于当前任务。 -
roles 列表 :Play 中直接声明,优先于 tasks 执行,支持传参。
-
特殊执行段:
pre_tasks(角色前运行)、post_tasks(角色后运行)。
三、Ansible 角色创建
1. 标准创建流程
-
初始化框架:
ansible-galaxy init 角色名,自动生成完整目录结构。 -
编写内容:
tasks/main.yml写核心逻辑,templates放模板,defaults设默认值。 -
Playbook 调用:通过
roles字段或import_role/include_role引入。
2. 角色依赖管理
在meta/main.yml的dependencies字段定义依赖角色,默认仅执行一次,可通过allow_duplicates: yes修改。
四、外部角色部署
1. 外部来源
-
社区:Ansible Galaxy (galaxy.ansible.com)。
-
企业:红帽自动化中心、私有 Git 仓库。
2. ansible-galaxy 核心命令
-
初始化:
ansible-galaxy init -
搜索角色:
ansible-galaxy search -
安装角色:
ansible-galaxy install -
查看已装:
ansible-galaxy list -
删除角色:
ansible-galaxy remove
3. 批量安装
通过roles/requirements.yml定义角色来源,执行ansible-galaxy install -r requirements.yml批量部署。
五、Ansible 内容集合
1. 核心价值
将模块、角色、插件 打包分发,独立于 Ansible Core 更新,通过命名空间(redhat/community)避免冲突。
2. 安装与配置
-
安装命令:
ansible-galaxy collection install 集合名 -p 目标目录 -
批量安装:
collections/requirements.yml定义依赖 -
来源配置:
ansible.cfg的[galaxy]段指定服务器(自动化中心 / Galaxy)
3. 使用规范
调用资源需使用全限定名(FQCN) ,如community.mysql.mysql_user。
六、RHEL 系统角色
1. 核心优势
红帽官方支持,兼容多版本 RHEL,统一配置时间、网络、防火墙等系统组件。
2. 获取方式
-
RPM 包安装:
dnf install rhel-system-roles -
内容集合:
redhat.rhel_system_roles
3. 典型示例
redhat.rhel_system_roles.timesync角色,统一配置 RHEL 6/7/8/9 时间同步。