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

Terraform v0.13 - Check if password or secret provided, use a randomly generated one if not

我正在努力微调我的一些 Terraform 模块,特别是围绕 google_compute_vpn_tunnel, google_compute_router_interface, and google_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 和地图语句。

coalesce()函数怎么样?

The coalesce function takes any number of arguments, and returns the first argument that isn't null or an empty string.

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