Aditya
Aditya

Reputation: 23

Terraform: "Error: Reference to undeclared resource when calling modules from terragrunt" in Azure

I'm trying to use terragrunt for the first time. I have followed the directory structure referred to https://terratest.gruntwork.io/docs/getting-started/quick-start/. I wanted to ret gid of duplicate main.tf, outputs.tf, and vars.tf that I have been using inside my environment folders. Below are the version and error that I'm facing. Any help would be greatly appreciated. Thanks in advance.

Terragrunt version

terragrunt version v0.23.10

Terraform version

Terraform v0.12.24

Directory Structure

terraform-live/
├── prod
│   └── resource_group
│   ├── main.tf
│   └── terragrunt.hcl
└── terragrunt.hcl

contents of terraform-live/terragrunt.hcl

backend = "azurerm"
config = {
    key = "${path_relative_to_include()}/terraform.tfstate"
    resource_group_name = "common-rg"
    storage_account_name = "testsa01"
    container_name = "tfstate"
  }

}

contents of terraform-live/prod/resource_group/main.tf

backend "azurerm" {}
}

contents of terraform-live/prod/resource_group/terragrunt.hcl

terraform {
  source = "git::[email protected]:adi4dpeople/terraform_modules.git//resource_group?ref=v0.0.1"
}

# Include all settings from the root terragrunt.hcl file
include {
  path = find_in_parent_folders()
}

# These are the variables we have to pass in to use the module specified in the terragrunt configuration above
inputs = {
  location = "westus"
  rg_name  = "testrg01"
}

When i run terragrunt plan, i get the following error:

[terragrunt] 2020/04/24 22:24:39 Reading Terragrunt config file at /home/aditya/terraform-live/prod/resource_group/terragrunt.hcl
[terragrunt] [/home/aditya/terraform-live/prod/resource_group] 2020/04/24 22:24:39 Running command: terraform --version
[terragrunt] 2020/04/24 22:24:44 Terraform files in /home/aditya/terraform-live/prod/resource_group/.terragrunt-cache/Hovi5Z9TKrGgHU_Lf1P2xFmhkm0/4M87gZKvnrwMknqj9CwuSBSfiHk/resource_group are up to date. Will not download again.
[terragrunt] 2020/04/24 22:24:44 Copying files from /home/aditya/terraform-live/prod/resource_group into /home/aditya/terraform-live/prod/resource_group/.terragrunt-cache/Hovi5Z9TKrGgHU_Lf1P2xFmhkm0/4M87gZKvnrwMknqj9CwuSBSfiHk/resource_group
[terragrunt] 2020/04/24 22:24:44 Setting working directory to /home/aditya/terraform-live/prod/resource_group/.terragrunt-cache/Hovi5Z9TKrGgHU_Lf1P2xFmhkm0/4M87gZKvnrwMknqj9CwuSBSfiHk/resource_group
[terragrunt] [/home/aditya/terraform-live/prod/resource_group] 2020/04/24 22:24:44 Backend azurerm has not changed.
[terragrunt] [/home/aditya/terraform-live/prod/resource_group] 2020/04/24 22:24:44 Running command: terraform init -backend-config=access_key=xxxxxxxxxxxx -backend-config=container_name=tfstate -backend-config=key=prod/resource_group/terraform.tfstate -backend-config=resource_group_name=testrg01 -backend-config=storage_account_name=testsa01

Initializing the backend...

Terraform has been successfully initialized!

You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.

If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.
[terragrunt] 2020/04/24 22:24:52 Running command: terraform plan
Acquiring state lock. This may take a few moments...

Error: Reference to undeclared resource

  on outputs.tf line 2, in output "id":
   2:   value = azurerm_resource_group.rg.id

A managed resource "azurerm_resource_group" "rg" has not been declared in the
root module.


Error: Reference to undeclared resource

  on outputs.tf line 6, in output "name":
   6:   value = azurerm_resource_group.rg.name

A managed resource "azurerm_resource_group" "rg" has not been declared in the
root module.

Releasing state lock. This may take a few moments...
[terragrunt] 2020/04/24 22:25:01 Hit multiple errors:
exit status 1 
aditya@LAPTOP-6C2MPJDV:~/terraform-live/prod/resource_group$

Upvotes: 1

Views: 16970

Answers (2)

Promise Preston
Promise Preston

Reputation: 28800

I faced a similar issue when trying to create assign a pull role to an Azure Kubernetes cluster to pull images from an Azure container registry using a Managed system identity

Azure role assignment (outputs.tf file)

output "acr_id" {
  value = azure_container_registry.acr.id
}

This was put in a module directory called azure-role-assignment

However, when I call the module output file in my Test environment (main.tf file):

# Create azure container registry
module "azure_container_registry" {
  source                   = "../modules/azure-container-registry"
  container_registry_name  = var.container_registry_name
  resource_group_name      = var.resource_group_name
  location                 = var.location
  sku                      = var.sku
  admin_enabled            = var.admin_enabled
}

# Create azure role assignment
module "azure_role_assignment" {
  source                   = "../modules/azure-role-assignment"
  scope                    = module.azure_container_registry.acr_id
  role_definition_name     = var.role_definition_name
  principal_id             = module.azure_kubernetes_cluster.principal_id
}

However, when I run terraform apply, I get the error:

Error: Reference to undeclared resource

  on ../modules/azure-container-registry/outputs.tf line 2, in output "acr_id":
   2:   value = azure_container_registry.acr.id

A managed resource "azure_container_registry" "acr" has not been declared in
module.azure_container_registry.

Here's how I solved it:

The issue was from how I defined the value of the arc_id in the outputs.tf file. Instead of this:

Azure role assignment (outputs.tf file)

output "acr_id" {
  value = azure_container_registry.acr.id
}

It should be this:

Azure role assignment (`outputs.tf` file)

output "acr_id" {
  value = azurerm_container_registry.acr.id
}

That is azurerm_container_registry.acr.id and not azure_container_registry.acr.id

That's all.

I hope this helps

Upvotes: 0

Aditya
Aditya

Reputation: 23

I have solved my problem with this GitHub issue on terragrunt https://github.com/gruntwork-io/terragrunt/issues/1151

Upvotes: 1

Related Questions