Ansible Navigator 简介
Ansible Navigator
ansible-navigator (自动化内容导航器) 是红 帽 Ansible 自动化平台 2 中推出的一个新工具。它将 ansible-playbook、ansible-inventory、ansible-config 和 ansible-doc 提供的功能组合到一个顶层接口中。
ansible-navigator 的好处是:环境的隔离,专项专用。通过使用有专用功能的镜像 image,可以是自己做的,也可以用别人做好的。来满足需要。因为实在容器内运行的,所以也不影响宿主机。
ansible-navigator 提供了一个基于文本用户界面(TUI) 的进行交互方式运行,也可以添加 –mode stdout (或 -m stdout) 以非交互式方式运行。
ansible-playbook 和 ansible-navigator -m stdout 的运行方式一样。是以非交互方式运行的
1 | [user@host ~]$ ansible-playbook playbook.yml -i inventory |
我们来看看 ansible-navigator 的运行方式吧
1 | [user@host ~]$ ansible-navigator run playbook.yml -i inventory |

我们主要关注这几个参数:
Play name每一行就是一个play,一个任务。Ok运行成功了多少Changed成功改变了多少Failed运行失败的
通过上图我们可以看到一共运行了 3 个play:
- 第一个 play 是“Ensuring HAProxy is deployed”,它运行了 9 个任务,其中 6 个任务进行了更改。
- 第二个 play 是“Ensuring Apache HTTP Server is deployed”,它运行了 14 个任务,其中 8 个任务进行了更改。
- 第三个 play 是“Ensuring web content is deployed”,它运行了 4 个任务,其中两个进行了更改。
我们可以输入每个play的编号,来查看指定play的详细内容。有2种方式:
- 在交互式界面键盘直接键入编号进入。
- 输入冒号加上数字编号
:编号,我要看编号为0的play,输入:0进入。

这里我们可以看到任务名称、作用的主机和运行结果。很清晰,查看每个任务的详细信息也是输入冒号加上编号。现在我要查看编号2的任务的详细信息,输入:2

