Search code examples
terraformhcl

How do I pass object(list) to string(list) - Terraform


I want to pass a list with 2 objects to lambda_name as an array variable, lambda_name must receive my_app and my_app_2 key name, example:

variable "lambda" {
  type = object({
    my_app = object({
      name = string
    })
    my_app_2 = object({
      name = string
    })
  })
  description = "Lambda Function required values"
}
data "external" "lambdas" {
    program = ["bash", "scripts/random.sh"]

    query = {
        lambda_name  = (["${var.lambda.my_app.name}", "${var.lambda.my_app_2.name}"])
        environment = var.environment
    }
}

The error i got:

Inappropriate value for attribute "query": element "lambda_name": string required.


Solution

  • Solution:

    data "external" "lambdas" {
        program = ["bash", "scripts/random.sh"]
    
        query = {
            lambda_name = "${var.lambda.my_app.name} ${var.lambda.my_app_2.name}"
            environment = var.environment
        }
    }
    

    on scripts/random.sh, i'm using lambda_name as array variable.

    #!/bin/bash
    
    set -e
    
    eval "$(jq -r '@sh "export LAMBDA_NAME=\(.lambda_name)"')"
    
    for lambda in ${LAMBDA_NAME[@]}; do echo $lambda; done