在Terraform中明确使用变量default

时间:2018-12-19 09:01:52

标签: terraform

我有一个值映射表(从Consul填充),用于配置我的资源,但是,如果缺少可选变量的值,我希望Terraform发挥作用,因为未提供该参数。例如:

resource "aws_db_instance" "db" {
  engine = "${lookup(config_map, "db_engine", "postgres")}"
  port   = "${lookup(config_map, "db_port", "<pick default for the engine>")}"
}

如果未给出port,则Terraform将根据引擎选择默认值。我可以明确触发此行为吗?

1 个答案:

答案 0 :(得分:1)

以下内容应该可以满足您的期望(语法经过验证,但是apply尚未经过测试:如果可以,我将更新答案,否则将其删除)。

首先,您应该在引擎和默认端口之间建立一个映射(这里是一个变量,但可以像config_map一样存储在Consul中):

variable "default_ports_by_engine" {
  type = "map"

  # key = engine, value = port
  default = {
    "postgres" = "3333"
    "mysql"    = "3334"
    # other engines/ports...
  }
}

然后,您可以在嵌套查询中使用此变量:

resource "aws_db_instance" "db" {
  engine = "${lookup(config_map, "db_engine", "postgres")}"
  port   = "${
    lookup(
      var.default_ports_by_engine,
      "${lookup(config_map, "db_engine", "postgres")}"
    )
  }"
}

请注意,如果在lookup中找不到db_engine,则不将第三个参数传递给default_ports_by_engine函数会使Terraform失败。