我有一个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变量,以便在我们更喜欢使用现有服务帐户的情况下使用。
发布于 2021-09-16 22:32:07
由于您使用的是count,因此必须使用[0]来访问您的资源:
service_account_email = var.service_account_email == null ? google_service_account.scheduler[0].email : var.service_account_emailhttps://stackoverflow.com/questions/69215751
复制相似问题