yamldecode Функция
yamldecode разбирает строку как подмножество YAML и создает представление ее значения.
Эта функция поддерживает подмножество YAML 1.2, описанное ниже.
Эта функция сопоставляет значения YAML со значениями языка OpenTofu следующим образом:
| Тип YAML | Тип OpenTofu |
|---|---|
!!str |
string |
!!float |
number |
!!int |
number |
!!bool |
bool |
!!map |
object(...) с типами атрибутов, определяемыми согласно этой таблице |
!!seq |
tuple(...) с типами элементов, определяемыми согласно этой таблице |
!!null |
Значение null языка OpenTofu |
!!timestamp |
string в формате RFC 3339
|
!!binary |
string, содержащее представление в кодировке base64 |
Правила автоматического преобразования типов языка OpenTofu означают, что обычно вам не нужно беспокоиться о том, какой именно тип будет создан для заданного значения: результат можно просто использовать интуитивно понятным образом.
Однако учтите, что сопоставление выше неоднозначно: несколько исходных типов сопоставляются с одним и тем же целевым типом, поэтому преобразование туда и обратно с помощью yamldecode, а затем yamlencode не может дать идентичный результат.
YAML — сложный язык, поддерживающий ряд возможностей, которые невозможно представить в системе типов языка OpenTofu. Поэтому этот декодер YAML поддерживает только подмножество YAML 1.2 со следующими ограничениями:
-
Хотя псевдонимы ранее объявленных якорей поддерживаются, циклические структуры данных (в которых ссылка на коллекцию находится внутри этой коллекции) не поддерживаются. Если
yamldecodeобнаружит такую структуру, функция вернет ошибку. -
Поддерживаются только теги типов, приведенные в таблице выше (или эквивалентные альтернативные представления этих же тегов). Любые другие теги приведут к ошибке.
-
Допускается только один документ YAML. Если в заданной строке присутствует несколько документов, эта функция вернет ошибку.
Примеры
> yamldecode("hello: world")
{
"hello" = "world"
}
> yamldecode("true")
true
> yamldecode("{a: &foo [1, 2, 3], b: *foo}")
{
"a" = [
1,
2,
3,
]
"b" = [
1,
2,
3,
]
}
> yamldecode("{a: &foo [1, *foo, 3]}")
Error: Error in function call
Call to function "yamldecode" failed: cannot refer to anchor "foo" from inside
its own definition.
> yamldecode("{a: !not-supported foo}")
Error: Error in function call
Call to function "yamldecode" failed: unsupported tag "!not-supported".Связанные функции
-
jsondecodeвыполняет аналогичную операцию, используя JSON вместо YAML. -
yamlencodeвыполняет обратную операцию — кодирует значение в формате YAML.
Copyright (c) The OpenTofu Authors
Copyright (c) 2014 HashiCorp, Inc.
Mozilla Public License, version 2.0
https://opentofu.org/docs/v1.9/language/functions/yamldecode/