Flatten

Sometimes we have to work with very complex data structures, but module only requires a simple list of objects or a map. Falltern functions helps us with converting complex data structures into lists.

Let's start by creating a a file with the name ssm-parameters\variables.tf,

variable "parameters" {
  type = list(object({
    prefix = string
    parameters = list(object({
      name  = string
      value = string
    }))
  }))
  default = []
}

In here, I define a variable with name 'parameter', and I also provide the data types of the object. Set it's default value to an empty list.

Next let's create a file with the name ssm-parameters\ssm-parameter.tf,

locals {
  parameters = flatten([ 
    for parameters in var.parameters: [
      for keyvalues in parameters.parameters:
        {
          "name" = "${parameters.prefix}/${keyvalues.name}"
          "value" = keyvalues.value
        }
      ]
    ])
}

resource "aws_ssm_parameter" "parameter" {
  for_each = { for keyvalue in local.parameters: keyvalue.name => keyvalue.value }
  name     = each.key
  type     = "String"
  value    = each.value
}

In here, the local defines how the flatten should be used on the passed parameters.

Next let's create a file with the name provider.tf,

Finally a file with the name parameters.tf,

In here the complex data structure is defined as a local variable and this will be transformed by the flatten function defined in the local of the module.

Last updated

Was this helpful?