Terraform: количество в названии ресурса - PullRequest
0 голосов
/ 14 декабря 2018

Я уверен, что это быстро ..

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

Это мой экземпляр создания, один для диска,и еще один для экземпляра вычислений:

resource "google_compute_disk" "us-am-build" {
  count = "${var.us_am_count}"
  name  = "am${count.index}-disk"
  type  = "pd-standard"
  size  = "200"
  zone  = "us-east1-b"
}
resource "google_compute_instance" "us-am-build" {
  count                     = "${var.us_am_count}"
  project                   = "${var.gcp_project}"
  name                      = "am${count.index}"
  machine_type              = "n1-standard-1"
  zone                      = "us-east1-b"
  allow_stopping_for_update = "true"

  tags = "${var.am_instance_tags}"

  service_account {
    email = "${var.service_account}"
    scopes = [ "cloud-platform" ]
  }

  boot_disk {
    initialize_params {
      image = "${var.compute_image}"
    }
  }
  attached_disk {
    source      = "${google_compute_disk.us-am-build.self_link}"
    device_name = "${google_compute_disk.us-am-build.name}-1"
  }
  network_interface {
    subnetwork         = "${var.us-east-1-subnet}"
    subnetwork_project = "${var.gcp_project}"
    access_config      = {}
  }
  metadata {
    certname        = "am0-us.forgerock.com"
    shutdown-script = "${file("${path.module}/scripts/node_termination_publish.sh")}"
    startup-script  = "${file("${path.module}/scripts/startup.sh")}"
  }
}

Первая проблема заключается в том, что я хотел бы просмотреть счетчик 4, 2 из которых были бы на востоке США, а другие 2 - на западе ЕС.,Я не мог придумать, как сделать так, чтобы они были в разных регионах.

Другая проблема связана с приведенной выше демонстрацией и именем экземпляров между диском и вычислительным экземпляром.

count = "${var.us_am_count}"

Допустим, выше указано значение 2 (для США).

name  = "am${count.index}-disk"

Будет ли имя первого диска am0-disk?

Я получаю сообщение об ошибке:

   * module.am-deploy.google_compute_instance.us-am-build[1]: Resource 'google_compute_disk.us-am-build' not found for variable 'google_compute_disk.us-am-build.self_link'
* module.am-deploy.google_compute_instance.us-am-build[0]: Resource 'google_compute_disk.us-am-build' not found for variable 'google_compute_disk.us-am-build.self_link'

1 Ответ

0 голосов
/ 14 декабря 2018

Первая проблема, изменение атрибута зоны в зависимости от количества.Я вижу несколько вариантов (из которых 1 звучит лучше для меня):

1) Сделать этот кусок кода модулем с входами count и region.Создайте 2 модуля, по одному для каждого региона, и количество 2 (жестко запрограммированное или переданное).

2) Создайте локальный номер с количеством регионов, затем используйте оператор мода, чтобы выбрать, какой регион модномер региона.

locals {
  regions = ["us-east1-b", "eu-west-1b"]
}

zone = "${element{local.regions, count.index % length(local.regions)}"

3) Создайте локальный регион с регионом, который вы хотите для каждого отсчета (это неубедительно, вы, вероятно, не хотите этого делать):

locals {
  region_per_count = ["us-east1-b", "us-east-1b", "eu-west-1b", "eu-west-1b"]
}

Затем выберите из этого списка

zone = "${element(local.region_per_count, count.index")

Вторая проблема вызвана тем, что вы не выбираете конкретный google_compute_disk.us-am-build для получения атрибута self_link.Сделайте что-то вроде этого:

source      = "${element(google_compute_disk.us-am-build.*.self_link, count.index)}"

.*. помещает эту группу ресурсов в контекст списка, затем вы выбираете, какой ресурс с помощью element.

...