diff --git a/pkg/multicloud/esxi/virtualmachine.go b/pkg/multicloud/esxi/virtualmachine.go index 2b2208e0d9..19f4e2665d 100644 --- a/pkg/multicloud/esxi/virtualmachine.go +++ b/pkg/multicloud/esxi/virtualmachine.go @@ -726,8 +726,13 @@ func (self *SVirtualMachine) fetchHardwareInfo() error { return fmt.Errorf("invalid vm") } - for i := 0; i < len(moVM.Config.Hardware.Device); i += 1 { - dev := moVM.Config.Hardware.Device[i] + // sort devices via their Key + devices := moVM.Config.Hardware.Device + sort.Slice(devices, func(i, j int) bool { + return devices[i].GetVirtualDevice().Key < devices[j].GetVirtualDevice().Key + }) + for i := 0; i < len(devices); i += 1 { + dev := devices[i] devType := reflect.Indirect(reflect.ValueOf(dev)).Type() etherType := reflect.TypeOf((*types.VirtualEthernetCard)(nil)).Elem() @@ -738,7 +743,7 @@ func (self *SVirtualMachine) fetchHardwareInfo() error { if reflectutils.StructContains(devType, etherType) { self.vnics = append(self.vnics, NewVirtualNIC(self, dev, len(self.vnics))) } else if reflectutils.StructContains(devType, diskType) { - self.vdisks = append(self.vdisks, NewVirtualDisk(self, dev, len(self.vnics))) + self.vdisks = append(self.vdisks, NewVirtualDisk(self, dev, len(self.vdisks))) } else if reflectutils.StructContains(devType, vgaType) { self.vga = NewVirtualVGA(self, dev, 0) } else if reflectutils.StructContains(devType, cdromType) {