Geri Uliu
Geri Uliu

Reputation: 11

terraform add multiple VM and change the default name of the resoruces

I need a bit of help as I have a terraform script and I want to add multiple VM and change the name of the network card like node_name-NIC and do the same thing even for the other resources but is failing and i cant fine the proper way to do it.

below is the terraform script

terraform {
  required_providers {
    azurerm = {
//      source  = "hashicorp/azurerm"
      version = "=1.44"
    }
  }
}



locals {
  rsname = "testing-new-terraform-modules"
  node_name = ["server1","server2"]
  clustersize = 2
  node_size = "Standard_B4ms"
  av_set_name = "Windows-AV-Set"
  vnet_name = "VNET_1"
  vnet_rg = "RG_VNET_D" 
  gw_subnet = "SUB_GW_INT"
  vm_subnet = "SUB_WIN"
  image_rg = "RG__TEMPLATE"


  common_tags = {
    lbuildingblock = "GENERAL"
    customer = "IND"
  }

}

module "resource_group" {
  source = "../modules/resources/azure/data-resource-group"
  rsname = local.rsname
}

data "azurerm_virtual_network" "virtual_network" {
  name = local.vnet_name
  resource_group_name = local.vnet_rg
}

# GatewayZone subnet, for the Load Balancer frontend IP address
module "gw_subnet" {
  source = "../modules/resources/azure/data-subnet"

  subnet-name = local.gw_subnet
  vnet-name   = data.azurerm_virtual_network.virtual_network.name
  rs-name     = data.azurerm_virtual_network.virtual_network.resource_group_name
}

module "windows_subnet" {
  source = "../modules/resources/azure/data-subnet"
  //  We will use the SUB_LHIND_P_APP subnet, no need to create a new subnet just for two servers
  subnet-name =  local.vm_subnet
  rs-name     = local.vnet_rg
  vnet-name   = local.vnet_name
}

//data "azurerm_network_security_group" "app_nsg" {
//
//  name =  "SUB_LHIND_D_APP_NSG"
//  resource_group_name = data.azurerm_virtual_network.virtual_network.resource_group_name
//}

module "nic" {
  source = "../modules/resources/azure/network-interface"


  location = module.resource_group.rs_group_location
  name = "${local.node_name[0]}-NIC"

  nic_count = local.clustersize
  resource_group = module.resource_group.rs_group_name
  subnet_id = module.windows_subnet.subnet_id
  tags = local.common_tags
}

module "av_set" {
  source = "../modules/resources/azure/availability-set"

  av_name = local.av_set_name
  resource_group = module.resource_group.rs_group_name
  location = module.resource_group.rs_group_location
}

module "template_image" {
  source = "../modules/resources/azure/data-templates"

  template_name = "WindowsServer2019"
  resource_group = local.image_rg
}

module "windows" {
  source = "../modules/resources/azure/windows-server"

  location = module.resource_group.rs_group_location
  network_interface_ids = module.nic.nic_id
  node_count = local.clustersize
  node_name = local.node_name
  node_size = local.node_size
  av_set_id = module.av_set.availability_set_id
  resource_group = module.resource_group.rs_group_name
  template_id = module.template_image.template_id
  username = var.username
  password = var.password
  domain_user = var.domain_user
  domain_pass = var.domain_pass

}

is failing with the below error

Error: Invalid index

  on ../modules/resources/azure/network-interface/main.tf line 10, in resource "azurerm_network_interface" "nic":
  10:     name = var.name[count.index]
    |----------------
    | count.index is 0
    | var.name is "SW-AZLHIND-580-NIC"

This value does not have any indices.

and the resource Network-Interface is like below

resource "azurerm_network_interface" "nic" {
  count = var.nic_count
  location = var.location
  name = var.name[count.index]
  resource_group_name = var.resource_group
  tags = var.tags
//  network_security_group_id = var.network_security_group_id

  ip_configuration {
    name = var.name[count.index]
    private_ip_address_allocation = "dynamic"
    subnet_id = var.subnet_id
  }
}

Upvotes: 1

Views: 711

Answers (1)

Marcin
Marcin

Reputation: 238975

You can use the following:

name = "{var.name}-${count.index}"

Upvotes: 1

Related Questions