【发布时间】:2021-11-11 21:05:38
【问题描述】:
我有一个想要修改的 Terraform 模块。目前我的模块创建了一个服务帐户。我想对其进行修改,以便有人可以传入现有的服务帐户,或者如果没有传入,那么模块会创建一个服务帐户,它原本应该有。
原来我的服务帐号是这样的:
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 变量,以便我们更愿意使用现有的服务帐号。
【问题讨论】:
标签: google-cloud-platform terraform terraform-provider-gcp terraform0.12+