我正在寻找创建大约。 15个具有Terraform的虚拟机,它们在Azure中都有各自的大小,例如B2S,B2MS等。它们还具有不同大小的磁盘。我知道您可以使用复制索引来遍历数组,但是我不确定使用具有很多不同属性的VM的最佳方法。
有没有一种方法可以为每个VM规范创建一个映射对象,然后通过在TF文件中创建虚拟机来遍历它?目前,我能看到的唯一方法是在主文件中创建一个单独的虚拟机资源,并引用每个单独的映射文件。
答案 0 :(得分:1)
创建一个以vm前缀为键,大小为值的地图:
variable "vms" {
type = "map"
default = {
vm1 = "Standard_DS1_v2"
vm2 = "Standard_ES2_v2"
}
}
创建您的VMS:
# Network Interfaces for each one of the VMs
resource "azurerm_network_interface" "main" {
# looping to create a resource for each entry in the map
for_each = var.vms
# Accessing keys in the map by each.key
name = "${each.key}-nic"
...
}
resource "azurerm_virtual_machine" "main" {
# Looping to create a VM per entry in the map
for_each = var.vms
# Accessing names of map entries
name = "vm-${each.key}-we"
# Here we make sure we access the corrrect
network_interface_ids = [azurerm_network_interface.main[each.key]]
vm_size = each.value
...
os_profile {
# Accessing names of map entries again
computer_name = "vm-${each.key}-we"
...
}
...
}
为简洁起见,我没有写下创建Azure虚拟机的整个示例。 您需要根据需要填写许多属性。
有关如何创建Azure VMS的文档:https://www.terraform.io/docs/providers/azurerm/r/virtual_machine.html 有关资源并将其“循环”的文档:https://www.terraform.io/docs/configuration/resources.html Terraform拥有IMO最好的文档。