localenv 开发人员指南
此集合中的 “localenv” 角色会设置运行集成测试所需的外部依赖项。其理念是为贡献者提供一种预打包的方式,以一致且可重复的方式设置其本地环境。
注意
本指南正在进行中,并且非常缺乏细节。目前,如果您正在考虑新的 localenv,最好在存储库中打开一个 issue 来讨论它。查看 setup_localenv_docker
也应该会有所帮助,因为它是目前最完整的。
所需的外部依赖项
HashiCorp Vault
集成测试需要一个 Vault 服务器。建议使用 Vault 开发服务器模式,因为它是启动服务器最简单快捷的方式。
出于我们的目的,必须使用未加密(纯 HTTP)的监听器,因为大多数测试都期望以这种方式连接。
要运行专门处理 TLS/HTTPS 访问的测试,您必须使用启用 TLS 的监听器启动 Vault 服务器。必须提供 TLS 地址:端口和 CA 证书(如果自签名,则为证书本身)。
需要 Vault 服务器的根令牌,因为集成测试会更改 Vault 的配置,并希望拥有该令牌才能这样做。可以在启动时让 Vault 生成令牌,然后再检索它,但最简单的方法可能是预先生成一个令牌,并通过 -dev-root-token-id
选项或 VAULT_DEV_ROOT_TOKEN_ID
环境变量将其传递到 Vault(请参阅 开发选项)。
相关的 integration_config.yml
变量
变量 |
示例 |
描述 |
---|---|---|
|
|
您的 Vault 测试服务器的完整 HTTP URL。 |
|
|
您的 Vault 测试服务器的完整 HTTPS URL。 |
|
|
用于向 Vault 进行身份验证的根令牌。 |
|
|
正在使用的 Vault 版本(通常由 localenv 写入,因此手动设置的值不会在任何地方使用)。 |
|
|
为 Vault 的 TLS 监听器签名的 CA 的公共证书(如果自签名,则为证书本身)。 |
代理服务器
代理服务器用于测试代理连接选项。
理论上,任何支持 http/s 目标的代理都可以用于此目的,但建议使用 tinyproxy,因为它很小巧,易于配置和运行,并且可以在软件包管理器和容器中使用。
相关的 integration_config.yml
变量
变量 |
示例 |
描述 |
---|---|---|
|
|
您的代理服务器的完整 HTTP URL。 |
MMock 服务器
MMock(Monster Mock 的缩写) 是一个 HTTP 服务器,旨在模拟 HTTP 响应。它也可以透明地代理到真实的服务器。我们使用它来代理我们的测试 Vault 服务器,同时拦截对 Vault 的某些 API 调用并返回模拟的响应。
这对于在我们的 CI 环境中更难设置的 Vault 集成很有用。
例如,我们将此用于测试 aws_iam
身份验证方法,因为我们没有可以从 GitHub CI 使用、配置和连接的 AWS 帐户。
对于这些集成测试,所有 Vault 交互都定向到 MMock 而不是直接定向到 Vault,并且我们预先配置 MMock 以模拟真实 Vault 服务器的成功和失败响应的方式来响应相关的调用。
相关的 integration_config.yml
变量
变量 |
示例 |
描述 |
---|---|---|
|
|
MMock 服务器的完整 HTTP URL。 |
localenv 角色约定
使用
files/.output
来保存生成的工件。任何生成的内容都应在
.gitignore
文件中;反之,任何不在.gitignore
文件中的内容都不应被此过程覆盖或修改。也就是说,由此不应产生任何 git 状态的更改。考虑提供一个
setup.sh
脚本,以避免手动运行ansible-
命令。它理想情况下应在当前工作目录无关的情况下正确运行。生成一个可用的
integration_config.yml
文件,使其可以使用 localenv 的结果。在角色输出中生成它,而不是在角色外部生成。将其复制到正确的位置,但不要覆盖现有的文件。如果角色有外部依赖项,请尝试将这些依赖项编入文件,以便由正确的工具使用,例如用于
ansible-galaxy
的requirements.yml
等。localenv 角色旨在 在
ansible-test
环境之外运行,但它们可以(重)用其他角色。