如果创建了另一个资源,则使用不同的值
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
我有一个要修改的 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