返回上一级按 ESC。完全退出按 q 或者 :quit
ansible-navigator 需要自动化执行环境。它是容器镜像 image, 其中包含 Ansible 内容集合、其软件依赖项,以及一个可运行 playbook 并与 Ansible 交互的最小 Ansible 引擎。在一个统一的 Ansible 环境中简化自动化代码的开发、测试和部署。
redhat 官方提供了一些自动化执行环境,我们也可以自定义执行环境。
使用自定义执行环境的好处是可以避免在控制节点上创建多个 Python 虚拟环境。红帽 Ansible Tower 需要多个 Python 虚拟环境,以便支持 Ansible、模块、Python 库和其他软件依赖项的不同组合。这很难开发、部署和管理。红 帽 Ansible 自动化平台 2 使用多个自动化执行环境,而不是多个 Python 虚拟环境。在 Ansible 自动化平台中,可以在自定义执行环境中创建定制的环境,使用 ansible-navigator对其进行测试,并将其作为容器镜像分发到控制节点。
运行ansible-navigator 默认使用 registry.redhat.io/ansible-automation-platform-22/ee-supported-rhel8:latest 的容器镜像。
参数 –execution-environment-image imagename:tag 来指定执行环境
配置受管主机的身份验证
ansible-navigator 需要能够登录受管主机并获得这些主机的超级用户特权。最简单方法是对帐户使用基于 SSH 密钥的身份验证,该帐户应当允许通过 sudo 进行特权升级,而无需输入密码。
准备基于 SSH 密钥的身份验证
在控制节点上 Ansible 配置文件的 [defaults] 部分中,将 remote_user 指令设置为计划在受管主机上使用的用户帐户的名称。
使用 ssh-keygen 命令,为运行 ansible-navigator 的常规用户帐户生成 SSH 密钥对。
在每一受管主机上 remote_user 帐户的 ~/.ssh/authorized_keys 文件中,安装该密钥对的公钥。使用 `ssh-copy-id user@host 命令来执行此操作,其中 user 是远程用户(受管节点用户),而 host 是其中一个受管主机。
在受管主机上配置 sudo,授予 user sudo 且免密。
为自动化执行环境提供私钥
ansible-navigator 在容器中运行,所以访问不了用户的 ~/.ssh 目录,就没有免密访问受管主机的权限。
在控制节点运行 ssh-agent 命令启动 SSH 代理。 ssh-add 命令将私钥添加到代理中。 在图形化登录控制节点时会自动运行这些命令。身份验证将自动适用于该图形登录会话中的所有终端。
但是用ssh 远程控制节点,必须运行 eval $(ssh-agent) 命令来自行启动 ssh-agent。在同一 shell 中,运行 ssh-add,并在必要时提供私钥的密语。然后,您可以在同一 shell 中运行 ansible-navigator 并进行身份验证。
运行自动化内容导航器(ansible-navigator)
使用 ansible-navigator 命令如果不带参数运行该命令或以 ansible-navigator welcome 形式运行,它将以交互模式启动。这会显示一个帮助页面,描述该工具提供的子命令。
早期 Ansible 命令和ansible-navigator 命令的比较
| 早期的 Ansible 命令 | 自动化内容导航器子命令 |
|---|---|
| ansible-playbook | ansible-navigator run |
| ansible-config | ansible-navigator config |
| ansible-doc | ansible-navigator doc |
| ansible-inventory | ansible-navigator inventory |
自动化内容导航器还提供其他的功能。大多数子命令可以从命令行或交互式自动化内容导航器会话中运行,但有些命令不支持 -m stdout 选项。
下表简要介绍了可用的子命令。
| 子命令 | 描述 |
|---|---|
| collections | 获取有关已安装集合的信息。 |
| config | 检查当前的 Ansible 配置。 |
| doc | 检查插件的 Ansible 文档。 |
| help | 显示 ansible-navigator 的详细帮助。 |
| images | 检查执行环境。 |
| inventory | 浏览清单。 |
| log | 查看当前的日志文件。 |
| open | 在文本编辑器中打开当前页面。 |
| replay | 重播 playbook 构件。 |
| run | 运行 playbook。 |
ansible-navigator welcome 显示的帮助页面与上表类似。在交互式会话中运行子命令时,键入 : 可启动命令,如 :config。
运行 Playbook
从命令行使用 ansible-navigator run 命令或以交互方式使用 :run 子命令,以使用自动化内容导航器来运行 playbook。ansible-navigator run 命令支持的选项大部分与 ansible-playbook 命令相同。
在使用默认 interactive 模式(而非 stdout 模式)时,可以按照上文所述以交互方式检查 playbook 输出。例如,可以显示失败的 play 或失败 play 中特定任务的详细信息。
检查以前的 Playbook 运行
自动化内容导航器提供了一项新的重播功能,可显示上一次 playbook 运行的输出。如果已启用 playbook 构件(默认为启用),会生成一个 JSON 构件文件,该文件包含 playbook 运行中的所有信息。
从命令行使用 ansible-navigator replay 命令或在交互模式中使用 :replay 子命令,以检查上一次 playbook 运行。大多数重播文件可以安全地忽略甚至删除。如果您计划保存重播文件,请考虑重命名该重播文件,以便您可以更轻松地识别它。
重播文件的一个优点是,如果 playbook 运行失败,您可以与其他开发人员或支持团队共享其重播文件。他们可以继续进行故障排除,而无需访问项目目录中的所有文件,如 playbook、角色、清单文件和变量文件等。
阅读文档
自动化内容导航器提供对插件(如模块、查找和回调)文档的访问,与 ansible-doc 命令非常相似。
与 ansible-doc 命令的一个主要区别是,ansible-navigator 不支持使用 –list (-l) 选项来列出特定类型的所有插件。必须明确指定插件名称。
例如,运行 ansible-navigator doc ansible.posix.firewalld 来显示 ansible.posix.firewalld 模块的文档。从自动化内容导航器交互式会话运行子命令 :doc ansible.posix.firewalld 效果一样。
获取帮助
自动化内容导航器提供多种方式来获取帮助。在交互模式中运行 ansible-navigator ,输入 :help 来打开帮助页面。
或用 ansible-navigator –help (或 -h) 可显示命令语法并描述命令选项。
