# #google-cloud-platform #terraform #terraform-provider-gcp #terraform0.12
Вопрос:
У меня есть модуль терраформирования, который я хотел бы изменить. В настоящее время мой модуль создает учетную запись службы. Я хотел бы изменить его так, чтобы кто-то мог передать существующую учетную запись службы, или если она не передана, то модуль создает учетную запись службы, как это было бы изначально.
Первоначально моя учетная запись службы выглядела так:
resource "google_service_account" "scheduler" {
account_id = "${var.prefix}-scheduler"
project = var.project
}
Я добавил в свой variables.tf
файл следующую переменную:
variable "service_account_email" {
default = null
description = "Existing service account for running ... jobs. If null a new service account will be created."
}
То, что я изначально думал сделать, это добавить несколько местных жителей
locals {
service_account_count = var.service_account_email == null ? 1 : 0
service_account_email = var.service_account_email == null ? google_service_account.scheduler.email : var.service_account_email
}
Тогда я мог бы изменить свою учетную запись службы, чтобы она выглядела так
resource "google_service_account" "scheduler" {
count = local.service_account_count
account_id = "${var.prefix}-scheduler"
project = var.project
}
И затем, куда бы я ни ссылался google_service_account.scheduler.email
, я могу вместо этого ссылаться local.service_account_email
.. Однако, похоже, я не в состоянии это сделать по нескольким причинам.
Я получаю следующую ошибку, если пытаюсь использовать блок locals, упомянутый выше:
│ Because google_service_account.scheduler has "count" set, its attributes must be accessed on specific instances.
│
│ F`or example, to correlate with indices of a referring resource, use:
│ google_service_account.scheduler[count.index]
╵
Если я изменю его так, чтобы использовать google_service_account.scheduler[count.index].email
вместо этого, я получу следующую ошибку:
│ Because google_service_account.scheduler has "count" set, its attributes must be accessed on specific instances.
│
│ For example, to correlate with indices of a referring resource, use:
│ google_service_account.scheduler[count.index]
╵
Теперь я как бы застрял, потому что я не могу заставить какие-либо ресурсы, на которые изначально ссылались google_service_account.scheduler.email
бы, вместо этого ссылаться на var.service_account_email
переменную, которая передается в тех случаях, когда мы предпочли бы использовать существующую учетную запись службы.
Ответ №1:
Поскольку вы используете count
, вы должны использовать [0]
для доступа к своему ресурсу:
service_account_email = var.service_account_email == null ? google_service_account.scheduler[0].email : var.service_account_email