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
2
[user@host ~]$ ansible-playbook playbook.yml -i inventory
[user@host ~]$ ansible-navigator run playbook.yml -i inventory -m stdout

我们来看看 ansible-navigator 的运行方式吧

1
[user@host ~]$ ansible-navigator run playbook.yml -i inventory

alt text

我们主要关注这几个参数:

  • 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种方式:

  1. 在交互式界面键盘直接键入编号进入。
  2. 输入冒号加上数字编号:编号,我要看编号为0的play,输入:0 进入。

alt text

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

alt text

返回上一级按 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) 可显示命令语法并描述命令选项。​