Zester07
Zester07

Reputation: 215

Terraform Module dependency not working ( version 0.12)

i am trying to pass one output value from one terraform module to another terraform module, but facing below issue

my use case is this, in first module i am creating one IAM role and in the second module i need to use above created IAM role (also, in second module if role is not getting created in first module it will create role itself in second module, please consider it as requirement)

module "createiamrole"{
  source = "./modules/createiamrole"
}


// this module creates new role, if role is not supplied from above module (default value of iam_role is "" set in variables.tf).
module "checkiamrole"{
  source = "./modules/checkiamrole"
  iam_role_depends_on = module.createiamrole.iam_role_name
  iam_role    = "${module.createiamrole.iam_role_name}"
}

outputs.tf for stroing iam_role_name from first module

output "iam_role_name" {
  description = "name for IAM role"
  value       = aws_iam_role.createiamrole[0].name
}

resource code of module checkiamrole for which i am getting error

resource "aws_iam_role" "newrole" {
  count              = var.iam_role == "" ? 1 : 0
  name               = "my-new-iamrole"
  assume_role_policy = data.aws_iam_policy_document.iampolicy[0].json

  tags = var.tags

  depends_on = [var.iam_role_depends_on]
}

Error Invalid count argument

count = var.iam_role == "" ? 1 : 0

The "count" value depends on resource attributes that cannot be determined until apply, so Terraform cannot predict how many instances will be created. To work around this, use the -target argument to first apply only the resources that the count depends on.

My Query is how to implement module dependency as well how to pass one output value from dependent module to required module

Upvotes: 1

Views: 1256

Answers (1)

Marcin
Marcin

Reputation: 238299

Your count, as the error message says, can't depend on any other resources. The condition for the count must be know before you run your code. So you have to create some new variable, e.g. var.create_role which you specify during your apply. Based on this value, the modules will create or not create the role in question.

Other alternative, again as the error message says, is to first deploy module1, and then module2.

Upvotes: 1

Related Questions