как создать Terraform for_each l oop для количества виртуальных машин в Azure наборе доступности - PullRequest
0 голосов
/ 19 марта 2020

Мы можем создать несколько azure vms в наборе доступности, используя "count" l oop.

Как мы можем создать то же самое, используя "for_each" l oop, где имя хоста и сетевой интерфейс совпадают будет динамическим c и зацикленным. (в террраформе> 0,12,6)

resource "azurerm_virtual_machine" "test" {

 # user provides inputs only for the number of vms to be created in the Azure avaialibility set

 count                 = var.count 
 name                  = "acctvm${count.index}"
 location              = azurerm_resource_group.test.location
 availability_set_id   = azurerm_availability_set.avset.id
 resource_group_name   = azurerm_resource_group.test.name
 network_interface_ids = [element(azurerm_network_interface.test.*.id, count.index)]
 vm_size               = "Standard_DS1_v2"
 tags                  = var.tags

1 Ответ

0 голосов
/ 19 марта 2020

Для каждого нужно установить значение l oop over. Я предполагаю, что вы используете переменную в качестве входных данных, поэтому

variable "vms" {
  type = list(string)
  default = ["alpha", "beta"]
}

variable "vms_data" {
  type = map(map(string))
  default = {
    alpha = {
      hostname = "alpha"
      interfaceid = "01"
    }
    alpha = {
      hostname = "beta"
      interfaceid = "02"
    }
  }
}

resource "azurerm_virtual_machine" "test" {
  for_each = toset(var.vms)

  name = var.vms_data[each.value].hostname
  location = azurerm_resource_group.test.location
  availability_set_id = azurerm_availability_set.avset.id
  resource_group_name = azurerm_resource_group.test.name
  network_interface_ids = [
    element(azurerm_network_interface.test.*.id, var.vms_data[each.value].interfaceid)]
  vm_size = "Standard_DS1_v2"
  tags = var.tags
}

Но она еще не реализована для Azure (ст. 12.23). Я получил ошибку The name "for_each" is reserved for use in a future version of Terraform.

...