mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-08-30 17:13:08 +08:00
Merge pull request #8194 from rainzm/esxiagent/fix_nil
fix(esxi): check nil value when NewVirtualMachine
This commit is contained in:
@@ -256,7 +256,12 @@ func (dc *SDatacenter) fetchVms(vmRefs []types.ManagedObjectReference, all bool)
|
||||
vms := make([]*SVirtualMachine, 0, len(movms))
|
||||
for i := range movms {
|
||||
if all || !strings.HasPrefix(movms[i].Entity().Name, api.ESXI_IMAGE_CACHE_TMP_PREFIX) {
|
||||
vms = append(vms, NewVirtualMachine(dc.manager, &movms[i], dc))
|
||||
vm := NewVirtualMachine(dc.manager, &movms[i], dc)
|
||||
// must
|
||||
if vm == nil {
|
||||
continue
|
||||
}
|
||||
vms = append(vms, vm)
|
||||
}
|
||||
}
|
||||
return vms, nil
|
||||
|
||||
@@ -922,7 +922,11 @@ func (self *SHost) DoCreateVM(ctx context.Context, ds *SDatastore, params SCreat
|
||||
return nil, errors.Wrap(err, "fail to fetch virtual machine just created")
|
||||
}
|
||||
|
||||
return NewVirtualMachine(self.manager, &moVM, self.datacenter), nil
|
||||
evm := NewVirtualMachine(self.manager, &moVM, self.datacenter)
|
||||
if evm == nil {
|
||||
return nil, errors.Error("create successfully but unable to NewVirtualMachine")
|
||||
}
|
||||
return evm, nil
|
||||
}
|
||||
|
||||
func (host *SHost) CloneVM(ctx context.Context, from *SVirtualMachine, ds *SDatastore, params SCreateVMParam) (*SVirtualMachine, error) {
|
||||
@@ -1095,6 +1099,9 @@ func (host *SHost) CloneVM(ctx context.Context, from *SVirtualMachine, ds *SData
|
||||
|
||||
// resize the disk
|
||||
vm := NewVirtualMachine(host.manager, &moVM, host.datacenter)
|
||||
if vm == nil {
|
||||
return nil, errors.Error("clone successfully but unable to NewVirtualMachine")
|
||||
}
|
||||
sort.Sort(byDiskType(vm.vdisks))
|
||||
for i, s := range newSizes {
|
||||
err := vm.vdisks[i].Resize(ctx, s)
|
||||
|
||||
@@ -553,7 +553,11 @@ func (cli *SESXiClient) FindVMByPrivateID(idstr string) (*SVirtualMachine, error
|
||||
return nil, errors.Wrap(err, "reference2Object fail")
|
||||
}
|
||||
|
||||
return NewVirtualMachine(cli, &vm, nil), nil
|
||||
ret := NewVirtualMachine(cli, &vm, nil)
|
||||
if ret == nil {
|
||||
return nil, errors.Error("invalid vm")
|
||||
}
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
func (cli *SESXiClient) DoExtendDiskOnline(_vm *SVirtualMachine, _disk *SVirtualDisk, newSizeMb int64) error {
|
||||
|
||||
@@ -76,7 +76,11 @@ func (d byDiskType) Less(i, j int) bool {
|
||||
|
||||
func NewVirtualMachine(manager *SESXiClient, vm *mo.VirtualMachine, dc *SDatacenter) *SVirtualMachine {
|
||||
svm := &SVirtualMachine{SManagedObject: newManagedObject(manager, vm, dc)}
|
||||
svm.fetchHardwareInfo()
|
||||
err := svm.fetchHardwareInfo()
|
||||
if err != nil {
|
||||
log.Errorf("NewVirtualMachine: %v", err)
|
||||
return nil
|
||||
}
|
||||
return svm
|
||||
}
|
||||
|
||||
@@ -703,7 +707,7 @@ func (self *SVirtualMachine) UpdateUserData(userData string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (self *SVirtualMachine) fetchHardwareInfo() {
|
||||
func (self *SVirtualMachine) fetchHardwareInfo() error {
|
||||
self.vnics = make([]SVirtualNIC, 0)
|
||||
self.vdisks = make([]SVirtualDisk, 0)
|
||||
self.cdroms = make([]SVirtualCdrom, 0)
|
||||
@@ -717,8 +721,7 @@ func (self *SVirtualMachine) fetchHardwareInfo() {
|
||||
}
|
||||
|
||||
if moVM == nil || moVM.Config == nil || moVM.Config.Hardware.Device == nil {
|
||||
log.Errorf("invalid vm config, moVM: %#v", moVM)
|
||||
return
|
||||
return fmt.Errorf("invalid vm")
|
||||
}
|
||||
|
||||
for i := 0; i < len(moVM.Config.Hardware.Device); i += 1 {
|
||||
@@ -746,6 +749,7 @@ func (self *SVirtualMachine) fetchHardwareInfo() {
|
||||
sort.Slice(self.vdisks, func(i, j int) bool {
|
||||
return self.vdisks[i].GetIndex() < self.vdisks[j].GetIndex()
|
||||
})
|
||||
return nil
|
||||
}
|
||||
|
||||
func (self *SVirtualMachine) getVdev(key int32) SVirtualDevice {
|
||||
|
||||
Reference in New Issue
Block a user