Используйте for_each для создания нескольких дисков и их моментальных снимков, используя ввод списка.

Я пишу код TF для создания нескольких дисков в GCP. Цель состоит в том, чтобы иметь сухой код и иметь список в качестве входных данных.

Мой var app_disks имеет следующее определение

variable "app_disks" {
  type = list(object({
    name = string
    size = number
  }))
}

И в моем main.tf я использую такую ​​​​переменную

  app_disks = [
    {
      name = loki
      size = 200
    },
    {
      name = repo
      size = 100
    }
  ]

И в моем модуле мой disk.tf выглядит так

locals {
  app_disk_map = {
    for disk in var.app_disks : "${disk.name}" => disk
  }
}

resource "google_compute_resource_policy" "app_disk_backup" {
  for_each = local.app_disk_map

  name   = "${each.value.name}-backup"

  snapshot_schedule_policy {
    schedule {
      hourly_schedule {
        hours_in_cycle = 8
        start_time     = "04:00"
      }
    }
    retention_policy {
      max_retention_days    = 14
      on_source_disk_delete = "APPLY_RETENTION_POLICY"
    }
  }
}

resource "google_compute_disk" "app_disk" {
  for_each = local.app_disk_map

  provider = google-beta

  name = each.value.name
  zone = "${var.region}-a"
  size = each.value.size

  resource_policies = [each.google_compute_resource_policy.app_disk_backup[${each.value.name}-backup].self_link]
}

Что я не уверен в этом, как связать resource_policies диска с соответствующим google_compute_resource_policy".

Я пробовал такие комбинации, как

each.google_compute_resource_policy.app_disk_backup[${each.value.name}-backup].self_link

each.google_compute_resource_policy.app_disk_backup."${each.value.name}-backup".self_link

Но похоже никто не работает


person Jason Stanley    schedule 24.04.2020    source источник
comment
не могли бы вы поделиться ошибкой плана?   -  person m0hit    schedule 25.04.2020


Ответы (1)


Я не совсем уверен, правильно ли я понял проблему (поскольку вывод об ошибке отсутствует), но, насколько я понял, вы хотите иметь следующую ссылку: google_compute_resource_policy.app_disk_backup[each.key].self_link, чтобы ресурс выглядел примерно так:

resource "google_compute_disk" "app_disk" {
  for_each = local.app_disk_map

....

  resource_policies = [google_compute_resource_policy.app_disk_backup[each.key].self_link]
}

это будет ссылаться на тот же ключ, который использовался для создания зависимого ресурса и создания сопоставления 1:1 между зависимостями.

person mariux    schedule 24.04.2020