yamldecode Function

yamldecode parses a string as a subset of YAML, and produces a representation of its value.

This function supports a subset of YAML 1.2 (opens in a new tab), as described below.

This function maps YAML values to OpenTofu language values in the following way:

YAML typeOpenTofu type
!!mapobject(...) with attribute types determined per this table
!!seqtuple(...) with element types determined per this table
!!nullThe OpenTofu language null value
!!timestampstring in RFC 3339 (opens in a new tab) format
!!binarystring containing base64-encoded representation

The OpenTofu language automatic type conversion rules mean that you don't usually need to worry about exactly what type is produced for a given value, and can just use the result in an intuitive way.

Note though that the mapping above is ambiguous -- several different source types map to the same target type -- and so round-tripping through yamldecode and then yamlencode cannot produce an identical result.

YAML is a complex language and it supports a number of possibilities that the OpenTofu language's type system cannot represent. Therefore this YAML decoder supports only a subset of YAML 1.2, with restrictions including the following:

  • Although aliases to earlier anchors are supported, cyclic data structures (where a reference to a collection appears inside that collection) are not. If yamldecode detects such a structure then it will return an error.

  • Only the type tags shown in the above table (or equivalent alternative representations of those same tags) are supported. Any other tags will result in an error.

  • Only one YAML document is permitted. If multiple documents are present in the given string then this function will return an error.


> yamldecode("hello: world")
  "hello" = "world"

> yamldecode("true")

> yamldecode("{a: &foo [1, 2, 3], b: *foo}")
  "a" = [
  "b" = [

> 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".

Related Functions

  • jsondecode is a similar operation using JSON instead of YAML.
  • yamlencode performs the opposite operation, encoding a value as YAML.