1

我有一个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

谢谢!

4

0 回答 0