首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Terragrunt和公共变量

Terragrunt和公共变量
EN

Stack Overflow用户
提问于 2020-04-10 21:10:20
回答 3查看 1.8K关注 0票数 1

我正在试着做一些相当简单的事情,但似乎不能理解它。我有以下结构:

代码语言:javascript
复制
- terragrunt.hcl
-----dummy/
---------main.tf
---------terragrunt.hcl

我希望在根级别设置一些常见变量,并在main.tf中使用它们。我该如何在root terragrunt级别中声明变量,并让它们在下游可用?

我曾尝试将它们设置为根目录中的输入,但随后必须在虚拟级别显式声明“变量”,以便提取输入。我希望以某种方式在根级别定义这些东西,而不是在虚拟/级别重复变量声明。这可行吗?

EN

回答 3

Stack Overflow用户

发布于 2021-03-21 12:01:05

您确实可以这样做,这里有文档:https://terragrunt.gruntwork.io/docs/reference/built-in-functions/#read_terragrunt_config

您可以合并在任何模块之上的某个文件中定义的所有输入。

从文档中:

read_terragrunt_config(config_path,default_val)解析给定路径处的terragrunt配置,并将结果序列化到一个映射中,该映射可用于引用解析的配置的值。此函数将公开terragrunt配置的所有块和属性。

例如,假设您有一个名为common.hcl的配置文件,其中包含通用输入变量:

代码语言:javascript
复制
inputs = {
  stack_name = "staging"
  account_id = "1234567890"
}

您可以使用read_terragrunt_config在另一个配置中读取这些输入,并将它们合并到输入中:

代码语言:javascript
复制
locals {
  common_vars = read_terragrunt_config(find_in_parent_folders("common.hcl"))
}

inputs = merge(
  local.common_vars.inputs,
  {
    # additional inputs
  }
)

此函数还接受一个可选的第二个参数,如果该文件不存在,将返回该参数:

代码语言:javascript
复制
locals {
  common_vars = read_terragrunt_config(find_in_parent_folders("i-dont-exist.hcl", "i-dont-exist.hcl"), {inputs = {}})
}

inputs = merge(
  local.common_vars.inputs, # This will be {}
  {
    # additional inputs
  }
)
票数 2
EN

Stack Overflow用户

发布于 2020-04-11 18:41:42

其他工具,如Ansible,具有目录层次结构,其中子级可以引用或覆盖在父级设置的变量的值。

Terraform没有这样的机制,每个包含tf文件的目录都是一个单独的Terraform模块。因此,目录层次结构不能用于传递/inherit/reference Terraform变量。

也许让“下游或上游”的想法去做更好。

定义公共变量并在其他模块之间共享它们的一种方法是Data-only Modules 。扩展这一点并使公共变量在世界范围内可用是使用Terraform registry,尽管它不是预期的用途。

票数 1
EN

Stack Overflow用户

发布于 2020-04-30 05:25:50

根据Terragrunt文档:“目前您只能引用在同一配置文件中定义的本地变量。Terragrunt不会自动将在包含块的父配置中定义的本地变量包含到当前上下文中。”

但是,有一种方法可以做到这一点:

terragrunt创建一个包含公共变量的文件(例如,子

  1. 中的myvars.hcl)
  2. Load:

本地{ myvars = read_terragrunt_config(find_in_parent_folders("myvars.hcl")) foo = local.myvars.locals.foo }

希望这能有所帮助!

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

https://stackoverflow.com/questions/61140984

复制
相关文章

相似问题

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