Ошибка развертывания в нескольких регионах Azure для count.index много раз - PullRequest
0 голосов
/ 30 сентября 2019

Я пытаюсь создать простейший сценарий terraform для развертывания 6 виртуальных машин linux в 6 различных регионах Azure. Однако моя концепция, похоже, не работает, и я не уверен, что делать дальше.

Iполучить эту ошибку в нескольких местах:

Error: Reference to "count" in non-counted context

  on main.tf line 4, in resource "azurerm_resource_group" "mygroup":
   4:     location = "${var.regions[count.index]}"

The "count" object can be used only in "resource" and "data" blocks, and only
when the "count" argument is set.

Если я просто помещу строку вместо указанного места, я просто получу больше ошибок, как это, в других местах.

Я написал несколькоterraform code и попытался проверить его с помощью исполняемого файла terraform.

Мой файл variables.tf:

variable “regions” {
description = “Regions to deploy”
type = list
default = [“canadaeast”, “eastus”, “japaneast”, “ukwest”, “southeastasia”, “germanynorth”]
}

variable “name” {
description = “name”
type = list
default = [“albert”, “ben”, “carol”, “denis”, “eric”, “frank”]
}

и мой файл main.tf:

# Create a resource group
resource "azurerm_resource_group" "mygroup" {
    name     = "RG-MyVMs"
    location = "${var.regions[count.index]}"
}

# Create virtual network
resource "azurerm_virtual_network" "mynetwork" {
    name                = "myVnet-${var.name[count.index]}"
    address_space       = ["10.0.0.0/16"]
    location            = "${var.regions[count.index]}"
    resource_group_name = "${azurerm_resource_group.mygroup.name}"
}

# Create subnet
resource "azurerm_subnet" "mysubnet" {
    name                 = "mySubnet-${var.name[count.index]}"
    resource_group_name  = "${azurerm_resource_group.mygroup.name}"
    virtual_network_name = "${azurerm_virtual_network.mynetwork.name}"
    address_prefix       = "10.0.1.0/24"
}

# Create public IPs
resource "azurerm_public_ip" "mypublicip" {
    name                         = "myPublicIP"
    location                     = "${var.regions[count.index]}"
    resource_group_name          = "${azurerm_resource_group.mygroup.name}"
    allocation_method            = "Dynamic"
}

# Create Network Security Group and rule
resource "azurerm_network_security_group" "mynsg" {
    name                = "myNetworkSecurityGroup"
    location            = "${var.regions[count.index]}"
    resource_group_name = "${azurerm_resource_group.mygroup.name}"

    security_rule {
        name                       = "SSH"
        priority                   = 1001
        direction                  = "Inbound"
        access                     = "Allow"
        protocol                   = "Tcp"
        source_port_range          = "*"
        destination_port_range     = "22"
        source_address_prefix      = "*"
        destination_address_prefix = "*"
    }
}

# Create network interface
resource "azurerm_network_interface" "mynic" {
    name                      = "myNIC"
    location                  = "${var.regions[count.index]}"
    resource_group_name       = "${azurerm_resource_group.mygroup.name}"
    network_security_group_id = "${azurerm_network_security_group.mynsg.id}"

    ip_configuration {
        name                          = "myNicConfiguration"
        subnet_id                     = "${azurerm_subnet.mysubnet.id}"
        private_ip_address_allocation = "Dynamic"
        public_ip_address_id          = "${azurerm_public_ip.mypublicip.id}"
    }
}

# Create virtual machine
resource "azurerm_virtual_machine" "myvm" {
    count                 = "${length(var.regions)}"
    name                  = "${var.name[count.index]}"
    location              = "${var.regions[count.index]}"
    resource_group_name   = "${azurerm_resource_group.mygroup.name}"
    network_interface_ids = ["${azurerm_network_interface.mynic.id}"]
    vm_size               = "Standard_B1ls"

    storage_os_disk {
        name              = "myOsDisk"
        caching           = "ReadWrite"
        create_option     = "FromImage"
        managed_disk_type = "Standard_LRS"
    }

    storage_image_reference {
        publisher = "Canonical"
        offer     = "UbuntuServer"
        sku       = "18.04.0-LTS"
        version   = "latest"
    }

     os_profile {
    computer_name  = "${var.name[count.index]}"
    admin_username = "admin"
    admin_password = ""
  }
  os_profile_linux_config {
    disable_password_authentication = false
  }

}

Яожидается достижение моих целей и проверка этого кода перед попыткой развертывания.

...