首先感谢这篇文章在 variavles.tf 中添加 type = map(object()) 的默认字段 https://stackoverflow.com/questions/64336021/adding-a-default-field-for-type-mapobject-in-variavles-tf?newreg=16ddc077eee64236930ba88ab1789e40,这回答了我在获取默认值以与类型 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 https://github.com/scotttyso/terraform-aci-fabric/tree/main/test
如果我注释掉验证,其他一切都工作正常。提前致谢。