mirror of
https://github.com/ghndrx/tf-variable-demo.git
synced 2026-02-10 06:54:57 +00:00
70 lines
2.8 KiB
Markdown
70 lines
2.8 KiB
Markdown
```export PROJECT_ID="your-project-id"```
|
|
|
|
Terraform offers various methods to provide input variables, making it flexible and adaptable to different use cases. These methods include command-line flags, environment variables, variable definition files (including auto-loaded files), and default values in variable declarations.
|
|
|
|
Here is a summary of the variable input methods in order of priority, from highest to lowest:
|
|
|
|
Command-line flags (-var):
|
|
These flags have the highest priority, meaning that values provided using -var will override any other method.
|
|
Example:
|
|
|
|
```terraform apply -var="project_id=$PROJECT_ID" -var="region=us-central1" -var="zone=us-central1-f" -var="image_name=debian-cloud/debian-10" -var="instance_type=n1-standard-4"```
|
|
|
|
Environment variables (TF_VAR_):
|
|
This method takes precedence over auto-loaded variable definition files, variable definition files specified with the -var-file flag, and default values in variable declarations.
|
|
|
|
Example:
|
|
|
|
```
|
|
export TF_VAR_credentials_file="credentials.json"
|
|
export TF_VAR_project_id="$PROJECT_ID"
|
|
export TF_VAR_region="us-central1"
|
|
export TF_VAR_zone="us-central1-a"
|
|
export TF_VAR_image_name="debian-cloud/debian-11"
|
|
export TF_VAR_instance_type="n1-standard-1"
|
|
terraform apply
|
|
```
|
|
|
|
Auto-loaded variable definition files (.auto.tfvars or .auto.tfvars.json):
|
|
Auto-loaded files have priority over variable definition files specified with the -var-file flag and default values in variable declarations.
|
|
Example: Two .auto.tfvars files (a.auto.tfvars and b.auto.tfvars) contain different values for project_id. When you run terraform apply, Terraform loads both files, and the final project_id value is taken from b.auto.tfvars.
|
|
|
|
Variable definition files specified with the -var-file flag (.tfvars or .tfvars.json):
|
|
This method has a lower priority than auto-loaded variable definition files but takes precedence over default values in variable declarations.
|
|
Example (terraform.tfvars.json):
|
|
|
|
```
|
|
{
|
|
"credentials_file": "credentials.json",
|
|
"project_id": "$PROJECT_ID",
|
|
"region": "us-central1",
|
|
"zone": "us-central1-a",
|
|
"image_name": "debian-cloud/debian-11",
|
|
"instance_type": "n1-standard-1"
|
|
}
|
|
```
|
|
|
|
Example (terraform.tfvars):
|
|
|
|
```
|
|
credentials_file = "credentials.json"
|
|
project_id = "$PROJECT_ID"
|
|
region = "us-central1"
|
|
zone = "us-central1-a"
|
|
image_name = "debian-cloud/debian-11"
|
|
instance_type = "n1-standard-1"
|
|
```
|
|
Default values in variable declarations (within .tf files):
|
|
These values have the lowest priority and will only be used if no value is provided through any other method.
|
|
Example (variables.tf):
|
|
|
|
```
|
|
variable "project_id" {
|
|
default = "$PROJECT_ID"
|
|
}
|
|
|
|
variable "region" {
|
|
default = "us-central1"
|
|
}
|
|
```
|
|
In summary, Terraform supports various methods to input variables, each with its own use case. You can choose the method that best suits your needs and preferences. |