首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Terraform中指定模块的位置时使用变量

在Terraform中指定模块的位置时使用变量
EN

Stack Overflow用户
提问于 2021-04-29 06:50:07
回答 2查看 453关注 0票数 0

我试图运行以下代码:

代码语言:javascript
复制
locals {
    terraform_modules_git = "git::ssh://....@vs-ssh.visualstudio.com/v3/...../terraform-modules"
    terraform_modules_module = "resource_group?ref=v15.0.0"
}

module "MyModuleCall" {
    source = "${local.terraform_modules_git}/${local.terraform_modules_module}"
}

我的目标是将所有标记引用合并到一个地方,而不是用回购的名称多次复制长字符串和所有模块。

我得到了一个错误:

代码语言:javascript
复制
Error: Variables not allowed

  on main.tf line 12, in module "MyModuleCall":
  12:   source = "${local.terraform_modules_git}/${local.terraform_modules_module}"

Variables may not be used here.

有谁知道他们为何要这样做呢?使用变量有什么问题?有人看到附近有工作吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-04-29 06:58:27

您无法动态生成source。您必须显式硬编码,正如文档中所解释的那样

此值必须是没有模板序列的文字字符串;不允许任意表达式。

遗憾的是,除了使用前处理模板之外,我不知道有什么解决办法。预处理只会找到并用您想要的替换source

票数 2
EN

Stack Overflow用户

发布于 2021-04-29 18:56:02

Terraform中的依赖关系在执行程序之前是静态处理的,因为运行时需要访问所有涉及的代码(在Terraform的例子中,模块和提供程序),然后才能创建运行时上下文以执行任何代码。这与大多数其他编程语言相似,在运行主程序之前,通常使用单独的命令(如pip installnpm installgo get )安装依赖项。在Terraform的例子中,依赖安装程序是terraform init,而“运行程序”意味着运行terraform planterraform apply

因此,Terraform不能也不允许动态构造模块或提供者源地址.如果您需要从调用模块中指定的地址中抽象模块的物理位置和访问方法,那么一种选择是使用模块注册表告诉Terraform如何将本地地址(如yourcompany.example.com/yourteam/resource-group/azure )映射到Terraform将实际用于获取它的更复杂的Git。

然而,在实践中,大多数团队更喜欢直接指定他们的Git URL,因为它导致了一个更简单的整体系统,尽管这样做的代价是以后更难将模块移动到一个新的位置。两者之间的一个折衷方案是使用一个提供Terraform服务的托管服务,例如Terraform,但这当然是以在整个系统中引入另一个可能的故障点为代价的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67312304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档