1
2
3
4
5
作者:李晓辉

微信联系:Lxh_Chat

联系邮箱: 939958092@qq.com

验证自动化环境概述

创建一个自动化环境并不代表一切都顺利。我们要确保它在各种情况下都能稳定运行,才能真正做到高效工作。而为了避免出现那些“哎呀,出问题了”的情况,我们需要一种既简单又高效的方法来验证自定义环境是否真的能如我们预期般顺利运作。

这时,ansible-navigator 就是我们的好帮手!它不仅能帮我们管理 Ansible 环境,还能轻松运行一些测试,快速确认环境配置是否正确,能不能顺利执行任务。这样就能避免那些自动化过程中的小意外,保证一切顺利进行。

在这篇文章中,我会带你了解如何用 ansible-navigator 来测试自定义的自动化执行环境是否靠谱,并且我还会讲讲怎么把这个环境分享给团队或其他项目,确保大家都能复用、版本管理也不麻烦。通过这种方式,我们不仅能让每个环节更稳,也能让团队合作变得更高效、顺畅。

本地测试⾃动化执⾏环境

如果你希望确保自定义自动化执行环境使用其内部集合,而不依赖于系统中本地安装的集合,可以选择从系统中删除这些集合。首先,使用 ansible-galaxy 命令列出当前已安装的集合,然后决定是否需要删除不必要的集合。

1
2
3
4
5
6
7
[user@host ~]$ ansible-galaxy collection list
# /home/user/.ansible/collections/ansible_collections
Collection Version
----------------- ------
ansible.controller 4.2.0
community.crypto 2.7.0
community.general 5.6.0

ansible-galaxy collection list 命令的输出还会显示每个集合的安装位置,直接删除这个文件夹

1
rm -rf /home/user/.ansible/collections/ansible_collections

如果你的新自动化执行环境使用了自定义集合,可以创建一个简单的 playbook 来测试这些集合中的一个或多个模块或角色。通过这种方式,你可以确保自定义集合中的功能在新的执行环境中能够正常工作。

假设你有一个自定义集合 my_custom_collection,并且该集合中包含一个名为 my_custom_module 的模块,你可以编写一个简单的 playbook 来验证该模块是否正常工作。

1
2
3
4
5
6
7
8
---
- name: 测试自定义集合中的模块
hosts: localhost
tasks:
- name: 使用 my_custom_module 模块
my_custom_collection.my_custom_module:
param1: value1
param2: value2

如果你想利用新的自动化执行环境来运行你的测试 playbook,可以使用 ansible-navigator 命令。这里有几个选项可以帮助你灵活配置和运行:

  1. 指定清单文件或目录: 使用 --inventory(或 -i)选项来告诉 Ansible 从哪里读取你的清单文件或清单目录。

  2. 指定自动化执行环境镜像: 使用 --execution-environment-image(或 --eei)选项来指定你想用的自动化执行环境容器镜像。

  3. 避免从仓库拉取镜像: 如果本地已经有了你需要的容器镜像,可以加上 --pull-policy never(或 --pp never)选项,这样就不会再从容器仓库拉取镜像了。如果没有这个选项,而且你选择的是 latest 标签,ansible-navigator 会尝试从像 Docker Hub 这样的仓库拉取镜像。

  4. 启用特权升级: 如果你的 playbook 需要进行特权升级,但又没有使用 become: true,可以加上 --become(或 -b)选项来启用特权升级。

  5. 输出到终端: 如果你想把 playbook 的输出直接显示在终端,可以加上 --mode stdout(或 -m stdout)选项,或者直接在默认的交互模式下运行。

1
ansible-navigator run test_playbook.yml -i inventory --eei localhost/ee-demo:v2.0 --pp never -b -m stdout

共享⾃动化执⾏环境

确定测试完毕后,可以上传到镜像仓库做同事间的共享

1
2
3
podman tag localhost/ee-demo:v2.0 hub.example.com/mynamespace/ee-demo:v2.0
podman login hub.example.com
podman push hub.example.com/mynamespace/ee-demo:v2.0