目录
[一、Ansible-navigator 环境搭建与基础操作](#一、Ansible-navigator 环境搭建与基础操作)
[1. 切换工作目录](#1. 切换工作目录)
[2. 配置 navigator 执行环境](#2. 配置 navigator 执行环境)
[3. 镜像仓库登录](#3. 镜像仓库登录)
[4. 启动 navigator 工具](#4. 启动 navigator 工具)
[5. 验证 navigator 环境配置](#5. 验证 navigator 环境配置)
[二、Playbook 编写与执行:基础场景](#二、Playbook 编写与执行:基础场景)
[1. 向 dev 组批量添加用户](#1. 向 dev 组批量添加用户)
[编写 Playbook](#编写 Playbook)
[执行 Playbook](#执行 Playbook)
[2. 定义变量批量安装软件包](#2. 定义变量批量安装软件包)
[编写 Playbook](#编写 Playbook)
[执行 Playbook](#执行 Playbook)
[三、Playbook 进阶编写:条件判断与任务扩展](#三、Playbook 进阶编写:条件判断与任务扩展)
[1. 扩展软件安装任务,添加 Redis 安装](#1. 扩展软件安装任务,添加 Redis 安装)
[编写扩展后的 Playbook](#编写扩展后的 Playbook)
[2. 执行扩展后的 Playbook](#2. 执行扩展后的 Playbook)
[3. 自定义条件失败提示](#3. 自定义条件失败提示)
[四、Playbook 检查与故障排查](#四、Playbook 检查与故障排查)
[1. 开启检查模式验证 Playbook](#1. 开启检查模式验证 Playbook)
[2. 语法校验专项检查](#2. 语法校验专项检查)
[3. 排查模块参数类错误](#3. 排查模块参数类错误)
[4. 分级调试定位问题](#4. 分级调试定位问题)
[五、Playbook 执行结果留存](#五、Playbook 执行结果留存)
[1. 导出执行日志到文件](#1. 导出执行日志到文件)
[2. 生成执行报告(artifact)](#2. 生成执行报告(artifact))
一、Ansible-navigator 环境搭建与基础操作
Ansible-navigator 是 Ansible 核心执行工具,需先完成环境配置,才能开展后续 Playbook 编写与执行操作,核心包含目录切换、配置文件创建、仓库登录等步骤。
1. 切换工作目录
进入指定的专属工作目录,统一管理后续的配置文件和 Playbook 文件,执行命令:
cd ~/review-cr1
2. 配置 navigator 执行环境
通过重定向方式创建 ansible-navigator.yml 配置文件,指定执行环境镜像及拉取策略,命令如下:
cat > /home/student/review-cr1/ansible-navigator.yml << 'EOF'
---
ansible-navigator:
execution-environment:
image: utility.lab.example.com/ee-supported-rhel8:latest
pull:
policy: missing
EOF
3. 镜像仓库登录
访问私有镜像仓库前完成登录认证,保障镜像拉取权限,执行命令:
podman login utility.lab.example.com
注:原命令中
ytility为笔误,已修正为utility,避免登录失败。
4. 启动 navigator 工具
完成配置与登录后,直接启动 Ansible-navigator 工具,进入交互式操作界面,执行命令:
ansible-navigator
5. 验证 navigator 环境配置
启动后可通过如下命令快速验证配置是否生效,查看当前执行环境镜像信息:
ansible-navigator config dump -m stdout | grep execution-environment
二、Playbook 编写与执行:基础场景
基于配置好的 Ansible-navigator 环境,编写 Playbook 实现批量添加用户、批量安装软件包等基础自动化操作,充分利用 Ansible 循环、变量特性简化配置。
1. 向 dev 组批量添加用户
编写 users.yml Playbook,针对 dev 主机组,通过 loop 循环批量创建 joe、sam 用户,使用 ansible.builtin.user 内置模块实现,编写与执行命令如下:
编写 Playbook
cat > users.yml << 'EOF'
---
- name: Add users
hosts: dev
tasks:
- name: Add the users joe and sam
ansible.builtin.user:
name: "{{ item }}"
state: present # 显式指定用户存在,增强可读性
create_home: yes # 自动创建用户家目录
loop:
- joe
- sam
EOF
执行 Playbook
ansible-navigator run -m stdout users.yml
验证用户创建结果
通过临时命令快速检查 dev 组主机的用户是否创建成功:
ansible dev -m ansible.builtin.command -a 'id joe' -m stdout
2. 定义变量批量安装软件包
编写 install_packages.yml Playbook,通过 vars 定义 packages 变量指定软件包列表,使用 ansible.builtin.dnf 模块批量安装并保持最新版本,编写内容如下:
编写 Playbook
cat > install_packages.yml << 'EOF'
---
- name: Install packages
hosts: dev
become: yes # 开启特权升级,解决软件安装权限不足问题
vars:
packages:
- httpd
- mariadb-server
tasks:
- name: Install the required packages
ansible.builtin.dnf:
name: "{{ packages }}"
state: latest # 确保安装最新版本
update_cache: yes # 安装前更新dnf缓存
EOF
执行 Playbook
ansible-navigator run -m stdout install_packages.yml --become # --become 触发特权升级
三、Playbook 进阶编写:条件判断与任务扩展
在基础软件安装 Playbook 上进行扩展,增加条件判断逻辑,实现满足指定系统条件时才安装指定软件,提升 Playbook 的灵活性与适用性。
1. 扩展软件安装任务,添加 Redis 安装
编辑 install_packages.yml,保留原有基础软件安装任务,新增 Redis 安装任务,并通过 ansible_facts 系统事实添加条件判断,仅当主机交换内存大于 10MB 时才安装,编写命令与内容如下:
编写扩展后的 Playbook
cat > install_packages.yml << 'EOF'
---
- name: Install packages
hosts: dev
become: yes
vars:
packages:
- httpd
- mariadb-server
tasks:
- name: Gather system facts # 显式收集系统事实,确保swap信息可用
ansible.builtin.setup:
filter: ansible_swaptotal_mb # 仅收集swap内存信息,提升效率
- name: Install the required packages
ansible.builtin.dnf:
name: "{{ packages }}"
state: latest
update_cache: yes
- name: Install redis
ansible.builtin.dnf:
name: redis
state: latest
when: ansible_facts['swaptotal_mb'] > 10 # 条件判断:swap内存>10MB才安装
register: redis_install_result # 注册任务执行结果,便于后续查看
- name: Show redis install result # 输出Redis安装结果
ansible.builtin.debug:
var: redis_install_result
verbosity: 1
EOF
2. 执行扩展后的 Playbook
以标准输出模式执行更新后的软件安装 Playbook,查看条件执行结果,执行命令:
ansible-navigator run -m stdout install_packages.yml --become -v # -v 显示基础调试信息
3. 自定义条件失败提示
若需在 swap 内存不足时给出明确提示,可新增 assert 模块增强容错性:
# 在 Install redis 任务前新增如下任务
- name: Check swap memory for redis
ansible.builtin.assert:
that:
- ansible_facts['swaptotal_mb'] > 10
fail_msg: "Redis安装失败:主机swap内存不足10MB,当前为 {{ ansible_facts['swaptotal_mb'] }} MB"
success_msg: "主机swap内存满足Redis安装条件"
四、Playbook 检查与故障排查
Playbook 编写完成后,需先进行检查操作,提前发现并解决缩进、拼写、模块参数等语法与配置错误,保障执行成功率。
1. 开启检查模式验证 Playbook
使用 --check 参数开启检查模式,对 Playbook 进行语法与执行逻辑校验,不实际执行任务,执行命令:
ansible-navigator run -m stdout install_packages.yml --check --become
2. 语法校验专项检查
单独校验 Playbook 的 YAML 语法和模块调用是否合法,执行命令:
ansible-navigator run -m stdout install_packages.yml --syntax-check
3. 排查模块参数类错误
常见错误场景与解决
若执行时出现「fatal:不支持的参数模块 when」类错误,通常是 when 条件放错位置(如写在模块参数内),修正示例如下:
错误写法:
- name: Install redis
ansible.builtin.dnf:
name: redis
state: latest
when: ansible_facts['swaptotal_mb'] > 10 # 错误:when是任务级参数,不能写在模块内
正确写法:
- name: Install redis
ansible.builtin.dnf:
name: redis
state: latest
when: ansible_facts['swaptotal_mb'] > 10 # 正确:when放在任务层级
修正后重新执行
ansible-navigator run -m stdout install_packages.yml --become
4. 分级调试定位问题
若执行仍失败,通过 -v 系列参数开启分级调试,获取更详细的执行日志:
# 深度调试:展示远程执行脚本、用户等信息
ansible-navigator run -m stdout install_packages.yml --become -vvvv
五、Playbook 执行结果留存
1. 导出执行日志到文件
通过环境变量指定日志路径,留存执行记录便于后续复盘:
ANSIBLE_LOG_PATH=~/review-cr1/playbook_exec.log ansible-navigator run -m stdout install_packages.yml --become
2. 生成执行报告(artifact)
Ansible-navigator 默认生成 JSON 格式的执行报告,可通过如下命令查看:
# 列出当前目录的artifact文件
ls -l *-artifact-*.json
# 回放artifact文件,交互查看执行详情
ansible-navigator replay $(ls -t *-artifact-*.json | head -1) -m stdout
总结
- Ansible-navigator 环境配置核心是正确指定执行环境镜像,并完成私有仓库登录,避免镜像拉取失败;
- Playbook 编写需注意语法规范(如缩进、参数层级),批量操作优先使用
loop循环,变量定义增强可维护性; - 条件判断(
when)需放在任务层级,使用assert模块可提前校验前置条件,减少执行失败; - 故障排查优先通过
--syntax-check校验语法,再通过-v分级调试、artifact 回放定位根因。