目录
[一、YUM 仓库配置任务故障排查](#一、YUM 仓库配置任务故障排查)
[1. 任务核心代码与执行流程](#1. 任务核心代码与执行流程)
[2. 核心故障:GPG 认证错误](#2. 核心故障:GPG 认证错误)
[3. 其他常见问题](#3. 其他常见问题)
[1. 任务核心代码与执行流程](#1. 任务核心代码与执行流程)
[2. 核心故障排查](#2. 核心故障排查)
[3. 验证任务结果](#3. 验证任务结果)
[三、LVM 存储配置任务故障排查](#三、LVM 存储配置任务故障排查)
[1. 任务核心代码与执行流程](#1. 任务核心代码与执行流程)
[2. 核心故障排查](#2. 核心故障排查)
[(1)磁盘 /dev/vdb 不存在](#(1)磁盘 /dev/vdb 不存在)
[3. 检查模式验证配置](#3. 检查模式验证配置)
[四、Cron 定时任务配置故障排查](#四、Cron 定时任务配置故障排查)
[1. 任务核心代码与执行流程](#1. 任务核心代码与执行流程)
[2. 核心故障排查](#2. 核心故障排查)
[(1)devops 用户不存在](#(1)devops 用户不存在)
[(2)cron 任务执行权限不足](#(2)cron 任务执行权限不足)
[(3)cron 语法错误](#(3)cron 语法错误)
[3. 验证 cron 任务](#3. 验证 cron 任务)
[1. 任务核心代码与执行流程](#1. 任务核心代码与执行流程)
[2. 核心故障排查](#2. 核心故障排查)
[(1)网卡名称 eth1 不存在](#(1)网卡名称 eth1 不存在)
[(2)IP 地址冲突](#(2)IP 地址冲突)
[3. 验证网络配置](#3. 验证网络配置)
一、YUM 仓库配置任务故障排查
该任务核心是配置自定义 YUM 仓库、安装 GPG 密钥并部署 rhelver 包,最常见故障为 GPG 密钥认证失败,导致仓库配置或包安装失败。
1. 任务核心代码与执行流程
# repo_playbook.yml 核心内容
- name: Repository Configuration
hosts: webservers
tasks:
- name: Ensure Example Repo exists
ansible.builtin.yum_repository:
name: example-internal
description: Example Inc. Internal YUM repo
file: example
baseurl: http://materials.example.com/yum/repository/
gpgcheck: yes
- name: Ensure Repo RPM Key is Installed
ansible.builtin.rpm_key:
key: http://materials.example.com/yum/repository/RPM-GPG-KEY-example
state: present
- name: Install rhelver package
ansible.builtin.dnf:
name: rhelver
state: present
执行命令:
ansible-navigator run -m stdout repo_playbook.yml
2. 核心故障:GPG 认证错误
故障表现
执行时提示 GPG key retrieval failed 或 package rhelver is not signed,任务失败。
排查与解决方法
(1)验证 GPG 密钥地址可达性通过临时命令测试受管主机能否访问密钥地址:
ansible webservers -m ansible.builtin.uri -a 'url=http://materials.example.com/yum/repository/RPM-GPG-KEY-example return_content=yes'
若返回 404 / 超时,说明密钥地址错误或网络不通,需修正 rpm_key 模块的 key 参数。
(2)检查 GPG 密钥完整性手动下载密钥并验证指纹,确保密钥未被篡改:
# 控制节点下载密钥
curl http://materials.example.com/yum/repository/RPM-GPG-KEY-example -o /tmp/example.key
# 受管主机导入并验证
ansible webservers -m ansible.builtin.copy -a 'src=/tmp/example.key dest=/tmp/example.key'
ansible webservers -m ansible.builtin.command -a 'rpm --import /tmp/example.key && rpm -q gpg-pubkey --qf "%{name}-%{version}-%{release} -> %{summary}\n"'
(3)临时关闭 GPG 检查(测试用)若仅需验证仓库可用性,可临时将 yum_repository 模块的 gpgcheck 设为 no,排除密钥干扰:
- name: Ensure Example Repo exists
ansible.builtin.yum_repository:
name: example-internal
description: Example Inc. Internal YUM repo
file: example
baseurl: http://materials.example.com/yum/repository/
gpgcheck: no # 临时关闭,测试仓库是否可用
3. 其他常见问题
- 仓库 baseurl 不可达 :用
uri模块测试 baseurl 是否能访问,确认受管主机网络策略允许访问该地址; - dnf 模块依赖缺失 :受管主机需安装
dnf工具,确保ansible_python_interpreter指向的 Python 环境能调用dnf。
二、多用户创建任务故障排查
该任务通过变量文件定义用户信息,批量创建用户和用户组,常见故障为变量引用错误、用户组权限问题。
1. 任务核心代码与执行流程
# vars/users_vars.yml 变量文件
users:
- username: ops1
groups: webadmin
- username: ops2
groups: webadmin
# users.yml Playbook
- name: Create multiple local users
hosts: webservers
vars_files:
- vars/users_vars.yml
tasks:
- name: Add webadmin group
ansible.builtin.group:
name: webadmin
state: present
- name: Create user accounts
ansible.builtin.user:
name: "{{ item['username'] }}"
groups: webadmin
loop: "{{ users }}"
执行命令:
ansible-navigator run -m stdout users.yml
2. 核心故障排查
(1)变量引用错误
- 故障表现:提示
'users' is undefined或item['username']不存在; - 排查方法:
-
检查
vars_files路径是否正确(相对路径基于 Playbook 所在目录); -
用
debug模块验证变量加载:- name: 验证 users 变量
ansible.builtin.debug:
var: users
verbosity: 1
- name: 验证 users 变量
-
确认变量文件语法正确(YAML 缩进为 2 个空格,无语法错误)。
-
(2)用户组创建失败
-
故障表现:提示
groupadd: permission denied; -
解决方法:开启特权升级,确保 Play 有足够权限创建用户组:
- name: Create multiple local users hosts: webservers vars_files: - vars/users_vars.yml become: yes # 开启 sudo 提权 become_user: root # 以 root 执行 tasks: - name: Add webadmin group ansible.builtin.group: name: webadmin state: present
3. 验证任务结果
执行后用临时命令验证用户和组是否创建成功:
# 检查 webadmin 组是否存在
ansible webservers -m ansible.builtin.command -a 'getent group webadmin'
# 检查 ops1 用户是否在 webadmin 组中
ansible webservers -m ansible.builtin.command -a 'id ops1'
三、LVM 存储配置任务故障排查
该任务通过 rhel_system_roles.storage 角色配置 LVM 存储池和逻辑卷,常见故障为磁盘不存在、角色依赖缺失、权限不足。
1. 任务核心代码与执行流程
# group_vars/webservers/storage_vars.yml 存储变量
storage_pools:
- name: apache-vg
type: lvm
disks:
- /dev/vdb
volumes:
- name: content-lv
size: 64m
mount_point: "/var/www"
fs_type: xfs
state: present
- name: logs-lv
size: 128m
mount_point: "/var/log/httpd"
fs_type: xfs
state: present
# storage.yml Playbook
- name: Configure storage on webservers
hosts: webservers
roles:
- name: redhat.rhel_system_roles.storage
执行命令:
# 先安装存储角色
ansible-galaxy collection install ./redhat-rhel_system_roles-1.19.3.tar.gz -p collections
# 执行 Playbook
ansible-navigator run -m stdout storage.yml
2. 核心故障排查
(1)磁盘 /dev/vdb 不存在
- 故障表现:提示
No such device /dev/vdb; - 排查方法:
-
用临时命令检查受管主机磁盘列表:
ansible webservers -m ansible.builtin.command -a 'lsblk' -
修正
storage_vars.yml中的disks参数,指向实际存在的磁盘(如/dev/vdc); -
若磁盘未初始化,先执行磁盘格式化(需特权): yaml
- name: 初始化磁盘 ansible.builtin.command: cmd: parted /dev/vdb mklabel gpt creates: /dev/vdb1 # 仅当磁盘未分区时执行 become: yes
-
(2)存储角色依赖缺失
- 故障表现:提示
role redhat.rhel_system_roles.storage not found; - 解决方法:
-
确认角色安装路径正确(
collections目录需与 Playbook 同层级); -
检查
ansible.cfg中collections_paths配置,确保包含角色安装路径:[defaults] collections_paths = ./collections:/usr/share/ansible/collections
-
(3)挂载点目录不存在
-
故障表现:提示
mount point /var/www does not exist; -
解决方法:在角色执行前创建挂载点目录:
- name: 创建挂载点目录 ansible.builtin.file: path: "{{ item.mount_point }}" state: directory mode: '0755' loop: "{{ storage_pools[0].volumes }}" become: yes
3. 检查模式验证配置
执行前用检查模式测试配置是否合法,避免实际执行时损坏数据:
ansible-navigator run -m stdout storage.yml --check
四、Cron 定时任务配置故障排查
该任务创建周期性磁盘使用率记录的 cron 任务,常见故障为用户不存在、权限不足、cron 语法错误。
1. 任务核心代码与执行流程
# create_crontab_file.yml
- name: Recurring cron job
hosts: webservers
tasks:
- name: Crontab file exists
ansible.builtin.cron:
name: Add date and time to a file
minute: "*/2"
hour: 9-16
weekday: 1-5
user: devops
job: df >> /home/devops/disk_usage
cron_file: disk_usage
state: present
执行命令:
ansible-navigator run -m stdout create_crontab_file.yml
2. 核心故障排查
(1)devops 用户不存在
-
故障表现:提示
user devops does not exist; -
解决方法:先创建 devops 用户,或修改
user参数为存在的用户:- name: 创建 devops 用户(前置任务) ansible.builtin.user: name: devops state: present become: yes - name: Crontab file exists ansible.builtin.cron: name: Add date and time to a file minute: "*/2" hour: 9-16 weekday: 1-5 user: devops job: df >> /home/devops/disk_usage cron_file: disk_usage state: present become: yes
(2)cron 任务执行权限不足
- 故障表现:cron 任务已创建,但
/home/devops/disk_usage无内容; - 排查方法:
-
检查 devops 用户对
/home/devops目录的写入权限; -
查看 cron 日志(
/var/log/cron),确认任务执行错误:ansible webservers -m ansible.builtin.command -a 'grep devops /var/log/cron' -
修正 job 命令的路径,使用绝对路径执行
df:job: /bin/df >> /home/devops/disk_usage # 用绝对路径避免环境变量问题
-
(3)cron 语法错误
- 故障表现:提示
invalid cron syntax; - 解决方法:验证 cron 时间参数格式:
minute: "*/2":每 2 分钟执行(合法);hour: 9-16:9 点到 16 点(合法);weekday: 1-5:周一到周五(合法,1 = 周一,7 = 周日)。
3. 验证 cron 任务
执行后检查 cron 配置文件和任务状态:
# 查看 devops 用户的 cron 任务
ansible webservers -m ansible.builtin.command -a 'crontab -l -u devops'
# 检查 cron 配置文件是否生成
ansible webservers -m ansible.builtin.stat -a 'path=/etc/cron.d/disk_usage'
五、网络接口配置任务故障排查
该任务通过 rhel_system_roles.network 角色配置网卡 IP,常见故障为网卡名称错误、IP 地址冲突、角色参数错误。
1. 任务核心代码与执行流程
# group_vars/webservers/network.yml 网络变量
network_connections:
- name: eth1
type: ethernet
ip:
address:
- 172.25.250.40/24
# network_playbook.yml Playbook
- name: NIC Configuration
hosts: webservers
roles:
- redhat.rhel_system_roles.network
执行命令:
ansible-navigator run -m stdout network_playbook.yml
2. 核心故障排查
(1)网卡名称 eth1 不存在
- 故障表现:提示
Connection eth1 not found; - 排查方法:
-
用临时命令查看受管主机实际网卡名称:
ansible webservers -m ansible.builtin.command -a 'nmcli device status' -
修正
network.yml中的name参数,指向实际网卡(如ens33、enp0s3):network_connections: - name: ens33 # 替换为实际网卡名称 type: ethernet ip: address: - 172.25.250.40/24
-
(2)IP 地址冲突
- 故障表现:任务执行成功,但网卡无法启用;
- 排查方法:
-
测试 IP 地址是否被占用:
ansible webservers -m ansible.builtin.command -a 'ping -c 1 172.25.250.40' -
更换未被占用的 IP 地址(如
172.25.250.41/24)。
-
(3)网络角色参数不完整
-
故障表现:IP 配置未生效,提示
missing required parameters; -
解决方法:补充网络连接的必要参数(如启用连接、设置网关):
network_connections: - name: ens33 type: ethernet state: up # 启用连接 ip: address: - 172.25.250.40/24 gateway4: 172.25.250.1 # 配置网关(可选) dns: - 8.8.8.8 - 8.8.4.4
3. 验证网络配置
执行后检查网卡 IP 和连接状态:
# 查看网卡 IP 配置
ansible webservers -m ansible.builtin.command -a 'ip addr show ens33'
# 检查网络连接状态
ansible webservers -m ansible.builtin.command -a 'nmcli connection show ens33'
六、核心总结
- 仓库配置:重点排查 GPG 密钥可达性 / 完整性、baseurl 网络连通性,临时关闭 GPG 检查可快速定位问题;
- 用户创建 :确保变量加载正确、开启特权升级,用
debug模块验证变量,用id命令验证结果; - 存储配置:先确认磁盘存在且未被占用,检查角色安装路径,用检查模式测试配置合法性;
- Cron 任务:保证用户存在、命令使用绝对路径,查看 cron 日志定位执行错误;
- 网络配置 :匹配实际网卡名称,补充必要的网络参数(如
state: up),避免 IP 地址冲突。