如何使用属性验证可为null的对象变量



我有类似的模块

variable "client_certificate" {
description = "Client certificate settings."
type = object({
enabled = bool
mode    = string
})
default =  null
validation {
condition     = var.client_certificate == null || (var.client_certificate != null && var.client_certificate.enabled == false && var.client_certificate.mode == null)
error_message = "The Client Certificate mode possible values include Optional, Required, Allow, Ignore."
}
}

resource "null_resource" "display" {
provisioner "local-exec" {
command = <<EOT
echo "${var.client_certificate != null ? var.client_certificate.mode : "siema"}"

EOT
}
}

我希望能够将client_certificate提供为null,但也能够通过验证机制验证属性。

我称之为

module "display" {
source = "./modulek"
client_certificate          =  null
}

但后来我得到了:

│ Error: Attempt to get attribute from null value
│
│   on modulekmain.tf line 12, in variable "client_certificate":
│   12:     condition     = var.client_certificate != null && var.client_certificate.enabled == false && var.client_certificate.mode == null
│     ├────────────────
│     │ var.client_certificate is null
│
│ This value is null, so it does not have any attributes.
╵
╷
│ Error: Attempt to get attribute from null value
│
│   on modulekmain.tf line 12, in variable "client_certificate":
│   12:     condition     = var.client_certificate != null && var.client_certificate.enabled == false && var.client_certificate.mode == null
│     ├────────────────
│     │ var.client_certificate is null
│
│ This value is null, so it does not have any attributes.

对我来说,这真的很奇怪,因为我假设var.client_certificate == null应该完成条件的评估,因为它提供了true。但我错了,整个表情都被评价了。从那以后,我不知道该怎么克服。我试着查找,但还是一样。

null对象既没有enabled字段,也没有mode字段。这样你就得到了这些错误。你必须使用try。

我不太确定你希望你的病情到底是什么,但你可以试试:

condition     = try((var.client_certificate == null || (var.client_certificate != null && var.client_certificate.enabled == false && var.client_certificate.mode == null)), false)

最新更新