【问题标题】:Pass/Override Terraform object variable via command line通过命令行传递/覆盖 Terraform 对象变量
【发布时间】:2021-06-15 05:26:09
【问题描述】:

我有一个 Terraform 配置(v0.14,AWS 提供商 3.32.0),其中我将某些资源类型的参数定义为对象(输入变量)。这是一个(简化的)示例:

variable "docker_config" {
  type = object({
    internal = number
    external = number
    protocol = string
  })
  default =
    {
      internal = 8300
      external = 8300
      protocol = "tcp"
    }
}

但是,我希望能够通过命令行或环境变量覆盖单个值。 我可以覆盖对象的各个值而不必传递整个对象吗?因此,请使用默认值并根据需要覆盖它们:

e。 G。 TF_VAR_docker_config.internal = 1234

TF_VAR_docker_config = "{internal = 1234}"

这会导致:

    {
      internal = 1234
      external = 8300
      protocol = "tcp"
    }

我的测试不起作用。可能吗?如果是,怎么做?

【问题讨论】:

    标签: terraform terraform-provider-aws terraform0.12+


    【解决方案1】:

    遗憾的是,您不能直接执行此操作。在不久的将来,optional 应该被添加到 object,这将简化这一点。

    目前,一个不完美的解决方法可能是将merge与常规map一起使用:

    variable "docker_config_default" {
      type = object({
        internal = number
        external = number
        protocol = string
      })
      
      default = {
          internal = 8300
          external = 8300
          protocol = "tcp"
        }
    }
    
    variable "docker_config" {
      type = map
      
      validation {
        # condition is not perfect and suited only for one 
        # attribute overwrite
        condition     = (can(var.docker_config["internal"]) 
                        || can(var.docker_config["external"]) 
                        || can(var.docker_config["protocol"]))
        error_message = "Must have internal, external or protocol."
      } 
    }
    
    locals {
      docker_config = merge(var.docker_config_default, var.docker_config)
    }
    
    output "test" {
      value = local.docker_config
    }
    

    您只需在代码中使用local.docker_config

    【讨论】:

    • 太糟糕了。我希望这允许配置资源(RDS、ECS 等),而不必维护大量单独的变量(每个参数一个变量)。但是,如果我需要额外的默认对象和每个对象的合并,这不是代码的简化。但无论如何,谢谢,有趣的想法,我绝对可以在某个时候使用。 :)
    • @Stefan optional object 的关键字很简单,但您仍然需要 merge
    猜你喜欢
    • 2012-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-11
    • 1970-01-01
    相关资源
    最近更新 更多