新的地形。使用地形 0.12。我正在尝试改造我们的 Cloudflare 设置。
需要创建多个相同类型的资源(cloudflare provider page_rule 资源)并使用 config.tfvars 将值传递给资源“模板”。
我已经声明了一个 list(object({...})) 类型的变量。
需要一些对象参数是可选的,因此如果没有在 config.tfvars 中为某些列表元素指定条目,则创建的资源没有它们。
我已经阅读了 terraform 的 0.12 null 默认变量值,但我不确定是否有办法为 terraform 对象参数指定默认值。我见过的所有例子都只指定了参数的类型。
代码示例:
变量.tf
variable "example_page_rule"{
type = list(object({
cache_level = string,
ssl = string,
target = string
}))
}
Run Code Online (Sandbox Code Playgroud)
主文件
resource "cloudflare_page_rule" "page_rule" {
count = length(var.example_page_rule)
cache_level = var.example_page_rule[count.index].cache_level
ssl = var.example_page_rule[count.index].ssl
target = var.example_page_rule[count.index].target
}
Run Code Online (Sandbox Code Playgroud)
配置文件
page_rules = [
{
target = "www.target-url.com",
ssl = "flexible",
cache_level = "simplified",
},
{
target = "www.target-url.com",
cache_level = "simplified"
}
]
Run Code Online (Sandbox Code Playgroud)
当尝试使用上述配置进行规划时会发生错误:“ssl”值是必需的。
如果我将 config.tfvars 更改为以下内容,则所有 config.tfvars 都按预期工作,但如果可能,我想避免输入空值。
page_rules = [
{
target = "www.target-url.com",
ssl = "flexible",
cache_level = "simplified",
},
{
target = "www.target-url.com",
ssl = null,
cache_level = "simplified"
}
]
Run Code Online (Sandbox Code Playgroud)
jan*_*-di 15
自 Terraform 1.3(2022 年 9 月 21 日发布)起,对可选对象属性有了稳定的支持:
variable "object_variable" {
type = object({
attr1 = number # a required attribute
attr2 = optional(number) # an optional attribute (default = null)
attr3 = optional(number, 127) # an optional attribute with default value
})
}
Run Code Online (Sandbox Code Playgroud)
另请参阅https://www.terraform.io/language/expressions/type-constraints#optical-object-type-attributes。
Terraform 0.14 - 1.2通过实验module_variable_optional_attrs
:
请注意,此实验及其相关文档已在 v1.3.0 中删除,不再可用。如果您来自旧版本的实验,相同的变量将如下所示。
variable "object_variable" {
type = object({
attr1 = number # a required attribute
attr2 = optional(number) # an optional attribute (default = null)
attr3 = optional(number) # an optional attribute with default value
})
default = [
{
attr3 = 127
}
]
}
Run Code Online (Sandbox Code Playgroud)
这是一个功能请求,正在此处跟踪: https: //github.com/hashicorp/terraform/issues/19898。点击该链接并在原始帖子上给出 :+1:(竖起大拇指表情符号),以便他们的开发团队优先考虑它。
归档时间: |
|
查看次数: |
13410 次 |
最近记录: |