Terraform如何在template_file中插值地图类型?

时间:2019-05-19 00:18:17

标签: terraform

我正在尝试将地图变量传递到template_file中,并引发此错误:

vars(varsname):”预期类型为“字符串”,无法转换为类型“ map [string] interface {}”

    data "template_file" "app" {

        template = "${file("./app_template.tpl")}"

        vars {
                container = "${var.container-configuration}"
        }
    }

variables.tf

    variable "container-configuration" {
        description = "Configuration for container"
        type        = "map"
        default     = {
                    image          = "blahblah.dkr.ecr.us-east-2.amazonaws.com/connect"
                    container-port = "3000"
                    host-port      = "3000"
                    cpu            = "1024"
                    memory         = "2048"
                    log-group      = "test"
                    log-region     = "us-east-2a"
                  }
    }

是否可以将地图传递到模板文件中进行插值?我在文档中没有发现任何明确的内容。

2 个答案:

答案 0 :(得分:0)

尚不支持传递地图,请参见template_file文档。

从该文章:

  

变量必须全部为基元。直接引用列表或地图会导致验证错误。

这意味着您需要分别逐个传递变量。

答案 1 :(得分:0)

Terraform v0.12引入了templatefile函数,该函数吸收了template_file数据源的主要用例,并接受任何类型的值:

templatefile("${path.module}/app_template.tpl", {
  container = var.container-configuration
})

Terraform v0.11和更早版本没有任何方法可以渲染具有非字符串值的模板。由于用于配置中表示映射值的协议的性质而存在限制:在Terraform v0.12中引入新协议之前,它只能表示字符串的映射。