在Terraform中使用list和for_each时如何定义输出列表

时间:2020-03-17 06:29:56

标签: terraform terraform-provider-gcp

我正在尝试使用terraform部署BigQuery计划查询,但我不知道如何使用listfor_each语法。

我有这个模板文件。

SELECT *
FROM mydataset.mytable_${suffix}

然后使用template_file模块生成查询列表。 var.suffix_list这里是字符串列表。

data "template_file" "query" {
  for_each = var.suffix_list # list(string)
  template = "file/path/to/template/file"
  vars = {
    suffix    = each.value
  }
}

我要从此模块生成查询列表。

output "query" {
  value = # a list of rendered query
}

此输出将是google_bigquery_data_transfer_config资源的输入。

resource "google_bigquery_data_transfer_config" "query_config" {
  for_each                 = # a list of rendered query
  data_refresh_window_days = var.data_refresh_window_days
  data_source_id           = "scheduled_query"
  display_name             = var.display_name
  disabled                 = var.disabled
  destination_dataset_id   = var.destination_dataset_id
  location                 = var.query_location
  project                  = var.gcp_project
  schedule                 = var.query_schedule
  params = {
    destination_table_name_template = var.destination_table_name_template
    query                           = each.value
  }
}

如何为google_bigquery_data_transfer_config输出定义和输入? 预先感谢。

1 个答案:

答案 0 :(得分:2)

要完成这项工作,需要做几件事。

您对for_each的参数应该是一个集合,因此您需要使用

  for_each = toset(var.suffix_list)

在模板本身中,变量名为suffix,但是,您正在传递变量schema。这些应该匹配。

template参数实际上需要是模板的文本。因此,您需要使用file函数来读取文件,例如

  template = file("path/to/template/file")

然后,最后,要编写您的实际输出,可以使用列表理解

output "query" {
  value = [for query in data.template_file.query : query.rendered]
}