介绍
当前的 EX294 风格工作流包含了 ansible-navigator,因为它能够通过一致的界面运行自动化任务,并且在可用时支持执行环境(Execution Environments)。在本 LabEx RHEL 10 虚拟机中,该工具已预装,且本实验使用本地执行模式,以确保工作流的稳定与高效。
在本实验中,你将创建 ansible-navigator.yml,配置 stdout 模式,为当前的本地虚拟机工作流禁用执行环境,并使用 navigator 运行一个 playbook。
构建一个小型 Navigator 项目
在此步骤中,你将创建 navigator 所需的项目结构、清单(inventory)和 Ansible 默认配置。Navigator 读取的项目文件与 ansible-playbook 大致相同。
创建目录并进入项目。
cd /home/labex/project
mkdir -p rhce-ansible/{inventory,playbooks}
cd rhce-ansible
创建清单文件。
cat > inventory/hosts <<'EOF'
[control]
control ansible_connection=local
EOF
此清单使用了一个本地主机别名,以便实验能够专注于 navigator 的行为而非 SSH 连接。该别名依然很重要:navigator 将 playbook 传递给 Ansible,而 Ansible 仍需通过清单来解析 hosts: control。
创建 ansible.cfg,以便 navigator 和 Ansible 使用相同的清单。
cat > ansible.cfg <<'EOF'
[defaults]
inventory = ./inventory/hosts
retry_files_enabled = False
interpreter_python = auto_silent
EOF
在 ansible.cfg 中保留 inventory 设置意味着后续的 ansible-navigator run 命令无需显式添加 -i 选项。这是 navigator 工作流与常规 Ansible 项目默认设置之间的首次关联。
检查 Navigator 可用性
在此步骤中,你将确认 ansible-navigator 已安装并查看其版本。在编写配置之前检查工具,可以更轻松地排查故障。
在执行此步骤的命令之前,请返回项目目录,以便相对路径指向 Ansible 项目。
cd /home/labex/project/rhce-ansible
运行版本查看命令。
ansible-navigator --version
输出应显示 ansible-navigator 的版本号。
如果该命令运行正常,说明在开始调试配置之前,工具本身已安装完毕。这种分离很有用:工具缺失与 ansible-navigator.yml 配置错误会导致完全不同的问题。
向 navigator 查询 run 子命令的帮助信息。
ansible-navigator run --help | sed -n '1,12p'
帮助输出确认了子命令的名称,并显示 navigator 需要一个 playbook 路径。你无需在此处背诵所有选项;目标是学会如何向已安装的工具查询帮助。
编写 ansible-navigator.yml
在此步骤中,你将创建 navigator 的配置文件。mode: stdout 设置使 navigator 能够打印常规的终端输出,这非常适合引导式实验。execution-environment.enabled: false 设置将执行环境限制为当前 RHEL 10 虚拟机本地。
在执行此步骤的命令之前,请返回项目目录,以便相对路径指向 Ansible 项目。
cd /home/labex/project/rhce-ansible
创建 ansible-navigator.yml。
cat > ansible-navigator.yml <<'EOF'
---
ansible-navigator:
mode: stdout
execution-environment:
enabled: false
playbook-artifact:
enable: false
EOF
本实验有三个关键设置。mode: stdout 将输出保留在终端中;execution-environment.enabled: false 告诉 navigator 使用本地安装的 Ansible 运行;禁用 playbook-artifact 则避免生成额外的结果文件,以免干扰主要工作流。
显示文件内容以验证缩进。YAML 缩进是语法的一部分。
sed -n '1,20p' ansible-navigator.yml
检查 mode、execution-environment 和 playbook-artifact 是否都嵌套在 ansible-navigator 下。如果其中任何一个键的起始列位置错误,YAML 解析出的结构可能与你的预期不符。
创建一个 Navigator 冒烟测试 Playbook
在此步骤中,你将编写一个简短的 playbook 供 navigator 运行。Playbook 是一个包含多个 play 的 YAML 列表。每个 play 都会指定目标主机和任务。
在执行此步骤的命令之前,请返回项目目录,以便相对路径指向 Ansible 项目。
cd /home/labex/project/rhce-ansible
创建 playbooks/navigator-check.yml。
cat > playbooks/navigator-check.yml <<'EOF'
---
- name: Check navigator execution
hosts: control
gather_facts: false
tasks:
- name: Write navigator proof file
ansible.builtin.copy:
dest: /home/labex/project/rhce-ansible/navigator-proof.txt
content: navigator ran this playbook
mode: '0644'
EOF
该 playbook 会在项目目录下写入一个文件,以便你在运行后有直观的证据。copy 模块具有幂等性:只有当内容或权限模式与请求的状态不同时,它才会更改文件。
在运行之前,使用 ansible-playbook --syntax-check 进行检查。语法检查可以在不更改主机的情况下捕获 YAML 和 playbook 结构错误。
ansible-playbook playbooks/navigator-check.yml --syntax-check
语法检查应打印一行 playbook:。它不会运行任务,但可以确认 Ansible 在 navigator 执行之前能够正确解析该 playbook。
使用 Navigator 运行 Playbook
在此步骤中,你将通过 navigator 运行 playbook。run 子命令用于执行 playbook,而项目配置使得输出在当前终端中清晰可读。
在执行此步骤的命令之前,请返回项目目录,以便相对路径指向 Ansible 项目。
cd /home/labex/project/rhce-ansible
运行 playbook。
ansible-navigator run playbooks/navigator-check.yml
成功的汇总信息应显示 failed=0。确认证明文件已创建。
由于配置了 mode: stdout,输出看起来应与常规的 ansible-playbook 运行结果类似。先阅读汇总信息,然后检查证明文件,将报告的任务结果与磁盘上的实际文件对应起来。
cat navigator-proof.txt
总结
你为本地 LabEx RHEL 10 工作流配置了 ansible-navigator,编写了一个有效的 playbook,并通过 navigator 运行了它。这为你后续的 RHCE Ansible 实验提供了一个可重复的执行模型。


