terraform - 如何使用 Terraform 代码在 azure vm 中附加磁盘
问题描述
我正在尝试创建多个虚拟机和托管磁盘以在创建后关联。我可以看到磁盘已创建并仅与列表中的第一个 VM 相关联。我不确定如何在下面的代码中分配正确的索引号。
我相信是 Virtual_Machine_id 造成了这个问题,有没有人遇到过类似的情况,请指教。
resource “azurerm_managed_disk” “app_managed_disk” {
count = “${length(var.data_disk_names)}”
name = “ var.apphostname−{var.data_disk_names[count.index %length(var.data_disk_names)]}”
location = azurerm_resource_group.poc_rg.location
resource_group_name = azurerm_resource_group.poc_rg.name
storage_account_type = var.app_disk_type
create_option = “Empty”
disk_size_gb = “${var.data_disk_sizes[count.index % length(var.data_disk_sizes)]}”
}
resource “azurerm_virtual_machine_data_disk_attachment” “app_disk_attach” {
count = “${length(var.data_disk_names)}”
vm_count = length(var.vm_app_name)
managed_disk_id = “${azurerm_managed_disk.app_managed_disk[count.index % length(azurerm_managed_disk.app_managed_disk)].id}”
virtual_machine_id = azurerm_linux_virtual_machine.app-vm-pas[0].id
lun = “${count.index + 1}”
caching = “ReadWrite”
}
```
解决方案
您可以遍历所有虚拟机和相应的虚拟磁盘,这里假设您想要为一组类似的虚拟机创建多个类似的附加磁盘
从上面的代码中,您走在了正确的道路上,但您似乎只在安装时引用了第一个 VM,这可能会更好地为您服务:
variable "cnt" {
default = 1
description = "instances to be created"
}
variable "managed_disks" {
type = list(map(string))
default = []
}
#cnt=2
#managed_disks = [{
# storage_account_type : "Premium_LRS"
# disk_size_gb : "256"
# }]
resource "azurerm_managed_disk" "default" {
count = length(var.managed_disks)>0?(length(var.managed_disks)*var.cnt):0
name = "${var.name}-md-${count.index%var.cnt}-${count.index%length(var.managed_disks)}"
location = var.location
resource_group_name = var.resource_group
storage_account_type = coalesce(var.managed_disks[count.index%length(var.managed_disks)].storage_account_type,"StandardSSD_LRS")
create_option = "Empty"
disk_size_gb = coalesce(var.managed_disks[count.index%length(var.managed_disks)].disk_size_gb,"64")
tags = merge(
var.tags,
{
}
)
}
resource "azurerm_virtual_machine_data_disk_attachment" "default" {
count = length(var.managed_disks)>0?(length(var.managed_disks)*var.cnt):0
managed_disk_id = azurerm_managed_disk.default[count.index].id
virtual_machine_id = azurerm_linux_virtual_machine.default[count.index%var.cnt].id
lun = 1+count.index
caching = "ReadWrite"
}
有了这个,您应该能够为每个虚拟机调出一组具有类似定义的托管磁盘的虚拟机。
推荐阅读
- c# - 如何更改十进制格式
- javascript - 将位于 Heroku 的 Node.js 应用程序日志发送到文件
- java - 未找到 Wildfly 15 外部 Artemis ActiveMQ 目的地
- java - 如何调用 scanDouble() 方法?
- c# - 操作子对象的材质元素
- azure - TCP 客户端无法接收来自服务器的响应
- mysql - mysql准备好的语句是否有编号的占位符
- javascript - startsWith() 检查不同的字母或字符串
- mysql - 通过 test_id 选择最低 our_price 组
- javascript - 嵌套数组 - 使用 for 循环嵌套时更新子数组不起作用?