gpt4 book ai didi

terraform - 在 variavles.tf 中为 type = map(object()) 添加默认字段

转载 作者:行者123 更新时间:2023-12-05 01:33:49 26 4
gpt4 key购买 nike

我的 variables.tf 文件中有以下变量:

variable "accounts" {
type = map(object({
field1 = string,
field2 = list(string),
field3 = list(string),
field4 = list(string),
field5 = string
}))
}

我需要添加一个默认字段,这样我的用户就不必指定每个字段。例如,如果 field2 是一个空列表,我不希望用户必须定义​​ field2 =[]

我已经尝试了以下的一些变体,但似乎没有任何效果。

default = {
default = {
"field1" = "",
"field2" = [],
"field3" = [],
"field4" = [],
"field5" = ""
}
}

有人知道如何做或知道这是否可能吗?

最佳答案

在今天的 Terraform 中最接近的是让你的调用者将属性值设置为 null,然后在你的模块中以某种方式处理那个 null

一种方法是将输入变量与对其进行规范化的本地值组合,如下所示:

variable "example" {
type = map(object({
a = string
b = string
}))
}

locals {
example = {
for k, v in var.example : k => {
a = coalesce(v.a, "default a")
b = coalesce(v.b, "default b")
}
}
}

The coalesce function如果你有一个不是 null"" 的回退值,这可能是一个不错的选择,但实际上你可以在这里使用你喜欢的任何表达式/函数来处理 null 大小写以任何适合您需要的方式。

然后您可以在模块的其他地方使用 local.example 来获取规范化值,或者使用 var.example 来获取调用者给出的原始值。

从调用者的角度来看,省略这两个属性看起来像这样:

  example = {
a = null
b = null
}

Terraform v0.14(在我写这篇文章时即将发布第一个测试版)将包含一个 experimental new feature允许在类型约束中将对象类型属性标记为可选:

terraform {
experiments = [module_variable_optional_attrs]
}

variable "example" {
type = map(object({
a = optional(string)
b = optional(string)
}))
}

这个新的 optional(...) 注释的作用是调用者可以在传入对象值时省略该属性,在这种情况下,Terraform 将通过插入该属性来执行类型转换值为 null,而不是像默认情况下那样返回错误。

结合我上面展示的规范化方法,这将实现您正在寻找的模块接口(interface),而无需调用者显式设置 null 以省略属性:

  example = {}

除非此功能在 Terraform 0.14 系列期间看到一些停止展示的反馈,否则它可能会在 Terraform 0.15 中稳定下来。

关于terraform - 在 variavles.tf 中为 type = map(object()) 添加默认字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64336021/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com