【发布时间】:2021-02-14 01:10:19
【问题描述】:
首先感谢 Adding a default field for type = map(object()) in variavles.tf 的这篇文章,这回答了我在获取默认值以使用类型 map(object()) 时遇到的第一部分难题。我要开始工作的最后一部分是如何验证输入值。
terraform {
experiments = [module_variable_optional_attrs]
}
variable "dns_server" {
description = "Add DNS Servers for domain resolution. You can configure a maximum of two servers. Only one can be preferred 'true'."
type = map(object({
preferred = optional(bool)
server = optional(string)
}))
default = {
default = {
preferred = false
server = "198.18.1.1"
}
}
validation {
condition = (
can(regexall("^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$", var.dns_server["server"]))
)
error_message = "The DNS Server is not a valid IPv4 Address."
}
}
locals {
dns_server = {
for k, v in var.dns_server : k => {
preferred = coalesce(v.preferred, false)
server = coalesce(v.server, "198.18.1.1")
}
}
}
我知道的变量字段中的默认值未使用,但我将其用作 terraform 文档输出的占位符。
我也知道我上面的验证是不正确的,因为如果用户使用默认服务器 IPv4,直到本地定义才会设置。我只是不知道如何进行验证,因为我可靠的谷歌搜索没有找到任何类似的例子。
如果您需要有关如何使用它的更多详细信息,该代码位于此处:
https://github.com/scotttyso/terraform-aci-fabric/tree/main/test
如果我注释掉验证,其他一切都可以正常工作。提前致谢。
【问题讨论】:
-
一般来说,您可以验证
object类型,但不能验证map类型,因为object将具有您可以在validation块中解析的已知键,而 @987654328 @ 不会。
标签: validation variables terraform local-variables