首页 > 解决方案 > Terraform v0.13 - 检查是否提供了密码或密码,如果没有,则使用随机生成的密码

问题描述

我正在努力微调我的一些 Terraform 模块,特别是围绕 google_compute_vpn_tunnelgoogle_compute_router_interfacegoogle_compute_router_peer资源。我想做类似于 AWS 的东西,其中预共享密钥和隧道接口 IP 地址默认是随机的,但可以由用户覆盖(只要它们在一定范围内)。

随机选项工作正常。例如,要创建一个 20 个字符的随机密码,我这样做:

resource "random_password" "RANDOM_PSK" {
  length           = 20
  special          = false
}

但是,如果未定义名为vpn_shared_secret的输入变量,我只想使用此值。似乎这样应该工作:

variable "vpn_shared_secret" {
  type      = string
  default   = null
}
locals {
  vpn_shared_secret = try(var.vpn_shared_secret, random_password.RANDOM_PSK.result)
}
resource "google_compute_vpn_tunnel" "VPN_TUNNEL" {
  shared_secret                   = local.vpn_shared_secret
}

相反,它似乎忽略了 vpn_shared_secret 输入变量,并且每次都使用随机生成的变量。

try() 是这样做的正确方法吗?我刚刚学习 Terraform if/else 和 map 语句。

标签: terraformterraform-provider-gcpterraform0.12+

解决方案


功能怎么样coalesce()

coalesce 函数接受任意数量的参数,并返回第一个不为 null 或空字符串的参数。

locals {
  vpn_shared_secret = coalesce(var.vpn_shared_secret, random_password.RANDOM_PSK.result)
}

推荐阅读