如果创建了另一个资源,则使用不同的值

Use different value if another resource is created

我有一个要修改的 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 变量更愿意使用现有的服务帐户。

由于您正在使用 count,因此您必须使用 [0] 来访问您的资源:

service_account_email = var.service_account_email == null ? google_service_account.scheduler[0].email : var.service_account_email