Hello everyone! Thanks a lot for this amazing tool...
# general
s
Hello everyone! Thanks a lot for this amazing tool. Nowadays we have been trying to implement it to our environment, however I run into a problem that I explained here. I had the same problem during Atlantis implementation and skipped it somehow, but for Infracost, it seems mandatory. Have you ever come across with this issue? Thanks in advance!
l
Hi Basar, welcome! I’ve not been able to reproduce this. Do you have an example project it happens on?
s
Hi Ali! in fact any terragrunt dependency relationship should give the same error, though here you can see my terragrunt files.
Copy code
locals {
 ....
}

dependency "vpc" {
  config_path = "../../vpc/${local.aws_service_name}"
  mock_outputs_allowed_terraform_commands = ["init", "plan", "destroy", "apply", "import"]
  mock_outputs = {
    azs                 = ["eu-west-1a", "eu-west-1c"]
    vpc_id              = "vpc-99999999"
    elasticache_subnets = ["172.0.9.0/24", "172.0.10.0/24"]
  }  
}


terraform {
  source = "git::<ssh://git@github.com/cloudposse/terraform-aws-elasticache-redis.git//?ref=0.42.0>"
}
# Include all settings from the root terragrunt.hcl file
include {
  path = find_in_parent_folders()
}


# the following part is filled in line with <https://github.com/cloudposse/terraform-aws-elasticache-redis#inputs>
# you may define your own parameters accordingly
inputs = {
  name                             = local.aws_service_name
  environment                      = local.environment
  availability_zones               = dependency.vpc.outputs.azs
  vpc_id                           = dependency.vpc.outputs.vpc_id
  #use_existing_security_groups    = false
  create_security_group            = true
  # give the following parameter as a list of objects. for more check this <https://github.com/cloudposse/terraform-aws-elasticache-redis/issues/153>
  additional_security_group_rules  = [{type = "ingress", from_port = 6379, to_port = 6379, protocol = "tcp", cidr_blocks =  ["20.0.0.0/24", "20.0.1.0/24"]}]
  subnets                          = dependency.vpc.outputs.elasticache_subnets
  cluster_size                     = 1
  instance_type                    = "cache.t3.small"
  apply_immediately                = true
  automatic_failover_enabled       = false
  engine_version                   = "4.0.10"
  family                           = "redis4.0"
  multi_az_enabled                 = false
  at_rest_encryption_enabled       = false
  transit_encryption_enabled       = false
  cloudwatch_metric_alarms_enabled = false
  snapshot_retention_limit         = 7

  tags = {
...
  }
}
and the terragrunt file of the dependency
Copy code
locals {
  aws_service_name = basename(get_terragrunt_dir())
  
}

terraform {
  source = "git::<ssh://git@github.com/terraform-aws-modules/terraform-aws-vpc.git//.?ref=v3.12.0>"
}

include {
  path = find_in_parent_folders()
}

# the following part is filled in line with <https://github.com/terraform-aws-modules/terraform-aws-vpc#inputs>
# you may define your own parameters accordingly
inputs = {
  name                               = local.aws_service_name
  region                             = local.aws_region
  cidr                               = "20.0.0.0/16"
  public_subnets                     = ["20.0.0.0/24", "20.0.1.0/24"]
  private_subnets                    = ["20.0.3.0/24", "20.0.4.0/24"]
  database_subnets                   = ["20.0.6.0/24", "20.0.7.0/24"]
  elasticache_subnets                = ["20.0.9.0/24", "20.0.10.0/24"]
  azs                                = ["eu-west-1a", "eu-west-1c"]
  public_subnet_suffix               = "public"
  private_subnet_suffix              = "private"
  database_subnet_suffix             = "database"
  elasticache_subnet_suffix          = "elasticache"
  create_database_subnet_route_table = true
  enable_nat_gateway                 = true
  
  vpc_tags = {}
  
  private_subnet_tags = {
    "Subnet" = "Private",
  }
  
  public_subnet_tags = {
    "Subnet" = "Public"
  }
  
  tags = {
    terraform                       = "true"
    environment                     = local.aws_service_name
    # please write your own department
    department                      = ""
    name                            = local.aws_service_name 
  }
}
l
Thanks, I’m trying a few things but still only able to reproduce when using
run-all
commands, not
terragrunt show
directly
I don’t know much about the mock outputs, but is there any harm adding
show
to
mock_outputs_allowed_terraform_commands
?
s
once I run the commands in here I am getting the error, which are,
Copy code
terragrunt run-all plan -out tfplan.binary
terragrunt show  $(find . -name tfplan.binary)
As I explained here, using
run-all plan
and
show
commands sequentially has a known issue, thus I tried to do it with
plan
and
show
and still getting the same error. It is related to terragrunt itself, but I just wanted know if have you seen this problem anywhere else.
l
Yeah, it’s only something I’ve seen with
run-all
before. I know the
--terragrunt-ignore-external-dependencies
is meant to be for
run-all
but I’m curious if using it with
terragrunt show
helps as well?
s
Do you mean running
terragrunt show --terragrunt-ignore-external-dependencies
? if so, I can try
nope, still same error 😔
Copy code
$ terragrunt show tfplan-3.binary   --terragrunt-ignore-external-dependencies
ERRO[0020] .../terragrunt.hcl is a dependency of .../terragrunt.hcl but detected no outputs. Either the target module has not been applied yet, or the module has no outputs. If this is expected, set the skip_outputs flag to true on the dependency block. 
ERRO[0020] Unable to determine underlying exit code, so Terragrunt will exit with error code 1
l
Hmm, did adding
show
to
mock_outputs_allowed_terraform_commands
help with anything?
s
😳 I never thought it before, let me try
I feel stupid and super grateful 😃 Though, I had two tweak
terragrunt run-all plan -out tfplan.binary
to
terragrunt plan -out tfplan.binary
here.
l
did
mock_outputs_allowed_terraform_commands
work?
s
yep this solves the problem but as I said, this does not work for
run-all plan
l
Interesting, thanks for diving into this with me! With
run-all plan
maybe
--terragrunt-ignore-external-dependencies
is needed?
s
let me try this one too
yep, this one works too
in a nutshell, either this or this has to be done. maybe this should be changed here
l
Thanks! I’ve updated that docs page 🙏
s
great! thank you all again for this super tool!
🙌 1
116 Views