terraform - Terraform v0.13 - 检查是否提供了密码或密码,如果没有,则使用随机生成的密码
问题描述
我正在努力微调我的一些 Terraform 模块,特别是围绕 google_compute_vpn_tunnel、google_compute_router_interface和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 和 map 语句。
解决方案
功能怎么样coalesce()
?
coalesce 函数接受任意数量的参数,并返回第一个不为 null 或空字符串的参数。
locals {
vpn_shared_secret = coalesce(var.vpn_shared_secret, random_password.RANDOM_PSK.result)
}
推荐阅读
- javascript - 在asp中将字符串转换为json数组
- android - 如何编写通用改造响应并在反序列化不起作用时对其进行记录/调试?
- database - Nedb 非唯一 _id 索引
- node.js - I/O 密集型与 CPU 密集型
- node.js - events.js:183 抛出错误;// 给 yarn build 时未处理的 'error' 事件
- c# - 在 ASP.NET MVC 中创建的新项目中的默认控制器。如何安全删除
- javascript - 对每个数组索引值调用函数
- wordpress - 当用户从 PaidMemebership Pro wordpress 插件取消订阅时,取消 Stripe 订阅不起作用
- batch-file - 在 Windows 10 上使用 Robocopy 的脚本在 W7 上不起作用
- r - 将 ggsave() 纵横比设置为 RStudio 的“缩放”按钮给出的比例?