Blue Moon
Blue Moon

Reputation: 4651

create variables in terraform

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?

Upvotes: 1

Views: 173

Answers (1)

Matthew Schuchard
Matthew Schuchard

Reputation: 28739

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.

Upvotes: 2

Related Questions