localenv 开发者指南
此集合中的“localenv”角色设置运行集成测试所需的外部依赖项。其目的是为贡献者提供一种预打包的方式,以一致、可重复的方式设置其本地环境。
注意
本指南仍在编写中,并且非常缺乏细节。目前,如果您正在考虑新的 localenv,最好在存储库中打开一个问题来讨论它。查看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 的结果。在角色输出中生成它,而不是在角色外部生成它。将其复制到正确的位置,但不要覆盖现有的文件。如果角色具有外部依赖项,请尝试将其编码在可以被正确工具使用的文件(如
requirements.yml
用于ansible-galaxy
等)中。localenv 角色旨在在
ansible-test
环境**之外**运行,但它们可以使用其他角色。