集成测试
Ansible 集成测试系统。
通过 Playbook 进行 Playbook 测试。
一些测试可能需要凭据。凭据可以使用 credentials.yml 指定。
一些测试可能需要 root 权限。
注意
每个新的模块和插件都应该有集成测试,即使这些测试无法在 Ansible CI 基础设施上运行。在这种情况下,应该使用 unsupported
别名在 别名文件 中标记这些测试。
快速入门
强烈建议您安装并激活 argcomplete
Python 包。它为 bash
中的 ansible-test
测试运行器提供制表符补全功能。
配置
ansible-test 命令
以下示例假设 bin/
在您的 $PATH
中。实现此目的的简单方法是使用 env-setup
命令初始化您的环境
source hacking/env-setup
ansible-test --help
您也可以使用完整路径调用 ansible-test
bin/ansible-test --help
integration_config.yml
创建您自己的 integration_config.yml
版本可以允许设置一些可调参数,以帮助在您的环境中更好地运行测试。某些测试(例如,云测试)仅在提供访问凭据时才会运行。有关受支持凭据的更多信息,请参阅 tests/integration/
目录中的各种 cloud-config-*.template
文件。
先决条件
一些测试假设已安装 hg
、svn
和 git
,并且在路径中。某些测试(例如亚马逊网络服务的测试)需要单独的定义,这将在本文档后面介绍。
(完整列表待定)
非破坏性测试
这些测试将修改子目录中的文件,但不会执行安装或删除软件包或在这些测试子目录之外的操作。它们也不会重新配置或重启系统服务。
注意
在容器中运行集成测试
为了保护您的系统免受集成测试可能造成的任何潜在更改,并确保提供一套合理的依赖项,我们建议您始终使用 --docker
选项运行集成测试,例如 --docker ubuntu2204
。通过运行 ansible-test integration --help
获取支持的容器镜像列表。您可以在输出的目标 Docker 镜像部分找到它们。default
镜像用于健全性和单元测试,以及平台独立的集成测试,例如云模块的测试。
在 Fedora 34 容器中运行由我们的 CI 系统执行的所有 POSIX 平台测试,如下所示
ansible-test integration shippable/ --docker fedora34
您也可以排除特定的测试,例如针对单个模块的测试
ansible-test integration --exclude git
您也可以定位特定的测试,例如针对单个模块的测试
ansible-test integration ping
您可以使用 -v
选项使输出更详细
ansible-test integration lineinfile -vvv
使用以下命令列出所有可用的目标
ansible-test integration --list-targets
注意
Bash 用户
如果您将 bash
与 argcomplete
一起使用,请执行以下操作以获取完整列表:ansible-test integration <tab><tab>
破坏性测试
这些测试允许安装和删除一些简单的软件包。您可能希望将它们用于虚拟环境,例如 Docker。它们不会重新格式化您的文件系统
ansible-test integration destructive/ --docker fedora34
Windows 测试
这些测试会使用 winrm
连接插件和 Windows 模块。您需要定义一个包含远程 Windows Server 的清单以用于测试,并启用 PowerShell 远程处理才能继续。
运行这些测试可能会导致您的 Windows 主机发生更改,因此请不要在生产/关键的 Windows 环境中运行它们。
启用 PowerShell 远程处理(在 Windows 主机上通过远程桌面运行)
Enable-PSRemoting -Force
定义 Windows 清单
cp inventory.winrm.template inventory.winrm
${EDITOR:-vi} inventory.winrm
运行由我们的 CI 系统执行的 Windows 测试
ansible-test windows-integration -v shippable/
容器中的测试
如果您有一个安装了 Docker 或 Podman 的 Linux 系统,建议使用 Ansible 持续集成 (CI) 系统使用的相同容器运行集成测试。
注意
Podman
默认情况下,仅当未安装 Docker CLI 时才会使用 Podman。如果您安装了 Docker 但想使用 Podman,您可以通过设置环境变量 ANSIBLE_TEST_PREFER_PODMAN
来更改此行为。
注意
非 Linux 上的 Docker
不建议使用 Docker Engine 在非 Linux 主机(例如 macOS)上运行 Docker。某些测试可能会失败,具体取决于用于测试的镜像。在运行 integration
(而不是 network-integration
或 windows-integration
)时使用 --docker-privileged
选项可能会解决此问题。
运行集成测试
要在 Ubuntu 18.04 容器中运行 POSIX 平台的所有 CI 集成测试目标
ansible-test integration shippable/ --docker ubuntu1804
您也可以运行特定测试或选择不同的 Linux 发行版。例如,要在 Ubuntu 18.04 容器上运行 ping
模块的测试
ansible-test integration ping --docker ubuntu1804
容器镜像
容器镜像会定期更新。要查看当前的容器镜像列表
ansible-test integration --help
该列表位于目标 Docker 镜像和支持的 Python 版本标题下。
云测试的其他配置
要运行一些测试,您必须在 tests/integration 目录中提供一个名为 cloud-config-aws.yml
或 cloud-config-cs.ini
的文件,其中包含访问凭证。相应的 .template
文件可用于语法帮助。较新的 AWS 测试现在使用 tests/integration/cloud-config-aws.yml
文件。
AWS 的 IAM 策略
Ansible 需要相当广泛的权限才能在 AWS 账户中运行测试。这些权限可以提供给专用用户。在运行测试之前,需要配置这些权限。
测试策略
GitHub 仓库 mattclay/aws-terminator 包含用于所有现有 AWS 模块集成测试的两组策略。hacking/aws_config/setup_iam.yml playbook 可用于设置两个组
ansible-integration-ci 将应用必要的策略来运行任何未标记为 unsupported 的集成测试,并且旨在镜像 Ansible CI 使用的策略。
ansible-integration-unsupported 将应用额外的策略来运行标记为 unsupported 的集成测试,包括用于管理 IAM 角色、用户和组的测试。
创建组后,您需要创建一个用户并将该用户添加到这些组中。这些策略旨在最小化该用户的权限。请注意,虽然此策略将用户限制为一个区域,但这并不能完全限制该用户(主要是由于 Amazon ARN 表示法的限制)。该用户仍然具有查看帐户定义的广泛权限,并且还可以管理一些与测试无关的资源(例如,名称不同的 AWS lambda)。在任何情况下,都不应在主要生产帐户中运行测试。
其他必需的定义
除了安装策略并将其提供给运行测试的用户身份之外,还必须创建一个具有 lambda 基本执行权限的 lambda 角色 ansible_integration_tests。
网络测试
有关编写网络测试的指导,请参阅 资源模块集成测试。
在哪里了解更多信息
如果您想了解有关改进 Ansible 测试的计划的更多信息,请加入 Ansible 社区论坛