【问题标题】:Terraform optional nested object variableTerraform 可选嵌套对象变量
【发布时间】:2019-11-16 04:30:07
【问题描述】:

刚接触 terraform。使用 terraform 0.12。 我正在尝试改造我们的 Cloudflare 设置。

需要创建多个相同类型的资源(cloudflare 提供者 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    
      }))   
}

main.tf

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
}

config.tfvars

page_rules = [
{
   target = "www.target-url.com",
   ssl = "flexible",
   cache_level = "simplified",
},

{
   target = "www.target-url.com",
   cache_level = "simplified"
}
]

当尝试使用上述配置进行规划时出现错误:“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"
}
]

【问题讨论】:

    标签: terraform


    【解决方案1】:

    这是一个功能请求,正在这里跟踪:https://github.com/hashicorp/terraform/issues/19898。点击该链接并在原始帖子中添加一个:+1:(竖起大拇指表情符号),以便他们的开发团队优先考虑它。

    【讨论】:

      猜你喜欢
      • 2022-01-12
      • 1970-01-01
      • 2020-05-04
      • 2021-03-27
      • 1970-01-01
      • 2023-01-09
      • 1970-01-01
      • 1970-01-01
      • 2021-08-08
      相关资源
      最近更新 更多