Reputation: 4651
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
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