Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Validation Terraform-为variables.tf中的type=map(object())添加验证_Validation_Variables_Terraform_Local Variables - Fatal编程技术网

Validation Terraform-为variables.tf中的type=map(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

首先感谢这篇文章,这回答了我在使用类型映射(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,则在本地定义之前不会设置。我只是不知道如何进行验证,因为我相信我的谷歌搜索没有找到任何类似的例子

如果您需要有关如何使用该代码的更多详细信息,请访问此代码:


如果我对验证进行了注释,其他一切都正常。提前谢谢。

这就是你想要的吗

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.