我有类似的模块
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)