我想将disk_size
设置为这样的操作:
resource "google_compute_disk" "terraform-additional-persistent-disk" {
name = "terraform-additional-persistent-disk"
zone = local.zone
type = local.default_disk_type
size = exists(local.default_disk_size) ? local.default_disk_size : 50
image = local.default_ubuntu_image
labels = {
created_by = "terraform"
}
}
但是,我无法在Terraform中找到一个exists
函数。主要目的是获取变量/本地值(如果存在的话),如果变量/本地值未在任何地方声明,则以我传递的值作为第二个参数。
我一直在检查其他问题,比如1,但是can
和try
函数都没有帮助我实现我的目标。我将始终得到A local value with the name "default_disk_size" has not been declared
或An input variable with the name "default_disk_size" has not been declared
(取决于我是使用不存在的local
还是var
)。
我甚至尝试运行以下代码,但是如果没有设置变量/本地,则始终会引发异常。是否有一种不显式声明默认值为null
/""
的变量来实现这一目标的方法?
谢谢!
resource "google_compute_disk" "terraform-additional-persistent-disk" {
name = "terraform-additional-persistent-disk"
zone = local.zone
type = local.default_disk_type
size = merge({sizee=50}, {sizee = local.default_disk_sizee})["sizee"]
image = local.default_ubuntu_image
labels = {
created_by = "terraform"
}
}
发布于 2022-10-26 11:22:41
我认为,在创建此资源时,输入变量和局部变量可能存在,也可能不存在,就像它们是系统环境变量之类的。但是,在Terraform中,必须在与声明.tf的文件相同的文件夹中的一个google_compute_disk.terraform-additional-persistent-disk
文件中显式声明这些内容。
在Terraform的语法中,不可能在运行时动态显示局部变量或输入变量,它们必须在代码中提前声明。他们将永远存在。
如果希望允许使用Terraform代码的人传递变量或不传递变量,则必须显式声明变量,并给它一个默认值。然后,使用您的Terraform代码的人可以选择性地覆盖该默认值。如下所示:
variable "disk_size" {
type = number
default = 50
description = "The size of the additional persistent disk"
}
resource "google_compute_disk" "terraform-additional-persistent-disk" {
name = "terraform-additional-persistent-disk"
zone = local.zone
type = local.default_disk_type
size = var.disk_size
image = local.default_ubuntu_image
labels = {
created_by = "terraform"
}
}
然后,当有人使用您的Terraform代码时,如果他们不为disk_size
输入变量指定一个值,则将使用50
的默认值,但是如果他们确实指定了什么,那么他们指定的值将被使用。
https://stackoverflow.com/questions/74212872
复制