74 lines
2.2 KiB
Plaintext
74 lines
2.2 KiB
Plaintext
## Custom Validation Rules
|
|
|
|
In addition to Type Constraints, you can specify arbitrary custom validation
|
|
rules for a particular variable using one or more `validation` block nested
|
|
within the corresponding `variable` block:
|
|
|
|
```hcl
|
|
variable "image_id" {
|
|
type = string
|
|
description = "The id of the machine image (AMI) to use for the server."
|
|
|
|
validation {
|
|
condition = length(var.image_id) > 4 && substr(var.image_id, 0, 4) == "ami-"
|
|
error_message = "The image_id value must be a valid AMI id, starting with \"ami-\"."
|
|
}
|
|
}
|
|
```
|
|
|
|
The `condition` argument is an expression that must use the value of the
|
|
variable to return `true` if the value is valid or `false` if it is invalid.
|
|
The expression can refer only to the variable that the condition applies to,
|
|
and _must not_ produce errors.
|
|
|
|
If the failure of an expression is the basis of the validation decision, use
|
|
[the `can` function](/docs/templates/hcl_templates/functions/conversion/can) to detect such errors. For example:
|
|
|
|
```hcl
|
|
variable "image_id" {
|
|
type = string
|
|
description = "The id of the machine image (AMI) to use for the server."
|
|
|
|
validation {
|
|
# regex(...) fails if it cannot find a match
|
|
condition = can(regex("^ami-", var.image_id))
|
|
error_message = "The image_id value must be a valid AMI id, starting with \"ami-\"."
|
|
}
|
|
}
|
|
```
|
|
|
|
If `condition` evaluates to `false`, an error message including the sentences
|
|
given in `error_message` will be produced. The error message string should be
|
|
at least one full sentence explaining the constraint that failed, using a
|
|
sentence structure similar to the above examples.
|
|
|
|
Validation also works with more complex cases:
|
|
|
|
```hcl
|
|
variable "image_metadata" {
|
|
|
|
default = {
|
|
key: "value",
|
|
something: {
|
|
foo: "bar",
|
|
}
|
|
}
|
|
|
|
validation {
|
|
condition = length(var.image_metadata.key) > 4
|
|
error_message = "The image_metadata.key field must be more than 4 runes."
|
|
}
|
|
|
|
validation {
|
|
condition = can(var.image_metadata.something.foo)
|
|
error_message = "The image_metadata.something.foo field must exist."
|
|
}
|
|
|
|
validation {
|
|
condition = substr(var.image_metadata.something.foo, 0, 3) == "bar"
|
|
error_message = "The image_metadata.something.foo field must start with \"bar\"."
|
|
}
|
|
|
|
}
|
|
```
|