1
votes

I'm new to terraform and when looking for variables in the documentation it doesn't show exactly what I need which is rather simple.

Given something like this

resource "snowflake_schema" "one" {
  database = data.terraform_remote_state.databases.outputs.database_name
  name     = upper("one")
}

resource "snowflake_schema" "two" {
  database = data.terraform_remote_state.databases.outputs.database_name
  name     = upper("two")
}

resource "snowflake_schema" "three" {
  database = data.terraform_remote_state.databases.outputs.database_name
  name     = upper("three")
}

I'd like to create a variable database name at the top of the file and pass it to each resource like this:

database_name = data.terraform_remote_state.databases.outputs.database_name


resource "snowflake_schema" "one" {
  database = database_name
  name     = upper("one")
}

resource "snowflake_schema" "two" {
  database = database_name
  name     = upper("two")
}

resource "snowflake_schema" "three" {
  database = database_name
  name     = upper("three")
}

What's the correct syntax to do that in terraform?

1

1 Answers

1
votes

If you want to assign an attribute expression output to a module scope variable without the capability to directly modify its value with inputs, then you can use Terraform locals. In this case, you would do something like:

locals {
  database_name = data.terraform_remote_state.databases.outputs.database_name
}

to initialize. Then you can reference the assigned local variable value like:

resource "snowflake_schema" "one" {
  database = local.database_name
  name     = upper("one")
}

as if it were a Map type.