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