我有一个值映射表(从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将根据引擎选择默认值。我可以明确触发此行为吗?
答案 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失败。