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

Terraform v0.13-检查是否提供密码或机密,如果没有,则使用随机生成的密码或机密,terraform,terraform-provider-gcp,terraform0.12+,Terraform,Terraform Provider Gcp,Terraform0.12+,我正致力于微调我的一些地形模块,特别是围绕地形和资源。我想让事情类似于AWS,其中预共享密钥和隧道接口IP地址在默认情况下是随机的,但可以由用户覆盖(前提是它们在一定范围内) 随机选项运行良好。例如,要创建一个20个字符的随机密码,我需要执行以下操作: resource "random_password" "RANDOM_PSK" { length = 20 special = false } 但是,我只想在

我正致力于微调我的一些地形模块,特别是围绕地形和资源。我想让事情类似于AWS,其中预共享密钥和隧道接口IP地址在默认情况下是随机的,但可以由用户覆盖(前提是它们在一定范围内)

随机选项运行良好。例如,要创建一个20个字符的随机密码,我需要执行以下操作:

resource "random_password" "RANDOM_PSK" {
  length           = 20
  special          = false
}
但是,我只想在未定义名为vpn\u shared\u 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语句。

关于
coalesce()
函数如何


您的密码将在TF状态文件中以纯文本形式结束。我不确定您对此是否满意,或者您正试图避免这种情况?我假设.tfstate文件存储在一个安全的位置。今天我注意到Terraform 0.14和更高版本有一个选项,用于将数据标记为敏感选项,敏感选项不影响tf状态下的纯文本。它只用于地形规划或应用输出。这很有趣。我认为.tfstate文件对于敏感信息来说风险更大,因为它是存储的。有没有办法从.tfstate散列或剥离敏感信息?这绝对是最好的答案。我在发布后不久就意识到,使用if/else也可以,但是合并要干净得多。
locals {
  vpn_shared_secret = coalesce(var.vpn_shared_secret, random_password.RANDOM_PSK.result)
}