如何将动态值传递到模块的“源”

问题描述 投票:0回答:1

我正在寻找选项来指定可重用的 aws 模块,这些模块存储在 gitlab 中的单独项目中。例如,如果有一个通用的 ec2 组件,我将在我的模块中调用它并传递任何特定变量等,

module "terraform_tags" {
  source = "git::https://gitlab.my.company.com/aws-ec2.git"
}

如果我在源中显式添加用户名和令牌,则该方法有效:

i.e., source = "git::https://username:<tokenvalue>@gitlab.my.company.com/aws-ec2.git"

但我希望以这样的方式编写该模块的代码:令牌值作为变量传递,而不是在代码本身中明确提及。如果我尝试将其添加为 gitlab 变量,则会出现错误,提示“值必须已知”。

关于如何实现这一目标有什么想法吗?

terraform
1个回答
0
投票

source
块中的
module
参数仅指定模块的location,而不是配置用于获取模块的凭据的适当位置。

因为您是从 Git 存储库安装,所以您必须配置 Git 本身,以拥有适当的用户名和密码来访问此 Git 存储库。 Git 有各种用于配置凭据的选项,包括一些可以与操作系统的“钥匙串”抽象或类似集成的选项。

如果您只想静态配置凭据,而不是从其他位置动态获取它们,您可以配置 Git 来执行此操作。

首先,您可以通过编辑 Git 配置文件来告诉 Git 该存储库使用哪个用户名,该文件在 Unix 操作系统上通常位于

~/.gitconfig
。以下条目配置用于您的 GitLab 服务器的用户名:

[credential "https://gitlab.my.company.com"]
    username = example

当您不使用单独的存储来保留密码时,Git 将密码存储在另一个单独的文件中

~/.git-credentials

此凭据文件存储用于每对用户名和 URL 的密码。如果您的用户名是“example”(如上所述)并且您的密码是“secret”,那么您可以将以下条目放入该文件中:

https://example:[email protected]

通过此配置文件条目和凭据条目,Git 应该将必要的凭据发送到您的 Git 服务器。 Terraform 通过运行普通的

git clone
命令从 Git 安装模块,然后该命令将使用这些设置。

© www.soinside.com 2019 - 2024. All rights reserved.