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.11/language/functions/can/