skip to Main Content

I am new to Terraform and I am writing a script. Following is my directory structure

folder
---.terraform
---..terraform.lock.hcl
---main.tf
---terraform.tfvars
---variables.tf

Following is my content on terraform.tfvars.

environment    = "development"

Following is my content on main.tf.

tags = {
  environment = var.environment
}

But the values are not updating. Following is the error:

╷
│ Warning: Value for undeclared variable
│
│ The root module does not declare a variable named "environment" but a value was found in file "terraform.tfvars". If you meant to use this value, add a "variable" block to the configuration.
│
│ To silence these warnings, use TF_VAR_... environment variables to provide certain "global" settings to all configurations in your organization. To reduce the verbosity of these warnings, use the      
│ -compact-warnings option.
╵
╷
│ Warning: Value for undeclared variable
│
│ The root module does not declare a variable named "admin_username" but a value was found in file "terraform.tfvars". If you meant to use this value, add a "variable" block to the configuration.        
│
│ To silence these warnings, use TF_VAR_... environment variables to provide certain "global" settings to all configurations in your organization. To reduce the verbosity of these warnings, use the      
│ -compact-warnings option.
╵
╷
│ Warning: Values for undeclared variables
│
│ In addition to the other similar warnings shown, 1 other variable(s) defined without being declared.
╵
╷
│ Error: Reference to undeclared input variable
│
│   on main.tf line 22, in resource "azurerm_resource_group" "tf_example_rg":
│   22:     environment = var.environment
│
│ An input variable with the name "environment" has not been declared. This variable can be declared with a variable "environment" {} block.

As I am using terraform.tfvars I don’t need to give the filename on CLI. I think I am doing everything right but it’s yet not working.

2

Answers


  1. You have to actually declare your variable using variable block. For example:

    variable "environment" {}
    

    If you have such declarations, you have to double check the spelling and locations of them.

    Login or Signup to reply.
  2. @AunZaidi , As stated in the error messages terraform can not find the defined variables.

    The root module does not declare a variable named "environment" but a value was found in file "terraform.tfvars". If you meant to use this value, add a "variable" block to the configuration.

    I would recommend you to take a look at the terraform-azure-tutorials to get acquainted with the basics.

    you can solve your issue by just defining a new variable using syntax

    variable "environment" {
      type        = string
      description = "(optional) Environment for the deployment"
    }
    

    Refer to https://developer.hashicorp.com/terraform/language/values/variables#arguments for definitions of the arguments used in terraform variables.

    Also one of the recommended practices is to use a dedicated file variables.tf for all the variables inputs required in your terraform code.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search