我有一个main.tf
看起来像这样的:
module "my-module" {
source = "./modules/my-module"
mymap = "${var.mymap}"
}
以及如下variables.tf
所示的文件:
variable "mymap" {
type = "map"
default = {
}
}
我想运行一个脚本来设置mymap
地图,无论何时terraform plan
或被terraform apply
执行。我知道 terraform 支持此处官方文档中所述的外部数据源,并且我可以执行以下操作:
data "external" "example" {
program = ["sh", /example-data-source.sh"]
}
module "my-module" {
source = "./modules/my-module"
mymap = "${data.external.example.result}" # this is the output from example-data-source.sh
}
问题是输出是一个 JSON 嵌套对象,mymap
据我所知应该是 HCL 格式。使用当前设置,我收到此错误:
command "sh" produced invalid JSON: json: cannot unmarshal string into go value of type string
JSON 是有效的(我已经检查过了)。
所以我想知道这样做的正确方法是什么?我错过了什么?
PS - 我知道在运行terraform commandsTF_VAR_mymap
之前设置了一个环境变量。但是,这意味着我需要做类似的事情并且我想避免它。TF_VAR_mymap=$(./somescript) terraform plan
谢谢!