我正在尝试编写一个 for 循环来获取以下 terraform 代码的磁盘映射对象。但是,我在 terraform 计划时收到“此对象没有名为“磁盘”的属性”错误。
locals {
image = {
nodes = {
vm1 = {
name = "vm1"
vm_num = "1"
networks = {
nic1 = {
name = "vm1-nic1"
subnet = "subnet1"
}
nic2 = {
name = "vm1-nic2"
subnet = "subnet2"
}
}
},
vm2 = {
name = "vm2"
vm_num = "2"
networks = {
nic1 = {
name = "vm2-nic1"
subnet = "subnet2"
}
nic2 = {
name = "vm2-nic2"
subnet = "subnet2"
}
}
disks ={
disk1 = {
"lun" = "0"
"size" = "1024"
},
disk2 = {
"lun" = "1"
"size" = "1024"
}
}
}
}
}
}
output "iterate-networks" {
value = {
for_each = { for vm in flatten([for vm_name, vm in local.image.nodes : [for nic_name, nic in vm.networks : { vm_number = vm.vm_num, vm_name = vm_name, nic_name = nic_name, nic_value = nic.name, subnet_name = nic.subnet }]]) : "${vm.vm_name}-${vm.nic_name}" => vm }
}
}
output "iterate-disks" {
value = {
for_each = { for vm in flatten([for vm_name, vm in local.image.nodes : [for disk_name, disk in vm.disks : { vm_number = vm.vm_num, disk_name= disk_name, disk_lun = disk.lun, disk_size = disk.size }]]) : "${vm.vm_name}-${vm.num}" => vm }
}
}
地形规划时出错:
Error: Unsupported attribute
│
│ on provider.tf line 136, in output "iterate-disks":
│ 136: for_each = { for vm in flatten([for vm_name, vm in local.image.nodes : [for disk_name, disk in vm.disks : { vm_number = vm.vm_num, disk_name= disk_name, disk_lun = disk.lun, disk_size = disk.size }]]) : "${vm.vm_name}-${vm.nic_name}" => vm }
│
│ This object does not have an attribute named "disks".
有人可以解决这个问题吗?先感谢您。
disks
只在 中vm2
,而不在 中,因此您必须在每次迭代中vm1
检查是否缺少。disks
您可以使用lookup
以下方法执行此操作: