Merge pull request #8194 from rainzm/esxiagent/fix_nil

fix(esxi): check nil value when NewVirtualMachine
This commit is contained in:
yunion-ci-robot
2020-10-10 19:03:48 +08:00
committed by GitHub
4 changed files with 27 additions and 7 deletions
+6 -1
View File
@@ -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
+8 -1
View File
@@ -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)
+5 -1
View File
@@ -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 {
+8 -4
View File
@@ -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 {