trajan
trajan

Reputation: 1173

Terraform modules and providers

I have a module that defines a provider as follows

provider "aws" {
    region                  = "${var.region}"
    shared_credentials_file = "${module.global_variables.shared_credentials_file}"
    profile                 = "${var.profile}"
}

and an EC instance as follows

resource "aws_instance" "node" {
    ami = "${lookup(var.ami, var.region)}"
    key_name   = "ib-us-east-2-production"
    instance_type = "${var.instance_type}"
    count = "${var.count}"
    security_groups = "${var.security_groups}"
    tags {
        Name = "${var.name}"
    }
    root_block_device {
        volume_size = 100
    }

In the terraform script that calls this module, I would now like to create an ELB and attach it point it to the instance with something along the lines of

resource "aws_elb" "node_elb" {
    name               = "${var.name}-elb"
    .........

However terraform keeps prompting me for the aws region that is already defined in the module. The only way around this is to copy the provider block into the file calling the module. Is there a cleaner way to approach this?

Upvotes: 1

Views: 1519

Answers (1)

manojlds
manojlds

Reputation: 301037

The only way around this is to copy the provider block into the file calling the module.

The provider block should actually be in your file calling the module and you can remove it from your module.

From the docs:

For convenience in simple configurations, a child module automatically inherits default (un-aliased) provider configurations from its parent. This means that explicit provider blocks appear only in the root module, and downstream modules can simply declare resources for that provider and have them automatically associated with the root provider configurations.

https://www.terraform.io/docs/configuration/modules.html#implicit-provider-inheritance

Upvotes: 4

Related Questions