user1191140
user1191140

Reputation: 1579

Accessing the output from module via index

I am trying to create 2 VMs on Azure using Terraform.

I create 2 NICs like

variable "internalips" {
  description = "List of Internal IPs"
  default = ["10.0.2.10", "10.0.2.11"]
  type = "list"
}


resource "azurerm_network_interface" "helloterraformnic" {
count = 2
name = "nic-${count.index}"
location = "West US"
resource_group_name = "myrg"

    ip_configuration {
        name = "testconfiguration1"
        subnet_id = "${azurerm_subnet.helloterraformsubnet.id}"
        private_ip_address_allocation = "static"
        private_ip_address = "${element(private_ip_address, count.index)}"
    }
}

Now I want to use them in module azurerm_virtual_machine

resource "azurerm_virtual_machine" "helloterraformvm" {
    count = 2
    name = "${element(elasticmachines, count.index)}"
    location = "West US"
    resource_group_name = "myrg"
    network_interface_ids = "${element(azurerm_network_interface.helloterraformnic, count.index)}"
....
}

This gives me an error

Failed to load root config module: Error loading azure/rg.tf: Error reading config for azurerm_virtual_machine[helloterraformvm]: azurerm_network_interface.helloterraformnic: resource variables must be three parts: TYPE.NAME.ATTR in:

${element(azurerm_network_interface.helloterraformnic, count.index)}

How can I use the above created NICs using index ?

Upvotes: 0

Views: 2046

Answers (1)

BMW
BMW

Reputation: 45243

First thinking to use length function to get the counts more than hard coding it.

from

count = 2

change to

count = "${length(var.internalips)}"

For your problem, you need to tell the resource which attribute you want to get the value.

network_interface_ids = "${element(azurerm_network_interface.helloterraformnic.id, count.index)}"

Refer:

terraform Interpolation Syntax

terraform azurerm_virtual_machine Attributes Reference

Upvotes: 2

Related Questions