Validation Terraform-为variables.tf中的type=map(object())添加验证
首先感谢这篇文章,这回答了我在使用类型映射(object())获取默认值时遇到的困难的第一部分。最后一部分是如何验证输入值Validation Terraform-为variables.tf中的type=map(object())添加验证,validation,variables,terraform,local-variables,Validation,Variables,Terraform,Local Variables,首先感谢这篇文章,这回答了我在使用类型映射(object())获取默认值时遇到的困难的第一部分。最后一部分是如何验证输入值 terraform { experiments = [module_variable_optional_attrs] } variable "dns_server" { description = "Add DNS Servers for domain resolution. You can configure a maximum
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,则在本地定义之前不会设置。我只是不知道如何进行验证,因为我相信我的谷歌搜索没有找到任何类似的例子
如果您需要有关如何使用该代码的更多详细信息,请访问此代码:
如果我对验证进行了注释,其他一切都正常。提前谢谢。这就是你想要的吗
variable "mapobject" {
type = map(object({
cidr_block = string
destination_type = string
}
))
validation {
condition = alltrue([
for o in var.mapobject : contains(["CIDR_BLOCK","NETWORK_SECURITY_GROUP","SERVICE_CIDR_BLOCK"],o.destination_type)]) error_message = "All destination_types must be one of CIDR_BLOCK,NETWORK_SECURITY_GROUP or SERVICE_CIDR_BLOCK!"
}
}
变量赋值为
mapobject = {
"r0" = {cidr_block = "10.1.1.0/24",destination_type = "CIDR_BLOCK" }
}
验证成功,以下情况失败(根据需要)
“r0”={cidr_block=“10.1.1.0/24”,destination_type=“CIRD_block”}
}
如果是,那么这里就值得称赞:一般来说,您可以验证
对象
类型,但不能验证映射
类型,因为对象
将有已知的键,您可以在验证
块中解析,而映射
则不会。
mapobject = {
Error: Invalid value for variable
on main.tf line 86:
86: variable "mapobject" {
All destination_types must be one of CIDR_BLOCK,NETWORK_SECURITY_GROUP or
SERVICE_CIDR_BLOCK!
This was checked by the validation rule at main.tf:93,2-12.