首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如果不存在变量/本地值,则分配提供的值

如果不存在变量/本地值,则分配提供的值
EN

Stack Overflow用户
提问于 2022-10-26 18:52:04
回答 1查看 35关注 0票数 0

我想将disk_size设置为这样的操作:

代码语言:javascript
代码运行次数:0
运行
复制
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,但是cantry函数都没有帮助我实现我的目标。我将始终得到A local value with the name "default_disk_size" has not been declaredAn input variable with the name "default_disk_size" has not been declared (取决于我是使用不存在的local还是var)。

我甚至尝试运行以下代码,但是如果没有设置变量/本地,则始终会引发异常。是否有一种不显式声明默认值为null/""的变量来实现这一目标的方法?

谢谢!

代码语言:javascript
代码运行次数:0
运行
复制
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"
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-26 19:22:41

我认为,在创建此资源时,输入变量和局部变量可能存在,也可能不存在,就像它们是系统环境变量之类的。但是,在Terraform中,必须在与声明.tf的文件相同的文件夹中的一个google_compute_disk.terraform-additional-persistent-disk文件中显式声明这些内容。

在Terraform的语法中,不可能在运行时动态显示局部变量或输入变量,它们必须在代码中提前声明。他们将永远存在。

如果希望允许使用Terraform代码的人传递变量或不传递变量,则必须显式声明变量,并给它一个默认值。然后,使用您的Terraform代码的人可以选择性地覆盖该默认值。如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
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的默认值,但是如果他们确实指定了什么,那么他们指定的值将被使用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74212872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档