带有变量的 Terraform GCE 元数据

带有变量的 Terraform GCE 元数据

我正在尝试将证书作为元数据传递给我的项目,以便每个新创建的实例都可以访问它。我正尝试通过 terraform 资源“google_compute_project_metadata”来实现它。我正尝试传递以下内容:

resource "google_compute_project_metadata" "cert" {
  metadata {
    ${var.cluster_prefix}crt-etcd="${var.cert_path}/cert.pem"
    ${var.cluster_prefix}key-etcd="${var.cert_path}/cert-key.pem"
  }
  depends_on = ["null_resource.generate_cert"]
}

但它失败了

Error loading modules: module cert: Error parsing .terraform/modules/b47b15a6431fda040235ee9e28b0836d/cert.tf: At 14:5: illegal char

据我所知,它不喜欢使用变量作为键。但如果我忽略它,项目的元数据就会变得一团糟。有什么解决方法吗?谢谢!

答案1

使用这样的块语法时不支持动态键,但是由于metadata是映射属性(而不是结构化子块),因此您可以使用构造动态映射的表达式来分配它,如下所示:

resource "google_compute_project_metadata" "cert" {
  metadata = "${map("${var.cluster_prefix}crt-etcd", "${var.cert_path}/cert.pem", "${var.cluster_prefix}key-etcd", "${var.cert_path}/cert-key.pem")}"
  depends_on = ["null_resource.generate_cert"]
}

有关其工作原理的更多信息,请参阅map该函数的文档

相关内容