简体   繁体   中英

Azure VM Creation using For_Each loop via Terraform

I am trying to create multiple Azure VM using for_each via terrform , I am able to create 2 NIC card but while defining NIC id in zurerm_windows_virtual_machine block , both VM are picking same NIC card (last one , index 1) and result is only VM is getting created and other got failed . what would be logic for (network_interface_ids = azurerm_network_interface.az_nic[*].id) put that 1st vm will pick 1st NIC and second do so .

#---------------creating Network Interface for Windows VM's---------------

resource "azurerm_network_interface" "az_nic" {
  count               = length(var.vm_names)
  name                = "${var.vm_names[count.index]}_nic"
  location            = var.location
  resource_group_name = data.azurerm_resource_group.Resource_group.name


  ip_configuration {
    name                          = var.vm_names[count.index]
    subnet_id                     = data.azurerm_subnet.subnet.id
    private_ip_address_allocation = "Dynamic"
  }
}

resource "azurerm_windows_virtual_machine" "myvm" {
  for_each              = toset(var.vm_names)
  name                  = each.value
  resource_group_name   = data.azurerm_resource_group.Resource_group.name
  location              = var.location
  size                  = "Standard_D2s_v3"
  admin_username        = "abc"
  admin_password        = "uejehrikch123"
  network_interface_ids = azurerm_network_interface.az_nic[*].id
       
 
  source_image_reference {
    publisher = "MicrosoftWindowsServer"
    offer     = "WindowsServer"
    sku       = "2016-Datacenter"
    version   = "latest"
  }

  os_disk {
    caching              = "ReadWrite"
    storage_account_type = "Standard_LRS"
  }

You can add the count parameter in the resource "azurerm_windows_virtual_machine" instead of mixing the count and for_each .

Suppose you have

variable "vm_names" {
  default = ["vm1", "vm2"]
}

then you can change the resource .tf file like this:

resource "azurerm_windows_virtual_machine" "myvm" {
  count                 = length(var.vm_names)
  name                  = element(var.vm_names,count.index)
  resource_group_name   = data.azurerm_resource_group.Resource_group.name
  location              = var.location
  size                  = "Standard_D2s_v3"
  admin_username        = "abc"
  admin_password        = "uejehrikch123"
  network_interface_ids =  [element(azurerm_network_interface.az_nic.*.id, count.index)]
       
 
  source_image_reference {
    publisher = "MicrosoftWindowsServer"
    offer     = "WindowsServer"
    sku       = "2016-Datacenter"
    version   = "latest"
  }

  os_disk {
    caching              = "ReadWrite"
    storage_account_type = "Standard_LRS"
  }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM