Skip to content

Storing Complex Variablesยป

OpenTofu/Terraform supports a variety of variable types such as string, number, list, bool, and map. The full list of Terraform's variable types can be found in the documentation here.

When using "complex" variable types with Spacelift such as map and list you'll need to utilize OpenTofu/Terraform's jsonencode function when storing these variables as an environment variable in your Spacelift Stack environment or context.

Usage Exampleยป

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
locals {
  map = {
    foo = "bar"
  }
  list = ["this", "is", "a", "list"]
}

resource "spacelift_context" "example" {
  description = "Example of storing complex variable types"
  name        = "OpenTofu Complex Variable Types Example"
}

resource "spacelift_environment_variable" "map_example" {
  context_id = spacelift_context.example.id
  name       = "map_example"
  value      = jsonencode(local.map)
  write_only = false
}

resource "spacelift_environment_variable" "list_example" {
  context_id = spacelift_context.example.id
  name       = "list_example"
  value      = jsonencode(local.list)
  write_only = false
}

Notice the use of the jsonencode function when storing these complex variable types. This will allow you to successfully store these variable types within Spacelift.

Consuming Stored Variablesยป

When consuming complex variable types in your environment, there is no need to use the jsondecode() function.