我正在尝试验证 Terraform 中的变量包含字母数字字符串列表。为此,我使用正则表达式并验证列表中的每个元素是否与该正则表达式匹配。
variable "list_of_strings" {
type = list(string)
description = "List of alphanumeric strings (case-insensitive)"
validation {
condition = can(all([
for value in var.list_of_strings : can(regex("^[A-Za-z0-9]*$", value))
]))
error_message = "list_of_strings must contain only alphanumeric strings (case-insensitive)."
}
}
然后,当我从该 MWE 生成值为
["TEST"]
的计划时,验证失败。
$ terraform plan -var 'list_of_strings=["TEST"]'
Planning failed. Terraform encountered an error while generating this plan.
╷
│ Error: Invalid value for variable
│
│ on variables.tf line 1:
│ 1: variable "list_of_strings" {
│ ├────────────────
│ │ var.list_of_strings is list of string with 1 element
│
│ list_of_strings must contain only alphanumeric strings (case-insensitive).
│
│ This was checked by the validation rule at variables.tf:5,3-13.
我也尝试过通过
terraform.tfvars
指定值,但结果保持不变。可能是什么问题?
这里的两个问题似乎是你的外部包装的
can(all())
函数可能实际上是一个 alltrue()
函数。此外,正则表达式字符 *
可能是一个 +
字符:
condition = alltrue([
for value in var.list_of_strings : can(regex("^[A-Za-z0-9]+$", value))
])
此外,如果您想稍微清理一下,您可以用
\\w
代替 [A-Za-z0-9]
(TF DSL 需要对这些字符进行双重转义)。