can Функция
can вычисляет заданное выражение и возвращает логическое значение, указывающее, было ли получено значение без ошибок.
Это специальная функция, способная перехватывать ошибки, возникающие при вычислении её аргумента. В большинстве случаев, когда можно использовать can, лучше вместо неё использовать try, поскольку эта функция позволяет лаконичнее задавать резервные значения для выражений, приводящих к ошибкам.
Основное назначение can — преобразование ошибки в результат логической проверки при написании пользовательских правил проверки переменных. Например:
variable "timestamp" {
type = string
validation {
# formatdate fails if the second argument is not a valid timestamp
condition = can(formatdate("", var.timestamp))
error_message = "The timestamp argument requires a valid RFC 3339 timestamp."
}
}Функция can может перехватывать и обрабатывать только динамические ошибки, возникающие при обращении к данным, которые становятся известны лишь во время выполнения. Она не перехватывает ошибки, связанные с выражениями, которые заведомо некорректны при любых входных данных, например с некорректной ссылкой на ресурс.
Функция can предназначена только для простых проверок в правилах валидации переменных. Хотя технически она может принимать выражения любого типа и использоваться в других местах конфигурации, мы не рекомендуем этого делать. Для обработки ошибок в других частях конфигурации предпочтительно использовать try.
Примеры
> local.foo
{
"bar" = "baz"
}
> can(local.foo.bar)
true
> can(local.foo.boop)
falseФункция can не перехватывает ошибки, связанные с конструкциями, которые заведомо некорректны ещё до вычисления динамического выражения, например с некорректной ссылкой или ссылкой на объект верхнего уровня, который не был объявлен:
> can(local.nonexist) Error: Reference to undeclared local value A local value with the name "nonexist" has not been declared.
Связанные функции
-
try, которая пытается вычислить последовательность выражений и возвращает результат первого успешно вычисленного выражения.
Copyright (c) The OpenTofu Authors
Copyright (c) 2014 HashiCorp, Inc.
Mozilla Public License, version 2.0
https://opentofu.org/docs/v1.12/language/functions/can/