过滤 terraform 中的对象以在 gcp 中创建指标

Filtering through objects in terraform to create metrics in gcp

我正在做类似的事情(向 gcp 监控添加图表)

data "template_file" "templatefileone" {
  template = file("${path.module}/templatefileone.json.tmpl")
  count    = length(var.one)

  vars = {
    title           = var.metrics[count.index][0]
    metricName      = var.metrics[count.index][3]
    endpoint        = var.metrics[count.index][2]
    environmentName = "#ENVIRONMENT"
    applicationName = var.appName
    clusterName     = "#CLUSTERNAME"
    envName         = var.envName
  }
}

data "template_file" "templatefiletwo" {
  template = file("${path.module}/templatefiletwo.json.tmpl")
  count    = length(var.two)

  vars = {
    title           = var.jvmMetrics[count.index][0]
    metricName      = var.jvmMetrics[count.index][1]
    environmentName = "#ENVIRONMENT"
    applicationName = var.appName
    clusterName     = "#CLUSTERNAME"
    envName         = var.envName
  }
}

resource "google_monitoring_dashboard" "dashboard" {
  for_each = local.environmentsLabels

  dashboard_json = templatefile("${path.module}/dashboard.json.tmpl", {
    app_name = var.appName,
    env_name = each.key,
    widgets  = join(",",
    [for metric in sort(concat(
      data.template_file.templatefileone.*.rendered,
      [for xyz in data.template_file.templatefiletwo: xyz if (try(sm.vars.endpoint, "") != "")].*.rendered
    )) : doSomethingThatDoesntMatterHere()]
    )
  })

  project = var.projectId
}

我正在尝试筛选图表 'templatefiletwo',以便只有那些在变量 'endpoint' 中有内容的图表才会加入到 'widgets' 变量中。目前它看起来像:

 widgets  = join(",",
        [for metric in sort(concat(
          data.template_file.templatefileone.*.rendered,
          data.template_file.templatefiletwo.*.rendered
        )) : doSomethingThatDoesntMatterHere()]
        )

我预计

[for xyz in data.template_file.templatefiletwo: xyz if (try(sm.vars.endpoint, "") != "")]

只是 return 与 data.template_file.templatefiletwo 相同的东西,这样我就可以调用 .*.rendered 了,但显然它不能像这样工作。

经过半天的投入,我决定将它推送到环境并查看它发送给我的错误。 似乎我的代码一直都按预期完美运行,只是 IDEA 的 terrafrom 插件无法处理它并认为这是一个错误。我不会删除问题,因为它可能会为某人节省很多时间。