Как определить список вывода при использовании list и for_each в terraform - PullRequest
0 голосов
/ 17 марта 2020

Я пытаюсь развернуть запланированный запрос BigQuery с использованием terraform, но я не знаю, как использовать синтаксис list и for_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 Ответ

1 голос
/ 17 марта 2020

Чтобы сделать эту работу необходимо несколько вещей.

Ваш аргумент 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]
}
...