Spec-Zone.ru › OpenTofu 1.10

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/

Spec-Zone.ru

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