Spec-Zone.ru › OpenTofu 1.11

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/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API