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_test_server_http

http://myvault:8200

Vault 测试服务器的完整 HTTP URL。

vault_test_server_https

https://myvault:8300

Vault 测试服务器的完整 HTTPS URL。

vault_dev_root_token_id

3ee9a1f7-f115-4f7c-90a3-d3c73361bcb5

用于向 Vault 进行身份验证的根令牌。

vault_version

1.7.3

正在使用的 Vault 版本(通常这是由 localenv 编写的,因此手动设置的值在任何地方都不会使用)。

vault_cert_content

-----BEGIN CERTIFICATE-----<snip>

为 Vault 的 TLS 侦听器使用的证书签名的 CA 的公共证书(如果是自签名证书,则为证书本身)。

代理服务器

代理服务器用于测试代理连接选项。

理论上,任何支持 http/s 目标的代理都可以用于此目的,但tinyproxy由于其体积小巧、易于配置和运行,并且可在包管理器和容器中使用,因此值得推荐。

相关的integration_config.yml变量

变量

示例

描述

vault_proxy_server

http://proxy:8080

代理服务器的完整 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变量

变量

示例

描述

vault_mmock_server_http

http://mmock:8900

MMock 服务器的完整 HTTP URL。

localenv 角色约定

  • 使用files/.output保存生成的工件。

  • 任何生成的项都应该在.gitignore中;相反,任何不在.gitignore中的项都不应该被此过程覆盖或修改。也就是说,不应该出现由此产生的 git 状态更改。

  • 考虑提供一个setup.sh来避免必须手动运行ansible-命令。理想情况下,它应该在不考虑当前工作目录的情况下正确运行。

  • 生成一个可用的integration_config.yml,允许使用 localenv 的结果。在角色输出中生成它,而不是在角色外部生成它。将其复制到正确的位置,但不要覆盖现有的文件。

  • 如果角色具有外部依赖项,请尝试将其编码在可以被正确工具使用的文件(如requirements.yml用于ansible-galaxy等)中。

  • localenv 角色旨在ansible-test环境**之外**运行,但它们可以使用其他角色。