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