From f664cc25a975639c0647bb277b616edd7ea104f7 Mon Sep 17 00:00:00 2001 From: Qu Xuan Date: Wed, 11 Aug 2021 18:26:11 +0800 Subject: [PATCH] fix(region): return sql error --- pkg/compute/guestdrivers/baremetals.go | 14 +-- pkg/compute/guestdrivers/esxi.go | 10 +- pkg/compute/guestdrivers/kvm.go | 23 ++--- pkg/compute/guestdrivers/managedvirtual.go | 24 ++--- pkg/compute/guestdrivers/openstack.go | 6 +- pkg/compute/guestdrivers/qcloud.go | 4 +- pkg/compute/guestdrivers/virtualization.go | 2 +- pkg/compute/hostdrivers/esxi.go | 5 +- pkg/compute/hostdrivers/kvm.go | 6 +- pkg/compute/misc/handler.go | 3 +- pkg/compute/models/capabilities.go | 4 +- pkg/compute/models/cloudaccounts.go | 2 +- pkg/compute/models/cloudproviders.go | 6 +- pkg/compute/models/cloudsync.go | 4 +- pkg/compute/models/dbinstances.go | 2 +- pkg/compute/models/diskresource.go | 43 +++++---- pkg/compute/models/disks.go | 93 ++++++++++--------- pkg/compute/models/elastic_search.go | 10 +- pkg/compute/models/elasticcache_accounts.go | 5 +- pkg/compute/models/elasticcache_acls.go | 5 +- pkg/compute/models/elasticcache_backups.go | 5 +- pkg/compute/models/elasticcache_instances.go | 32 ++++--- pkg/compute/models/elasticcache_parameters.go | 3 +- pkg/compute/models/elasticcacheresource.go | 3 +- pkg/compute/models/elasticips.go | 26 +++--- pkg/compute/models/filesystem.go | 7 +- pkg/compute/models/filters.go | 6 +- pkg/compute/models/guest_actions.go | 87 +++++++++-------- pkg/compute/models/guest_migrate_network.go | 4 +- pkg/compute/models/guest_sshable.go | 2 +- pkg/compute/models/guest_template.go | 2 +- pkg/compute/models/guestdisks.go | 4 +- pkg/compute/models/guestnetworks.go | 12 ++- pkg/compute/models/guestresource.go | 43 +++++---- pkg/compute/models/guests.go | 92 +++++++++--------- pkg/compute/models/helper.go | 10 +- pkg/compute/models/host_recycle.go | 21 +++-- pkg/compute/models/hosts.go | 59 ++++++------ pkg/compute/models/instance_snapshots.go | 10 +- pkg/compute/models/kafka.go | 10 +- .../models/loadbalancerbackendgroups.go | 6 +- pkg/compute/models/loadbalancers.go | 18 ++-- pkg/compute/models/mount_targets.go | 2 +- pkg/compute/models/natgateways.go | 10 +- pkg/compute/models/natstable.go | 2 +- pkg/compute/models/networkresource.go | 53 ++++++----- pkg/compute/models/networks.go | 52 +++++------ pkg/compute/models/route_table_associtaion.go | 4 +- pkg/compute/models/routetable_routesets.go | 6 +- pkg/compute/models/scaling_group.go | 2 +- pkg/compute/models/skus.go | 4 +- pkg/compute/models/snapshotpolicydisks.go | 10 +- pkg/compute/models/snapshots.go | 8 +- pkg/compute/models/storagecaches.go | 2 +- pkg/compute/models/storages.go | 24 +++-- pkg/compute/models/vpcresource.go | 53 ++++++----- pkg/compute/models/waf_instances.go | 2 +- pkg/compute/models/wireresource.go | 45 +++++---- pkg/compute/models/wires.go | 19 ++-- pkg/compute/models/zoneresource.go | 8 +- pkg/compute/models/zones.go | 13 ++- pkg/compute/regiondrivers/aliyun.go | 14 +-- pkg/compute/regiondrivers/huawei.go | 6 +- pkg/compute/regiondrivers/kvm.go | 14 +-- pkg/compute/regiondrivers/managedvirtual.go | 18 ++-- pkg/compute/regiondrivers/openstack.go | 4 +- pkg/compute/regiondrivers/qcloud.go | 13 ++- pkg/compute/regiondrivers/zstack.go | 2 +- .../tasks/baremetal_server_reset_task.go | 2 +- .../tasks/baremetal_server_start_task.go | 6 +- .../tasks/baremetal_server_stop_task.go | 6 +- .../baremetal_server_sync_status_task.go | 4 +- pkg/compute/tasks/disk_base_task.go | 2 +- pkg/compute/tasks/disk_create_task.go | 5 +- pkg/compute/tasks/disk_delete_task.go | 2 +- pkg/compute/tasks/disk_reset_task.go | 4 +- pkg/compute/tasks/disk_resize_task.go | 4 +- pkg/compute/tasks/disk_save_task.go | 4 +- pkg/compute/tasks/disk_syncstatus_task.go | 4 +- ...iccache_allocate_public_connection_task.go | 2 +- .../tasks/elasticcache_change_spec_task.go | 2 +- pkg/compute/tasks/elasticcache_create_task.go | 4 +- pkg/compute/tasks/elasticcache_delete_task.go | 2 +- .../tasks/elasticcache_flush_instance.go | 2 +- ...ticcache_release_public_connection_task.go | 2 +- .../tasks/elasticcache_remote_update_task.go | 2 +- pkg/compute/tasks/elasticcache_renew_task.go | 3 +- .../tasks/elasticcache_restart_task.go | 2 +- .../tasks/elasticcache_set_auto_renew_task.go | 3 +- .../elasticcache_set_maintain_time_task.go | 2 +- pkg/compute/tasks/elasticcache_sync_task.go | 2 +- .../tasks/elasticcache_syncsecgroups_task.go | 2 +- .../tasks/elasticcache_syncstatus_task.go | 2 +- .../elasticcache_update_auth_mode_task.go | 2 +- .../elasticcache_update_backup_policy_task.go | 2 +- pkg/compute/tasks/filesystem_create_task.go | 7 +- pkg/compute/tasks/guest_backup_tasks.go | 2 +- pkg/compute/tasks/guest_batch_create_task.go | 2 +- .../tasks/guest_block_io_throttle_task.go | 2 +- pkg/compute/tasks/guest_change_config_task.go | 3 +- .../tasks/guest_convert_esxi_to_kvm_task.go | 6 +- pkg/compute/tasks/guest_create_disk_task.go | 5 +- pkg/compute/tasks/guest_delete_task.go | 4 +- .../tasks/guest_detach_all_disks_task.go | 2 +- pkg/compute/tasks/guest_detach_disk_task.go | 4 +- pkg/compute/tasks/guest_insert_iso_task.go | 2 +- pkg/compute/tasks/guest_live_migrate_task.go | 13 +-- pkg/compute/tasks/guest_start_task.go | 4 +- pkg/compute/tasks/guest_stop_task.go | 2 +- pkg/compute/tasks/guest_sync_task.go | 2 +- pkg/compute/tasks/guest_syncstatus_task.go | 2 +- pkg/compute/tasks/ha_guest_deploy_task.go | 2 +- pkg/compute/tasks/natdentry_create_task.go | 3 +- pkg/compute/tasks/natdentry_delete_task.go | 3 +- .../tasks/natgateway_syncstatus_task.go | 2 +- pkg/compute/tasks/natsentry_create_task.go | 3 +- pkg/compute/tasks/natsentry_delete_task.go | 3 +- pkg/compute/tasks/network_create_task.go | 2 +- .../tasks/route_table_syncstatus_task.go | 2 +- pkg/compute/tasks/snapshotpolicy_disk_task.go | 12 ++- .../cloudregion_schedtag_predicate.go | 2 +- .../algorithm/predicates/network_predicate.go | 11 ++- pkg/scheduler/cache/candidate/base.go | 4 +- 123 files changed, 692 insertions(+), 621 deletions(-) diff --git a/pkg/compute/guestdrivers/baremetals.go b/pkg/compute/guestdrivers/baremetals.go index 5c63aacb7e..1b47c0cb71 100644 --- a/pkg/compute/guestdrivers/baremetals.go +++ b/pkg/compute/guestdrivers/baremetals.go @@ -292,7 +292,7 @@ func (self *SBaremetalGuestDriver) RequestGuestCreateAllDisks(ctx context.Contex task.ScheduleRun(nil) return nil } - storage := diskCat.Root.GetStorage() + storage, _ := diskCat.Root.GetStorage() if storage == nil { return fmt.Errorf("no valid storage") } @@ -308,12 +308,12 @@ func (self *SBaremetalGuestDriver) NeedRequestGuestHotAddIso(ctx context.Context } func (self *SBaremetalGuestDriver) RequestGuestHotAddIso(ctx context.Context, guest *models.SGuest, path string, boot bool, task taskman.ITask) error { - host := guest.GetHost() + host, _ := guest.GetHost() return host.StartInsertIsoTask(ctx, task.GetUserCred(), filepath.Base(path), boot, task.GetTaskId()) } func (self *SBaremetalGuestDriver) RequestGuestHotRemoveIso(ctx context.Context, guest *models.SGuest, task taskman.ITask) error { - host := guest.GetHost() + host, _ := guest.GetHost() return host.StartEjectIsoTask(ctx, task.GetUserCred(), task.GetTaskId()) } @@ -333,7 +333,7 @@ func (self *SBaremetalGuestDriver) RequestStartOnHost(ctx context.Context, guest func (self *SBaremetalGuestDriver) RequestStopGuestForDelete(ctx context.Context, guest *models.SGuest, host *models.SHost, task taskman.ITask) error { if host == nil { - host = guest.GetHost() + host, _ = guest.GetHost() } guestStatus, _ := task.GetParams().GetString("guest_status") overridePendingDelete := jsonutils.QueryBoolean(task.GetParams(), "override_pending_delete", false) @@ -433,7 +433,7 @@ func (self *SBaremetalGuestDriver) GetJsonDescAtHost(ctx context.Context, userCr func (self *SBaremetalGuestDriver) GetGuestVncInfo(ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest, host *models.SHost) (*jsonutils.JSONDict, error) { data := jsonutils.NewDict() data.Add(jsonutils.NewString(host.Id), "host_id") - zone := host.GetZone() + zone, _ := host.GetZone() data.Add(jsonutils.NewString(zone.Name), "zone") return data, nil } @@ -562,7 +562,7 @@ func (self *SBaremetalGuestDriver) OnDeleteGuestFinalCleanup(ctx context.Context if err != nil { return err } - baremetal := guest.GetHost() + baremetal, _ := guest.GetHost() if baremetal != nil { return baremetal.UpdateDiskConfig(userCred, nil) } @@ -574,7 +574,7 @@ func (self *SBaremetalGuestDriver) IsSupportGuestClone() bool { } func (self *SBaremetalGuestDriver) IsSupportCdrom(guest *models.SGuest) (bool, error) { - host := guest.GetHost() + host, _ := guest.GetHost() if host == nil { return false, errors.Wrap(httperrors.ErrNotFound, "no host") } diff --git a/pkg/compute/guestdrivers/esxi.go b/pkg/compute/guestdrivers/esxi.go index 1c4d1735d2..102451013d 100644 --- a/pkg/compute/guestdrivers/esxi.go +++ b/pkg/compute/guestdrivers/esxi.go @@ -384,7 +384,7 @@ func (self *SESXiGuestDriver) RequestDeployGuestOnHost(ctx context.Context, gues if diskCat.Root == nil { return fmt.Errorf("no root disk???") } - storage := diskCat.Root.GetStorage() + storage, _ := diskCat.Root.GetStorage() if storage == nil { return fmt.Errorf("root disk has no storage???") } @@ -438,7 +438,7 @@ func (self *SESXiGuestDriver) RequestDeployGuestOnHost(ctx context.Context, gues func (self *SESXiGuestDriver) RqeuestSuspendOnHost(ctx context.Context, guest *models.SGuest, task taskman.ITask) error { taskman.LocalTaskRun(task, func() (jsonutils.JSONObject, error) { - host := guest.GetHost() + host, _ := guest.GetHost() if host == nil { return nil, errors.Error("fail to get host of guest") } @@ -462,7 +462,7 @@ func (self *SESXiGuestDriver) RqeuestSuspendOnHost(ctx context.Context, guest *m func (self *SESXiGuestDriver) RqeuestResumeOnHost(ctx context.Context, guest *models.SGuest, task taskman.ITask) error { taskman.LocalTaskRun(task, func() (jsonutils.JSONObject, error) { - host := guest.GetHost() + host, _ := guest.GetHost() if host == nil { return nil, errors.Error("fail to get host of guest") } @@ -581,7 +581,7 @@ func (self *SESXiGuestDriver) RequestMigrate(ctx context.Context, guest *models. return nil, errors.Wrap(fmt.Errorf("empty hostExternalId"), "iVM.GetIHostId()") } iHost, err = db.FetchByExternalIdAndManagerId(models.HostManager, hostExternalId, func(q *sqlchemy.SQuery) *sqlchemy.SQuery { - if host := guest.GetHost(); host != nil { + if host, _ := guest.GetHost(); host != nil { return q.Equals("manager_id", host.ManagerId) } return q @@ -626,7 +626,7 @@ func (self *SESXiGuestDriver) RequestLiveMigrate(ctx context.Context, guest *mod return nil, errors.Wrap(fmt.Errorf("empty hostExternalId"), "iVM.GetIHostId()") } iHost, err = db.FetchByExternalIdAndManagerId(models.HostManager, hostExternalId, func(q *sqlchemy.SQuery) *sqlchemy.SQuery { - if host := guest.GetHost(); host != nil { + if host, _ := guest.GetHost(); host != nil { return q.Equals("manager_id", host.ManagerId) } return q diff --git a/pkg/compute/guestdrivers/kvm.go b/pkg/compute/guestdrivers/kvm.go index c59a835192..376aa1b026 100644 --- a/pkg/compute/guestdrivers/kvm.go +++ b/pkg/compute/guestdrivers/kvm.go @@ -115,7 +115,7 @@ func (self *SKVMGuestDriver) DoGuestCreateDisksTask(ctx context.Context, guest * } func (self *SKVMGuestDriver) RequestDiskSnapshot(ctx context.Context, guest *models.SGuest, task taskman.ITask, snapshotId, diskId string) error { - host := guest.GetHost() + host, _ := guest.GetHost() url := fmt.Sprintf("%s/servers/%s/snapshot", host.ManagerUri, guest.Id) body := jsonutils.NewDict() body.Set("disk_id", jsonutils.NewString(diskId)) @@ -126,7 +126,7 @@ func (self *SKVMGuestDriver) RequestDiskSnapshot(ctx context.Context, guest *mod } func (self *SKVMGuestDriver) RequestDeleteSnapshot(ctx context.Context, guest *models.SGuest, task taskman.ITask, params *jsonutils.JSONDict) error { - host := guest.GetHost() + host, _ := guest.GetHost() url := fmt.Sprintf("%s/servers/%s/delete-snapshot", host.ManagerUri, guest.Id) header := self.getTaskRequestHeader(task) _, _, err := httputils.JSONRequest(httputils.GetDefaultClient(), ctx, "POST", url, header, params, false) @@ -134,7 +134,7 @@ func (self *SKVMGuestDriver) RequestDeleteSnapshot(ctx context.Context, guest *m } func (self *SKVMGuestDriver) RequestReloadDiskSnapshot(ctx context.Context, guest *models.SGuest, task taskman.ITask, params *jsonutils.JSONDict) error { - host := guest.GetHost() + host, _ := guest.GetHost() url := fmt.Sprintf("%s/servers/%s/reload-disk-snapshot", host.ManagerUri, guest.Id) header := self.getTaskRequestHeader(task) _, _, err := httputils.JSONRequest(httputils.GetDefaultClient(), ctx, "POST", url, header, params, false) @@ -403,7 +403,7 @@ func (self *SKVMGuestDriver) RequestChangeVmConfig(ctx context.Context, guest *m if vmemSize > int64(guest.VmemSize) { body.Set("add_mem", jsonutils.NewInt(addMem)) } - host := guest.GetHost() + host, _ := guest.GetHost() url := fmt.Sprintf("%s/servers/%s/hotplug-cpu-mem", host.ManagerUri, guest.Id) _, _, err := httputils.JSONRequest(httputils.GetDefaultClient(), ctx, "POST", url, header, body, false) return err @@ -419,7 +419,7 @@ func (self *SKVMGuestDriver) RequestSoftReset(ctx context.Context, guest *models } func (self *SKVMGuestDriver) RequestDetachDisk(ctx context.Context, guest *models.SGuest, disk *models.SDisk, task taskman.ITask) error { - host := guest.GetHost() + host, _ := guest.GetHost() header := task.GetTaskRequestHeader() url := fmt.Sprintf("%s/servers/%s/status", host.ManagerUri, guest.Id) _, res, _ := httputils.JSONRequest(httputils.GetDefaultClient(), ctx, "GET", url, header, nil, false) @@ -449,7 +449,7 @@ func (self *SKVMGuestDriver) RequestSaveImage(ctx context.Context, userCred mccl func (self *SKVMGuestDriver) RequestOpenForward(ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest, req *guestdriver_types.OpenForwardRequest) (*guestdriver_types.OpenForwardResponse, error) { var ( - host = guest.GetHost() + host, _ = guest.GetHost() url = fmt.Sprintf("%s/servers/%s/open-forward", host.ManagerUri, guest.Id) httpClient = httputils.GetDefaultClient() header = mcclient.GetTokenHeaders(userCred) @@ -481,7 +481,7 @@ func (self *SKVMGuestDriver) RequestOpenForward(ctx context.Context, userCred mc func (self *SKVMGuestDriver) RequestCloseForward(ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest, req *guestdriver_types.CloseForwardRequest) (*guestdriver_types.CloseForwardResponse, error) { var ( - host = guest.GetHost() + host, _ = guest.GetHost() url = fmt.Sprintf("%s/servers/%s/close-forward", host.ManagerUri, guest.Id) httpClient = httputils.GetDefaultClient() header = mcclient.GetTokenHeaders(userCred) @@ -511,7 +511,7 @@ func (self *SKVMGuestDriver) RequestCloseForward(ctx context.Context, userCred m func (self *SKVMGuestDriver) RequestListForward(ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest, req *guestdriver_types.ListForwardRequest) (*guestdriver_types.ListForwardResponse, error) { var ( - host = guest.GetHost() + host, _ = guest.GetHost() url = fmt.Sprintf("%s/servers/%s/list-forward", host.ManagerUri, guest.Id) httpClient = httputils.GetDefaultClient() header = mcclient.GetTokenHeaders(userCred) @@ -594,7 +594,7 @@ func (self *SKVMGuestDriver) RequestSyncConfigOnHost(ctx context.Context, guest } func (self *SKVMGuestDriver) RqeuestSuspendOnHost(ctx context.Context, guest *models.SGuest, task taskman.ITask) error { - host := guest.GetHost() + host, _ := guest.GetHost() url := fmt.Sprintf("%s/servers/%s/suspend", host.ManagerUri, guest.Id) header := self.getTaskRequestHeader(task) _, _, err := httputils.JSONRequest(httputils.GetDefaultClient(), ctx, "POST", url, header, nil, false) @@ -629,7 +629,7 @@ func (self *SKVMGuestDriver) RequestRebuildRootDisk(ctx context.Context, guest * } func (self *SKVMGuestDriver) RequestSyncToBackup(ctx context.Context, guest *models.SGuest, task taskman.ITask) error { - host := guest.GetHost() + host, _ := guest.GetHost() desc, err := guest.GetDriver().GetJsonDescAtHost(ctx, task.GetUserCred(), guest, host, nil) if err != nil { return errors.Wrapf(err, "GetJsonDescAtHost") @@ -713,8 +713,9 @@ func (self *SKVMGuestDriver) CheckMigrate(guest *models.SGuest, userCred mcclien if input.IsRescueMode { guestDisks := guest.GetDisks() for _, guestDisk := range guestDisks { + storage, _ := guestDisk.GetDisk().GetStorage() if utils.IsInStringArray( - guestDisk.GetDisk().GetStorage().StorageType, api.STORAGE_LOCAL_TYPES) { + storage.StorageType, api.STORAGE_LOCAL_TYPES) { return httperrors.NewBadRequestError("Rescue mode requires all disk store in shared storages") } } diff --git a/pkg/compute/guestdrivers/managedvirtual.go b/pkg/compute/guestdrivers/managedvirtual.go index c09fff9522..f4aa0027d8 100644 --- a/pkg/compute/guestdrivers/managedvirtual.go +++ b/pkg/compute/guestdrivers/managedvirtual.go @@ -92,7 +92,7 @@ func (self *SManagedVirtualizedGuestDriver) GetJsonDescAtHost(ctx context.Contex for i := 0; i < len(disks); i += 1 { disk := disks[i].GetDisk() - storage := disk.GetStorage() + storage, _ := disk.GetStorage() if i == 0 { config.SysDisk.Name = disk.Name config.SysDisk.StorageExternalId = storage.ExternalId @@ -150,11 +150,11 @@ func (self *SManagedVirtualizedGuestDriver) RequestSaveImage(ctx context.Context if err != nil { return nil, errors.Wrapf(err, "wait image %s(%s) active current is: %s", image.GetName(), image.GetGlobalId(), image.GetStatus()) } - host := guest.GetHost() + host, _ := guest.GetHost() if host == nil { return nil, errors.Wrapf(cloudprovider.ErrNotFound, "find guest %s host", guest.Name) } - region := host.GetRegion() + region, _ := host.GetRegion() iRegion, err := host.GetIRegion() if err != nil { return nil, errors.Wrapf(err, "host.GetIRegion") @@ -188,7 +188,7 @@ func (self *SManagedVirtualizedGuestDriver) RequestGuestCreateAllDisks(ctx conte task.ScheduleRun(nil) return nil } - storage := diskCat.Root.GetStorage() + storage, _ := diskCat.Root.GetStorage() if storage == nil { return fmt.Errorf("no valid storage") } @@ -435,7 +435,7 @@ func (self *SManagedVirtualizedGuestDriver) RequestDeployGuestOnHost(ctx context switch action { case "create": - region := host.GetRegion() + region, _ := host.GetRegion() if len(desc.InstanceType) == 0 && region != nil && utils.IsInStringArray(guest.Hypervisor, api.PUBLIC_CLOUD_HYPERVISORS) { sku, err := models.ServerSkuManager.GetMatchedSku(region.GetId(), int64(desc.Cpu), int64(desc.MemoryMB)) if err != nil { @@ -710,7 +710,7 @@ func (self *SManagedVirtualizedGuestDriver) RequestUndeployGuestOnHost(ctx conte for _, guestdisk := range guest.GetDisks() { disk := guestdisk.GetDisk() - storage := disk.GetStorage() + storage, _ := disk.GetStorage() if disk != nil && disk.AutoDelete && !utils.IsInStringArray(storage.StorageType, api.STORAGE_LOCAL_TYPES) { idisk, err := disk.GetIDisk() if err != nil { @@ -817,7 +817,7 @@ func (self *SManagedVirtualizedGuestDriver) DoGuestCreateDisksTask(ctx context.C } func (self *SManagedVirtualizedGuestDriver) RequestChangeVmConfig(ctx context.Context, guest *models.SGuest, task taskman.ITask, instanceType string, vcpuCount, vmemSize int64) error { - host := guest.GetHost() + host, _ := guest.GetHost() ihost, err := host.GetIHost() if err != nil { return err @@ -829,7 +829,8 @@ func (self *SManagedVirtualizedGuestDriver) RequestChangeVmConfig(ctx context.Co } if len(instanceType) == 0 { - sku, err := models.ServerSkuManager.GetMatchedSku(host.GetRegion().GetId(), vcpuCount, vmemSize) + region, _ := host.GetRegion() + sku, err := models.ServerSkuManager.GetMatchedSku(region.GetId(), vcpuCount, vmemSize) if err != nil { return errors.Wrap(err, "ManagedVirtualizedGuestDriver.RequestChangeVmConfig.GetMatchedSku") } @@ -941,7 +942,7 @@ func (self *SManagedVirtualizedGuestDriver) OnGuestDeployTaskDataReceived(ctx co if len(diskInfo[i].StorageExternalId) > 0 { storage, err := db.FetchByExternalIdAndManagerId(models.StorageManager, diskInfo[i].StorageExternalId, func(q *sqlchemy.SQuery) *sqlchemy.SQuery { - host := guest.GetHost() + host, _ := guest.GetHost() if host != nil { return q.Equals("manager_id", host.ManagerId) } @@ -1020,7 +1021,7 @@ func (self *SManagedVirtualizedGuestDriver) RequestSyncSecgroupsOnHost(ctx conte return errors.Wrap(err, "guest.GetVpc") } - region := host.GetRegion() + region, _ := host.GetRegion() vpcId, err := region.GetDriver().GetSecurityGroupVpcId(ctx, task.GetUserCred(), region, host, vpc, false) if err != nil { @@ -1236,7 +1237,8 @@ func (self *SManagedVirtualizedGuestDriver) RequestRemoteUpdate(ctx context.Cont } tagsUpdateInfo := cloudprovider.TagsUpdateInfo{OldTags: oldTags, NewTags: tags} - err = cloudprovider.SetTags(ctx, iVM, guest.GetHost().ManagerId, tags, replaceTags) + host, _ := guest.GetHost() + err = cloudprovider.SetTags(ctx, iVM, host.ManagerId, tags, replaceTags) if err != nil { if errors.Cause(err) == cloudprovider.ErrNotSupported || errors.Cause(err) == cloudprovider.ErrNotImplemented { return nil diff --git a/pkg/compute/guestdrivers/openstack.go b/pkg/compute/guestdrivers/openstack.go index fdbcd2a512..c2a9cb534d 100644 --- a/pkg/compute/guestdrivers/openstack.go +++ b/pkg/compute/guestdrivers/openstack.go @@ -219,7 +219,7 @@ func (self *SOpenStackGuestDriver) RemoteDeployGuestForRebuildRoot(ctx context.C if err != nil { return "", errors.Wrap(err, "guest.GetSystemDisk(") } - storage := sysDisk.GetStorage() + storage, _ := sysDisk.GetStorage() if storage.StorageType == api.STORAGE_OPENSTACK_NOVA { //不通过镜像创建磁盘的机器 conf := cloudprovider.SManagedVMRebuildRootConfig{ Account: desc.Account, @@ -400,7 +400,7 @@ func (self *SOpenStackGuestDriver) RequestMigrate(ctx context.Context, guest *mo return nil, errors.Wrap(fmt.Errorf("empty hostExternalId"), "iVM.GetIHostId()") } iHost, err := db.FetchByExternalIdAndManagerId(models.HostManager, hostExternalId, func(q *sqlchemy.SQuery) *sqlchemy.SQuery { - if host := guest.GetHost(); host != nil { + if host, _ := guest.GetHost(); host != nil { return q.Equals("manager_id", host.ManagerId) } return q @@ -445,7 +445,7 @@ func (self *SOpenStackGuestDriver) RequestLiveMigrate(ctx context.Context, guest return nil, errors.Wrap(fmt.Errorf("empty hostExternalId"), "iVM.GetIHostId()") } iHost, err := db.FetchByExternalIdAndManagerId(models.HostManager, hostExternalId, func(q *sqlchemy.SQuery) *sqlchemy.SQuery { - if host := guest.GetHost(); host != nil { + if host, _ := guest.GetHost(); host != nil { return q.Equals("manager_id", host.ManagerId) } return q diff --git a/pkg/compute/guestdrivers/qcloud.go b/pkg/compute/guestdrivers/qcloud.go index 1d1db3d0f3..691cd7f993 100644 --- a/pkg/compute/guestdrivers/qcloud.go +++ b/pkg/compute/guestdrivers/qcloud.go @@ -177,7 +177,7 @@ func (self *SQcloudGuestDriver) ValidateChangeConfig(ctx context.Context, userCr if err != nil { return httperrors.NewResourceNotFoundError("failed to found system disk error: %v", err) } - storage := disk.GetStorage() + storage, _ := disk.GetStorage() if storage == nil { return httperrors.NewResourceNotFoundError("failed to found storage for disk %s(%s)", disk.Name, disk.Id) } @@ -218,7 +218,7 @@ func (self *SQcloudGuestDriver) ValidateChangeConfig(ctx context.Context, userCr } func (self *SQcloudGuestDriver) ValidateDetachDisk(ctx context.Context, userCred mcclient.TokenCredential, guest *models.SGuest, disk *models.SDisk) error { - storage := disk.GetStorage() + storage, _ := disk.GetStorage() if storage == nil { return httperrors.NewResourceNotFoundError("failed to found storage for disk %s(%s)", disk.Name, disk.Id) } diff --git a/pkg/compute/guestdrivers/virtualization.go b/pkg/compute/guestdrivers/virtualization.go index 527f765534..6aef096b8b 100644 --- a/pkg/compute/guestdrivers/virtualization.go +++ b/pkg/compute/guestdrivers/virtualization.go @@ -243,7 +243,7 @@ func (self *SVirtualizedGuestDriver) StartGuestSyncstatusTask(guest *models.SGue func (self *SVirtualizedGuestDriver) RequestStopGuestForDelete(ctx context.Context, guest *models.SGuest, host *models.SHost, task taskman.ITask) error { if host == nil { - host = guest.GetHost() + host, _ = guest.GetHost() } if host != nil && host.GetEnabled() && host.HostStatus == api.HOST_ONLINE { return guest.StartGuestStopTask(ctx, task.GetUserCred(), true, false, task.GetTaskId()) diff --git a/pkg/compute/hostdrivers/esxi.go b/pkg/compute/hostdrivers/esxi.go index dfac1b6544..f2fc59c570 100644 --- a/pkg/compute/hostdrivers/esxi.go +++ b/pkg/compute/hostdrivers/esxi.go @@ -70,8 +70,9 @@ func (self *SESXiHostDriver) CheckAndSetCacheImage(ctx context.Context, host *mo // else, use it hostCacheImage := models.StoragecachedimageManager.GetStoragecachedimage(storageCache.GetId(), cacheImage.GetId()) if hostCacheImage == nil { + zone, _ := host.GetZone() srcHostCacheImage, err = cacheImage.ChooseSourceStoragecacheInRange(api.HOST_TYPE_ESXI, []string{host.Id}, - []interface{}{host.GetZone(), host.GetCloudprovider()}) + []interface{}{zone, host.GetCloudprovider()}) if err != nil { return err } @@ -314,7 +315,7 @@ func (self *SESXiHostDriver) RequestSaveUploadImageOnHost(ctx context.Context, h // return fmt.Errorf("cannot find host with id %s", agentId) // } - storage := disk.GetStorage() + storage, _ := disk.GetStorage() type specStruct struct { ImagePath string diff --git a/pkg/compute/hostdrivers/kvm.go b/pkg/compute/hostdrivers/kvm.go index 9089f1985a..8e5698016f 100644 --- a/pkg/compute/hostdrivers/kvm.go +++ b/pkg/compute/hostdrivers/kvm.go @@ -188,7 +188,8 @@ func (self *SKVMHostDriver) CheckAndSetCacheImage(ctx context.Context, host *mod return errors.Wrapf(err, "Fetch cached image by image_id %s", imageId) } cacheImage := obj.(*models.SCachedimage) - rangeObjs := []interface{}{host.GetZone()} + zone, _ := host.GetZone() + rangeObjs := []interface{}{zone} if srcHost != nil { rangeObjs = append(rangeObjs, srcHost) } @@ -357,7 +358,8 @@ func (self *SKVMHostDriver) RequestPrepareSaveDiskOnHost(ctx context.Context, ho func (self *SKVMHostDriver) RequestSaveUploadImageOnHost(ctx context.Context, host *models.SHost, disk *models.SDisk, imageId string, task taskman.ITask, data jsonutils.JSONObject) error { body := jsonutils.NewDict() backup, _ := data.GetString("backup") - content := map[string]string{"image_path": backup, "image_id": imageId, "storagecached_id": disk.GetStorage().StoragecacheId} + storage, _ := disk.GetStorage() + content := map[string]string{"image_path": backup, "image_id": imageId, "storagecached_id": storage.StoragecacheId} if data.Contains("format") { content["format"], _ = data.GetString("format") } diff --git a/pkg/compute/misc/handler.go b/pkg/compute/misc/handler.go index 2e9285af9c..bfa7f71b9a 100644 --- a/pkg/compute/misc/handler.go +++ b/pkg/compute/misc/handler.go @@ -59,7 +59,8 @@ func getBmAgentUrl(ctx context.Context, w http.ResponseWriter, r *http.Request) return } - zoneId := n.GetWire().ZoneId + wire, _ := n.GetWire() + zoneId := wire.ZoneId bmAgent := models.BaremetalagentManager.GetAgent(compute.AgentTypeBaremetal, zoneId) if bmAgent == nil { httperrors.InternalServerError(ctx, w, "Baremetal agent not found") diff --git a/pkg/compute/models/capabilities.go b/pkg/compute/models/capabilities.go index f106d26d9e..87c994c72e 100644 --- a/pkg/compute/models/capabilities.go +++ b/pkg/compute/models/capabilities.go @@ -252,7 +252,7 @@ func getDomainManagerProviderSubq(domainId string) *sqlchemy.SSubQuery { func getDBInstanceInfo(region *SCloudregion, zone *SZone) map[string]map[string]map[string][]string { if zone != nil { - region = zone.GetRegion() + region, _ = zone.GetRegion() } if region == nil { return nil @@ -712,7 +712,7 @@ func getAutoAllocNetworkCount(ownerId mcclient.IIdentityProvider, scope rbacutil func getNetworkCountByFilter(ownerId mcclient.IIdentityProvider, scope rbacutils.TRbacScope, region *SCloudregion, zone *SZone, isAutoAlloc tristate.TriState, serverType string) (int, error) { if zone != nil && region == nil { - region = zone.GetRegion() + region, _ = zone.GetRegion() } networks := NetworkManager.Query().SubQuery() diff --git a/pkg/compute/models/cloudaccounts.go b/pkg/compute/models/cloudaccounts.go index 7a76231d4c..8803961dbe 100644 --- a/pkg/compute/models/cloudaccounts.go +++ b/pkg/compute/models/cloudaccounts.go @@ -2513,7 +2513,7 @@ func (manager *SCloudaccountManager) queryCloudAccountByCapability(region *SClou q = q.IsFalse("enabled") } if zone != nil { - region = zone.GetRegion() + region, _ = zone.GetRegion() } if region != nil { providerregions := CloudproviderRegionManager.Query().SubQuery() diff --git a/pkg/compute/models/cloudproviders.go b/pkg/compute/models/cloudproviders.go index cd00671852..1caac2e292 100644 --- a/pkg/compute/models/cloudproviders.go +++ b/pkg/compute/models/cloudproviders.go @@ -557,7 +557,7 @@ func (sr *SSyncRange) normalizeZoneIds() error { } } zone := obj.(*SZone) - region := zone.GetRegion() + region, _ := zone.GetRegion() if region == nil { continue } @@ -580,11 +580,11 @@ func (sr *SSyncRange) normalizeHostIds() error { } } host := obj.(*SHost) - zone := host.GetZone() + zone, _ := host.GetZone() if zone == nil { continue } - region := zone.GetRegion() + region, _ := zone.GetRegion() if region == nil { continue } diff --git a/pkg/compute/models/cloudsync.go b/pkg/compute/models/cloudsync.go index dc27c4ebea..48863ae61b 100644 --- a/pkg/compute/models/cloudsync.go +++ b/pkg/compute/models/cloudsync.go @@ -698,7 +698,7 @@ func syncStorageCaches(ctx context.Context, userCred mcclient.TokenCredential, p cachePair.local = localCache cachePair.remote = remoteCache cachePair.isNew = isNew - cachePair.region = localStorage.GetRegion() + cachePair.region, _ = localStorage.GetRegion() return } @@ -1756,7 +1756,7 @@ func getZoneForPremiseCloudRegion(ctx context.Context, userCred mcclient.TokenCr log.Errorf(msg) continue } - return wire.GetZone(), nil + return wire.GetZone() } return nil, errors.Wrap(errors.ErrNotFound, "no suitable zone") } diff --git a/pkg/compute/models/dbinstances.go b/pkg/compute/models/dbinstances.go index 4988d144e2..9e065b554e 100644 --- a/pkg/compute/models/dbinstances.go +++ b/pkg/compute/models/dbinstances.go @@ -332,7 +332,7 @@ func (man *SDBInstanceManager) ValidateCreateData(ctx context.Context, userCred return input, httperrors.NewInputParameterError("Ip %s not in network %s(%s) range", input.Address, network.Name, network.Id) } } - vpc = network.GetVpc() + vpc, _ = network.GetVpc() } else if len(input.VpcId) > 0 { _vpc, err := validators.ValidateModel(userCred, VpcManager, &input.VpcId) if err != nil { diff --git a/pkg/compute/models/diskresource.go b/pkg/compute/models/diskresource.go index d97a4d16de..c530dda680 100644 --- a/pkg/compute/models/diskresource.go +++ b/pkg/compute/models/diskresource.go @@ -52,37 +52,36 @@ func ValidateDiskResourceInput(userCred mcclient.TokenCredential, input api.Disk return diskObj.(*SDisk), input, nil } -func (self *SDiskResourceBase) GetDisk() *SDisk { - obj, _ := DiskManager.FetchById(self.DiskId) - if obj != nil { - return obj.(*SDisk) +func (self *SDiskResourceBase) GetDisk() (*SDisk, error) { + obj, err := DiskManager.FetchById(self.DiskId) + if err != nil { + return nil, errors.Wrapf(err, "GetDisk(%s)", self.DiskId) } - return nil + return obj.(*SDisk), nil } -func (self *SDiskResourceBase) GetStorage() *SStorage { - disk := self.GetDisk() - if disk != nil { - return disk.GetStorage() +func (self *SDiskResourceBase) GetStorage() (*SStorage, error) { + disk, err := self.GetDisk() + if err != nil { + return nil, err } - return nil + return disk.GetStorage() } -func (self *SDiskResourceBase) GetZone() *SZone { - storage := self.GetStorage() - if storage != nil { - return storage.GetZone() +func (self *SDiskResourceBase) GetZone() (*SZone, error) { + storage, err := self.GetStorage() + if err != nil { + return nil, err } - return nil + return storage.GetZone() } -func (self *SDiskResourceBase) GetRegion() *SCloudregion { - storage := self.GetStorage() - if storage == nil { - return nil +func (self *SDiskResourceBase) GetRegion() (*SCloudregion, error) { + storage, err := self.GetStorage() + if err != nil { + return nil, errors.Wrapf(err, "GetStorage") } - region := storage.GetRegion() - return region + return storage.GetRegion() } func (manager *SDiskResourceBaseManager) FetchCustomizeColumns( @@ -246,7 +245,7 @@ func (manager *SDiskResourceBaseManager) GetExportKeys() []string { } func (self *SDiskResourceBase) GetChangeOwnerCandidateDomainIds() []string { - disk := self.GetDisk() + disk, _ := self.GetDisk() if disk != nil { return disk.GetChangeOwnerCandidateDomainIds() } diff --git a/pkg/compute/models/disks.go b/pkg/compute/models/disks.go index a9cf0e7adc..67798aa0c8 100644 --- a/pkg/compute/models/disks.go +++ b/pkg/compute/models/disks.go @@ -389,7 +389,7 @@ func (self *SDisk) ValidateUpdateData(ctx context.Context, userCred mcclient.Tok } } - storage := self.GetStorage() + storage, _ := self.GetStorage() if storage == nil { return input, httperrors.NewNotFoundError("failed to find storage for disk %s", self.Name) } @@ -423,7 +423,7 @@ func diskCreateInput2ComputeQuotaKeys(input api.DiskCreateInput, ownerId mcclien if len(input.PreferHost) > 0 { hostObj, _ := HostManager.FetchById(input.PreferHost) host := hostObj.(*SHost) - zone := host.GetZone() + zone, _ := host.GetZone() keys.ZoneId = zone.Id keys.RegionId = zone.CloudregionId } else if len(input.PreferZone) > 0 { @@ -434,7 +434,7 @@ func diskCreateInput2ComputeQuotaKeys(input api.DiskCreateInput, ownerId mcclien } else if len(input.PreferWire) > 0 { wireObj, _ := WireManager.FetchById(input.PreferWire) wire := wireObj.(*SWire) - zone := wire.GetZone() + zone, _ := wire.GetZone() keys.ZoneId = zone.Id keys.RegionId = zone.CloudregionId } else if len(input.PreferRegion) > 0 { @@ -482,10 +482,11 @@ func (manager *SDiskManager) ValidateCreateData(ctx context.Context, userCred mc } input.Storage = storage.Id + zone, _ := storage.getZone() quotaKey = fetchComputeQuotaKeys( rbacutils.ScopeProject, ownerId, - storage.getZone(), + zone, provider, input.Hypervisor, ) @@ -621,10 +622,11 @@ func getDiskResourceRequirements(ctx context.Context, userCred mcclient.TokenCre if len(input.Storage) > 0 { storageObj, _ := StorageManager.FetchById(input.Storage) storage := storageObj.(*SStorage) + zone, _ := storage.getZone() quotaKey = fetchComputeQuotaKeys( rbacutils.ScopeProject, ownerId, - storage.getZone(), + zone, storage.GetCloudprovider(), input.Hypervisor, ) @@ -795,7 +797,7 @@ func (self *SDisk) PerformDiskReset(ctx context.Context, userCred mcclient.Token if !utils.IsInStringArray(self.Status, []string{api.DISK_READY}) { return nil, httperrors.NewInputParameterError("Cannot reset disk in status %s", self.Status) } - storage := self.GetStorage() + storage, _ := self.GetStorage() if storage == nil { return nil, httperrors.NewNotFoundError("failed to find storage for disk %s", self.Name) } @@ -883,7 +885,7 @@ func (disk *SDisk) PerformResize(ctx context.Context, userCred mcclient.TokenCre } func (disk *SDisk) getHypervisor() string { - storage := disk.GetStorage() + storage, _ := disk.GetStorage() if storage != nil { host := storage.GetMasterHost() if host != nil { @@ -895,7 +897,7 @@ func (disk *SDisk) getHypervisor() string { } func (disk *SDisk) GetQuotaKeys() (quotas.IQuotaKeys, error) { - storage := disk.GetStorage() + storage, _ := disk.GetStorage() if storage == nil { return nil, errors.Wrap(httperrors.ErrInvalidStatus, "no valid storage") } @@ -903,7 +905,7 @@ func (disk *SDisk) GetQuotaKeys() (quotas.IQuotaKeys, error) { if provider == nil && len(storage.ManagerId) > 0 { return nil, errors.Wrap(httperrors.ErrInvalidStatus, "no valid manager") } - zone := storage.getZone() + zone, _ := storage.getZone() if zone == nil { return nil, errors.Wrap(httperrors.ErrInvalidStatus, "no valid zone") } @@ -927,7 +929,7 @@ func (disk *SDisk) doResize(ctx context.Context, userCred mcclient.TokenCredenti return nil } addDisk := sizeMb - disk.DiskSize - storage := disk.GetStorage() + storage, _ := disk.GetStorage() if storage == nil { return httperrors.NewInternalServerError("disk has no valid storage") } @@ -963,7 +965,7 @@ func (disk *SDisk) doResize(ctx context.Context, userCred mcclient.TokenCredenti } func (self *SDisk) GetIStorage() (cloudprovider.ICloudStorage, error) { - storage := self.GetStorage() + storage, _ := self.GetStorage() if storage == nil { return nil, httperrors.NewResourceNotFoundError("fail to find storage for disk %s", self.GetName()) } @@ -983,15 +985,16 @@ func (self *SDisk) GetIDisk() (cloudprovider.ICloudDisk, error) { return iStorage.GetIDiskById(self.GetExternalId()) } -func (self *SDisk) GetZone() *SZone { - if storage := self.GetStorage(); storage != nil { - return storage.getZone() +func (self *SDisk) GetZone() (*SZone, error) { + storage, err := self.GetStorage() + if err != nil { + return nil, err } - return nil + return storage.getZone() } func (self *SDisk) PrepareSaveImage(ctx context.Context, userCred mcclient.TokenCredential, input api.ServerSaveImageInput) (string, error) { - zone := self.GetZone() + zone, _ := self.GetZone() if zone == nil { return "", httperrors.NewResourceNotFoundError("No zone for this disk") } @@ -1106,7 +1109,7 @@ func (self *SDisk) ValidatePurgeCondition(ctx context.Context) error { func (self *SDisk) validateDeleteCondition(ctx context.Context, isPurge bool) error { if !isPurge { - storage := self.GetStorage() + storage, _ := self.GetStorage() if storage == nil { // storage is empty, a dirty data, allow delete return nil @@ -1167,7 +1170,7 @@ func (self *SDisk) GetTemplateId() string { } func (self *SDisk) IsLocal() bool { - storage := self.GetStorage() + storage, _ := self.GetStorage() if storage != nil { return storage.IsLocal() } @@ -1175,23 +1178,23 @@ func (self *SDisk) IsLocal() bool { } func (self *SDisk) GetCloudproviderId() string { - storage := self.GetStorage() + storage, _ := self.GetStorage() if storage != nil { return storage.GetCloudproviderId() } return "" } -func (self *SDisk) GetStorage() *SStorage { - store, _ := StorageManager.FetchById(self.StorageId) - if store != nil { - return store.(*SStorage) +func (self *SDisk) GetStorage() (*SStorage, error) { + store, err := StorageManager.FetchById(self.StorageId) + if err != nil { + return nil, errors.Wrapf(err, "GetStorage(%s)", self.StorageId) } - return nil + return store.(*SStorage), nil } func (self *SDisk) GetRegionDriver() (IRegionDriver, error) { - storage := self.GetStorage() + storage, _ := self.GetStorage() if storage == nil { return nil, fmt.Errorf("failed to found storage for disk %s(%s)", self.Name, self.Id) } @@ -1210,7 +1213,7 @@ func (self *SDisk) GetBackupStorage() *SStorage { } func (self *SDisk) GetCloudprovider() *SCloudprovider { - if storage := self.GetStorage(); storage != nil { + if storage, _ := self.GetStorage(); storage != nil { return storage.GetCloudprovider() } return nil @@ -1230,7 +1233,7 @@ func (self *SDisk) GetPathAtHost(host *SHost) string { } func (self *SDisk) GetFetchUrl() string { - storage := self.GetStorage() + storage, _ := self.GetStorage() if storage == nil { return "" } @@ -1391,7 +1394,7 @@ func (self *SDisk) syncDiskStorage(ctx context.Context, userCred mcclient.TokenC } func (self *SDisk) GetIRegion() (cloudprovider.ICloudRegion, error) { - storage := self.GetStorage() + storage, _ := self.GetStorage() if storage == nil { return nil, fmt.Errorf("failed to get storage for disk %s(%s)", self.Name, self.Id) } @@ -1404,11 +1407,9 @@ func (self *SDisk) GetIRegion() (cloudprovider.ICloudRegion, error) { if provider.GetFactory().IsOnPremise() { return provider.GetOnPremiseIRegion() } - region := storage.GetRegion() - if region == nil { - msg := "fail to find region of storage???" - log.Errorf(msg) - return nil, fmt.Errorf(msg) + region, err := storage.GetRegion() + if err != nil { + return nil, err } return provider.GetIRegionById(region.ExternalId) } @@ -1425,7 +1426,7 @@ func (self *SDisk) syncRemoveCloudDisk(ctx context.Context, userCred mcclient.To if err == nil { if storageId := iDisk.GetIStorageId(); len(storageId) > 0 { storage, err := db.FetchByExternalIdAndManagerId(StorageManager, storageId, func(q *sqlchemy.SQuery) *sqlchemy.SQuery { - if s := self.GetStorage(); s != nil { + if s, _ := self.GetStorage(); s != nil { return q.Equals("manager_id", s.ManagerId) } return q @@ -1515,7 +1516,7 @@ func (self *SDisk) syncWithCloudDisk(ctx context.Context, userCred mcclient.Toke if err != nil { return errors.Wrapf(err, "Get snapshot policies of ICloudDisk %s.", extDisk.GetId()) } - storage := self.GetStorage() + storage, _ := self.GetStorage() if storage == nil { return fmt.Errorf("no valid storage") } @@ -1833,7 +1834,7 @@ func (self *SDisk) ToDiskInfo() DiskInfo { Size: int64(self.DiskSize), DiskType: self.DiskType, } - storage := self.GetStorage() + storage, _ := self.GetStorage() if storage == nil { return ret } @@ -1853,7 +1854,7 @@ func (self *SDisk) ToDiskConfig() *api.DiskConfig { SizeMb: self.DiskSize, DiskType: self.DiskType, } - storage := self.GetStorage() + storage, _ := self.GetStorage() if storage == nil { return ret } @@ -1929,7 +1930,7 @@ func (self *SDisk) CustomizeDelete(ctx context.Context, userCred mcclient.TokenC if cnt > 0 { return httperrors.NewForbiddenError("not allow to delete. Virtual disk must not have snapshots") } - } else if storage := self.GetStorage(); storage != nil && storage.StorageType == api.STORAGE_RBD { + } else if storage, _ := self.GetStorage(); storage != nil && storage.StorageType == api.STORAGE_RBD { scnt, err := self.GetSnapshotCount() if err != nil { return err @@ -1993,7 +1994,7 @@ func (self *SDisk) getMoreDetails(ctx context.Context, userCred mcclient.TokenCr policy.Name = sps[i].Name out.Snapshotpolicies = append(out.Snapshotpolicies, policy) } - storage := self.GetStorage() + storage, _ := self.GetStorage() if storage != nil { manualSnapshotCount, _ := self.GetManualSnapshotCount() if utils.IsInStringArray(storage.StorageType, append(api.SHARED_FILE_STORAGE, api.STORAGE_LOCAL)) { @@ -2102,7 +2103,7 @@ func (self *SDisk) SwitchToBackup(userCred mcclient.TokenCredential) error { } func (self *SDisk) ClearHostSchedCache() error { - storage := self.GetStorage() + storage, _ := self.GetStorage() if storage == nil { return fmt.Errorf("no valid storage") } @@ -2122,7 +2123,7 @@ func (self *SDisk) ClearHostSchedCache() error { func (self *SDisk) GetShortDesc(ctx context.Context) *jsonutils.JSONDict { desc := self.SVirtualResourceBase.GetShortDesc(ctx) desc.Add(jsonutils.NewInt(int64(self.DiskSize)), "size") - storage := self.GetStorage() + storage, _ := self.GetStorage() if storage != nil { desc.Add(jsonutils.NewString(storage.StorageType), "storage_type") desc.Add(jsonutils.NewString(storage.MediumType), "medium_type") @@ -2268,7 +2269,7 @@ func (disk *SDisk) validateDiskAutoCreateSnapshot() error { if len(guests) == 0 { return fmt.Errorf("Disks %s not attach guest, can't create snapshot", disk.GetName()) } - storage := disk.GetStorage() + storage, _ := disk.GetStorage() if storage == nil { return fmt.Errorf("no valid storage") } @@ -2428,7 +2429,7 @@ func (self *SDisk) CancelExpireTime(ctx context.Context, userCred mcclient.Token } func (self *SDisk) IsDetachable() bool { - storage := self.GetStorage() + storage, _ := self.GetStorage() if storage == nil { return true } @@ -2453,7 +2454,7 @@ func (self *SDisk) GetDynamicConditionInput() *jsonutils.JSONDict { } func (self *SDisk) IsNeedWaitSnapshotsDeleted() (bool, error) { - storage := self.GetStorage() + storage, _ := self.GetStorage() if storage == nil { return false, fmt.Errorf("no valid storage") } @@ -2578,12 +2579,12 @@ func (self *SDisk) syncSnapshots(ctx context.Context, userCred mcclient.TokenCre } provider := self.GetCloudprovider() syncOwnerId := provider.GetOwnerId() - storage := self.GetStorage() + storage, _ := self.GetStorage() if storage == nil { syncResult.Error(fmt.Errorf("no valid storage")) return } - region := storage.GetRegion() + region, _ := storage.GetRegion() extSnapshots, err := extDisk.GetISnapshots() if err != nil { diff --git a/pkg/compute/models/elastic_search.go b/pkg/compute/models/elastic_search.go index 0c80eff555..2149850598 100644 --- a/pkg/compute/models/elastic_search.go +++ b/pkg/compute/models/elastic_search.go @@ -438,8 +438,9 @@ func (self *SElasticSearch) SyncWithCloudElasticSearch(ctx context.Context, user } else { network := _network.(*SNetwork) self.NetworkId = network.Id - self.VpcId = network.GetVpc().Id - if zone := network.GetZone(); zone != nil { + vpc, _ := network.GetVpc() + self.VpcId = vpc.Id + if zone, _ := network.GetZone(); zone != nil { self.ZoneId = zone.Id } } @@ -518,8 +519,9 @@ func (self *SCloudregion) newFromCloudElasticSearch(ctx context.Context, userCre } else { network := _network.(*SNetwork) es.NetworkId = network.Id - es.VpcId = network.GetVpc().Id - if zone := network.GetZone(); zone != nil { + vpc, _ := network.GetVpc() + es.VpcId = vpc.Id + if zone, _ := network.GetZone(); zone != nil { es.ZoneId = zone.Id } } diff --git a/pkg/compute/models/elasticcache_accounts.go b/pkg/compute/models/elasticcache_accounts.go index 6f476dfc90..3607d981a3 100644 --- a/pkg/compute/models/elasticcache_accounts.go +++ b/pkg/compute/models/elasticcache_accounts.go @@ -158,7 +158,8 @@ func (self *SElasticcacheAccount) GetRegion() *SCloudregion { return nil } - return iec.(*SElasticcache).GetRegion() + region, _ := iec.(*SElasticcache).GetRegion() + return region } func (self *SElasticcacheAccount) GetOwnerId() mcclient.IIdentityProvider { @@ -227,7 +228,7 @@ func (manager *SElasticcacheAccountManager) ValidateCreateData(ctx context.Conte if err != nil { return nil, fmt.Errorf("getting elastic cache instance failed") } - region = ec.(*SElasticcache).GetRegion() + region, _ = ec.(*SElasticcache).GetRegion() } else { return nil, httperrors.NewMissingParameterError("elasticcache_id") } diff --git a/pkg/compute/models/elasticcache_acls.go b/pkg/compute/models/elasticcache_acls.go index 95f95a52b7..225e961614 100644 --- a/pkg/compute/models/elasticcache_acls.go +++ b/pkg/compute/models/elasticcache_acls.go @@ -207,7 +207,7 @@ func (manager *SElasticcacheAclManager) ValidateCreateData(ctx context.Context, if err != nil { return nil, fmt.Errorf("getting elastic cache instance failed") } - region = ec.(*SElasticcache).GetRegion() + region, _ = ec.(*SElasticcache).GetRegion() if region == nil { return nil, fmt.Errorf("getting elastic cache region failed") @@ -258,7 +258,8 @@ func (self *SElasticcacheAcl) GetRegion() *SCloudregion { return nil } - return ieb.(*SElasticcache).GetRegion() + region, _ := ieb.(*SElasticcache).GetRegion() + return region } func (self *SElasticcacheAcl) AllowUpdateItem(ctx context.Context, userCred mcclient.TokenCredential) bool { diff --git a/pkg/compute/models/elasticcache_backups.go b/pkg/compute/models/elasticcache_backups.go index f87533be92..5aae8289e7 100644 --- a/pkg/compute/models/elasticcache_backups.go +++ b/pkg/compute/models/elasticcache_backups.go @@ -242,7 +242,7 @@ func (manager *SElasticcacheBackupManager) ValidateCreateData(ctx context.Contex return nil, httperrors.NewMissingParameterError("elasticcache") } - region = ec.GetRegion() + region, _ = ec.GetRegion() driver := region.GetDriver() if err := driver.AllowCreateElasticcacheBackup(ctx, userCred, ownerId, ec); err != nil { return nil, err @@ -328,7 +328,8 @@ func (self *SElasticcacheBackup) GetRegion() *SCloudregion { return nil } - return ieb.(*SElasticcache).GetRegion() + region, _ := ieb.(*SElasticcache).GetRegion() + return region } func (self *SElasticcacheBackup) ValidateDeleteCondition(ctx context.Context) error { diff --git a/pkg/compute/models/elasticcache_instances.go b/pkg/compute/models/elasticcache_instances.go index a53f0ca44f..87a91c80e8 100644 --- a/pkg/compute/models/elasticcache_instances.go +++ b/pkg/compute/models/elasticcache_instances.go @@ -192,9 +192,9 @@ func elasticcacheSubResourceFetchOwner(q *sqlchemy.SQuery, userCred mcclient.IId } func (self *SElasticcache) getCloudProviderInfo() SCloudProviderInfo { - region := self.GetRegion() + region, _ := self.GetRegion() provider := self.GetCloudprovider() - zone := self.GetZone() + zone, _ := self.GetZone() return MakeCloudProviderInfo(region, zone, provider) } @@ -781,8 +781,8 @@ func (manager *SElasticcacheManager) validateCreateData(ctx context.Context, use if err != nil { return nil, fmt.Errorf("getting network failed") } - region = network.(*SNetwork).GetRegion() - vpc := network.(*SNetwork).GetVpc() + region, _ = network.(*SNetwork).GetRegion() + vpc, _ := network.(*SNetwork).GetVpc() provider = vpc.GetCloudprovider() } @@ -925,7 +925,7 @@ func (self *SElasticcache) GetCreateAliyunElasticcacheParams(data *jsonutils.JSO input.EngineVersion = self.EngineVersion input.PrivateIpAddress = self.PrivateIpAddr - zone := self.GetZone() + zone, _ := self.GetZone() if zone != nil { izone, err := iregion.GetIZoneById(zone.ExternalId) if err != nil { @@ -1017,7 +1017,7 @@ func (self *SElasticcache) GetCreateHuaweiElasticcacheParams(data *jsonutils.JSO input.EngineVersion = self.EngineVersion input.PrivateIpAddress = self.PrivateIpAddr - zone := self.GetZone() + zone, _ := self.GetZone() if zone != nil { izone, err := iregion.GetIZoneById(zone.ExternalId) if err != nil { @@ -1070,7 +1070,8 @@ func (self *SElasticcache) GetCreateHuaweiElasticcacheParams(data *jsonutils.JSO // fill security group here if len(self.SecurityGroupId) > 0 { - sgCache, err := SecurityGroupCacheManager.GetSecgroupCache(context.Background(), nil, self.SecurityGroupId, self.VpcId, self.GetRegion().Id, self.GetCloudprovider().Id, "") + region, _ := self.GetRegion() + sgCache, err := SecurityGroupCacheManager.GetSecgroupCache(context.Background(), nil, self.SecurityGroupId, self.VpcId, region.Id, self.GetCloudprovider().Id, "") if err != nil { return nil, errors.Wrap(err, "elasticcache.GetCreateHuaweiElasticcacheParams.SecurityGroup") } @@ -1105,7 +1106,7 @@ func (self *SElasticcache) GetCreateQCloudElasticcacheParams(data *jsonutils.JSO input.Password = password } - zone := self.GetZone() + zone, _ := self.GetZone() if zone != nil { zones := []SZone{*zone} // slave zones @@ -1237,7 +1238,7 @@ func (self *SElasticcache) ValidatorChangeSpecData(ctx context.Context, userCred return nil, httperrors.NewInputParameterError("provider mismatch: %s instance can't use %s sku", self.GetProviderName(), sku.Provider) } - region := self.GetRegion() + region, _ := self.GetRegion() if sku.CloudregionId != region.Id { return nil, httperrors.NewInputParameterError("region mismatch: instance region %s, sku region %s", region.Id, sku.CloudregionId) } @@ -1286,7 +1287,7 @@ func (self *SElasticcache) AllowPerformUpdateAuthMode(ctx context.Context, userC } func (self *SElasticcache) ValidatorUpdateAuthModeData(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) (jsonutils.JSONObject, error) { - region := self.GetRegion() + region, _ := self.GetRegion() if region == nil { return nil, fmt.Errorf("fail to found region for elastic cache") } @@ -1734,10 +1735,11 @@ func (man *SElasticcacheManager) TotalCount( } func (cache *SElasticcache) GetQuotaKeys() quotas.IQuotaKeys { + region, _ := cache.GetRegion() return fetchRegionalQuotaKeys( rbacutils.ScopeProject, cache.GetOwnerId(), - cache.GetRegion(), + region, cache.GetCloudprovider(), ) } @@ -1970,7 +1972,7 @@ func (self *SElasticcache) OnMetadataUpdated(ctx context.Context, userCred mccli } func (self *SElasticcache) getSecgroupsBySecgroupExternalIds(externalIds []string) ([]SSecurityGroup, error) { - vpc := self.GetVpc() + vpc, _ := self.GetVpc() if vpc == nil { return nil, errors.Wrap(errors.ErrNotFound, "GetVpc") } @@ -1993,7 +1995,7 @@ func (self *SElasticcache) validateSecgroupInput(secgroups []string) error { return httperrors.NewInputParameterError("Cannot add security groups in status %s", self.Status) } - region := self.GetRegion() + region, _ := self.GetRegion() if region == nil { return httperrors.NewNotFoundError("region") } @@ -2299,7 +2301,7 @@ func (self *SElasticcache) PerformSetAutoRenew(ctx context.Context, userCred mcc return nil, nil } - region := self.GetRegion() + region, _ := self.GetRegion() if region == nil { return nil, httperrors.NewResourceNotFoundError("elastic cache no related region found") } @@ -2349,7 +2351,7 @@ func (self *SElasticcache) PerformRenew(ctx context.Context, userCred mcclient.T return nil, httperrors.NewInputParameterError("invalid duration %s: %s", durationStr, err) } - region := self.GetRegion() + region, _ := self.GetRegion() if region == nil { return nil, httperrors.NewResourceNotFoundError("elastic cache no related region found") } diff --git a/pkg/compute/models/elasticcache_parameters.go b/pkg/compute/models/elasticcache_parameters.go index 70be2cb545..f2810a63aa 100644 --- a/pkg/compute/models/elasticcache_parameters.go +++ b/pkg/compute/models/elasticcache_parameters.go @@ -205,7 +205,8 @@ func (self *SElasticcacheParameter) GetRegion() *SCloudregion { return nil } - return ieb.(*SElasticcache).GetRegion() + region, _ := ieb.(*SElasticcache).GetRegion() + return region } func (self *SElasticcacheParameter) ValidateUpdateData(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data *jsonutils.JSONDict) (*jsonutils.JSONDict, error) { diff --git a/pkg/compute/models/elasticcacheresource.go b/pkg/compute/models/elasticcacheresource.go index 132fc9ee25..cac9b6300f 100644 --- a/pkg/compute/models/elasticcacheresource.go +++ b/pkg/compute/models/elasticcacheresource.go @@ -69,7 +69,8 @@ func (self *SElasticcacheResourceBase) GetVpc() *SVpc { log.Errorf("GetElasticcache fail %s", err) return nil } - return cache.GetVpc() + vpc, _ := cache.GetVpc() + return vpc } func (self *SElasticcacheResourceBase) GetIRegion() (cloudprovider.ICloudRegion, error) { diff --git a/pkg/compute/models/elasticips.go b/pkg/compute/models/elasticips.go index d07221d5f4..410bdd0f4d 100644 --- a/pkg/compute/models/elasticips.go +++ b/pkg/compute/models/elasticips.go @@ -153,7 +153,7 @@ func (manager *SElasticipManager) ListItemFilter( } guest := serverObj.(*SGuest) if guest.Hypervisor == api.HYPERVISOR_KVM || utils.IsInStringArray(guest.Hypervisor, api.PRIVATE_CLOUD_HYPERVISORS) { - zone := guest.getZone() + zone, _ := guest.getZone() networks := NetworkManager.Query().SubQuery() wires := WireManager.Query().SubQuery() @@ -163,10 +163,11 @@ func (manager *SElasticipManager) ListItemFilter( gns := GuestnetworkManager.Query("network_id").Equals("guest_id", guest.Id).SubQuery() q = q.Filter(sqlchemy.NotIn(q.Field("network_id"), gns)) } else { - region := guest.getRegion() + region, _ := guest.getRegion() q = q.Equals("cloudregion_id", region.Id) } - managerId := guest.GetHost().ManagerId + host, _ := guest.GetHost() + managerId := host.ManagerId if managerId != "" { q = q.Equals("manager_id", managerId) } else { @@ -286,13 +287,10 @@ func (self *SElasticip) GetNetwork() (*SNetwork, error) { return network.(*SNetwork), nil } -func (self *SElasticip) GetZone() *SZone { - if len(self.NetworkId) == 0 { - return nil - } +func (self *SElasticip) GetZone() (*SZone, error) { network, err := self.GetNetwork() if err != nil { - return nil + return nil, err } return network.GetZone() } @@ -1029,7 +1027,7 @@ func (self *SElasticip) PerformAssociate(ctx context.Context, userCred mcclient. } } } - serverRegion := server.getRegion() + serverRegion, _ := server.getRegion() if serverRegion == nil { return input, httperrors.NewInputParameterError("server region is not found???") } @@ -1042,15 +1040,15 @@ func (self *SElasticip) PerformAssociate(ctx context.Context, userCred mcclient. if serverRegion.Id != eipRegion.Id { return input, httperrors.NewInputParameterError("eip and server are not in the same region") } - eipZone := self.GetZone() + eipZone, _ := self.GetZone() if eipZone != nil { - serverZone := server.getZone() + serverZone, _ := server.getZone() if serverZone.Id != eipZone.Id { return input, httperrors.NewInputParameterError("eip and server are not in the same zone") } } - srvHost := server.GetHost() + srvHost, _ := server.GetHost() if srvHost == nil { return input, httperrors.NewInputParameterError("server host is not found???") } @@ -1238,9 +1236,9 @@ func (manager *SElasticipManager) NewEipForVMOnHost(ctx context.Context, userCre ) if host != nil { - region = host.GetRegion() + region, _ = host.GetRegion() } else if nat != nil { - region = nat.GetRegion() + region, _ = nat.GetRegion() } else { return nil, fmt.Errorf("invalid host or nat") } diff --git a/pkg/compute/models/filesystem.go b/pkg/compute/models/filesystem.go index 49f1ff8144..8bea01413d 100644 --- a/pkg/compute/models/filesystem.go +++ b/pkg/compute/models/filesystem.go @@ -137,8 +137,9 @@ func (man *SFileSystemManager) ValidateCreateData(ctx context.Context, userCred return input, err } network := net.(*SNetwork) - input.ManagerId = network.GetVpc().ManagerId - if zone := network.GetZone(); zone != nil { + vpc, _ := network.GetVpc() + input.ManagerId = vpc.ManagerId + if zone, _ := network.GetZone(); zone != nil { input.ZoneId = zone.Id input.CloudregionId = zone.CloudregionId } @@ -151,7 +152,7 @@ func (man *SFileSystemManager) ValidateCreateData(ctx context.Context, userCred return input, err } zone := _zone.(*SZone) - region := zone.GetRegion() + region, _ := zone.GetRegion() input.CloudregionId = region.Id if len(input.ManagerId) == 0 { diff --git a/pkg/compute/models/filters.go b/pkg/compute/models/filters.go index 46aed7702e..b8946ec834 100644 --- a/pkg/compute/models/filters.go +++ b/pkg/compute/models/filters.go @@ -65,7 +65,7 @@ func rangeObjFilter(q *sqlchemy.SQuery, rangeObj db.IStandaloneModel, regionFiel } else if zoneField != nil { q = q.Filter(sqlchemy.Equals(zoneField, wire.ZoneId)) } else if regionField != nil { - vpc := wire.GetVpc() + vpc, _ := wire.GetVpc() q = q.Filter(sqlchemy.Equals(regionField, vpc.CloudregionId)) } case "host": @@ -79,7 +79,7 @@ func rangeObjFilter(q *sqlchemy.SQuery, rangeObj db.IStandaloneModel, regionFiel } else if zoneField != nil { q = q.Filter(sqlchemy.Equals(zoneField, host.ZoneId)) } else if regionField != nil { - zone := host.GetZone() + zone, _ := host.GetZone() q = q.Filter(sqlchemy.Equals(regionField, zone.CloudregionId)) } case "storage": @@ -93,7 +93,7 @@ func rangeObjFilter(q *sqlchemy.SQuery, rangeObj db.IStandaloneModel, regionFiel } else if zoneField != nil { q = q.Filter(sqlchemy.Equals(zoneField, storage.ZoneId)) } else if regionField != nil { - zone := storage.GetZone() + zone, _ := storage.GetZone() q = q.Filter(sqlchemy.Equals(regionField, zone.CloudregionId)) } case "cloudprovider": diff --git a/pkg/compute/models/guest_actions.go b/pkg/compute/models/guest_actions.go index 0b56ce15ca..648ce06945 100644 --- a/pkg/compute/models/guest_actions.go +++ b/pkg/compute/models/guest_actions.go @@ -73,7 +73,7 @@ func (self *SGuest) AllowGetDetailsVnc(ctx context.Context, userCred mcclient.To func (self *SGuest) GetDetailsVnc(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) (jsonutils.JSONObject, error) { if utils.IsInStringArray(self.Status, []string{api.VM_RUNNING, api.VM_BLOCK_STREAM}) { - host := self.GetHost() + host, _ := self.GetHost() if host == nil { return nil, httperrors.NewInternalServerError("Host missing") } @@ -96,7 +96,7 @@ func (self *SGuest) PreCheckPerformAction( return err } if self.Hypervisor == api.HYPERVISOR_KVM { - host := self.GetHost() + host, _ := self.GetHost() if host != nil && (host.HostStatus == api.HOST_OFFLINE || !host.Enabled.Bool()) && utils.IsInStringArray(action, []string{ @@ -171,7 +171,7 @@ func (self *SGuest) AllowGetDetailsDesc(ctx context.Context, userCred mcclient.T } func (self *SGuest) GetDetailsDesc(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) (jsonutils.JSONObject, error) { - host := self.GetHost() + host, _ := self.GetHost() if host == nil { return nil, httperrors.NewInvalidStatusError("No host for server") } @@ -201,7 +201,7 @@ func (self *SGuest) PerformSaveImage(ctx context.Context, userCred mcclient.Toke input.OsArch = self.OsArch if apis.IsARM(self.OsArch) { if osArch := self.GetMetadata("os_arch", nil); len(osArch) == 0 { - host := self.GetHost() + host, _ := self.GetHost() input.OsArch = host.CpuArchitecture } } @@ -278,7 +278,7 @@ func (self *SGuest) PerformSaveGuestImage(ctx context.Context, userCred mcclient if apis.IsARM(self.OsArch) { var osArch string if osArch = self.GetMetadata("os_arch", nil); len(osArch) == 0 { - host := self.GetHost() + host, _ := self.GetHost() osArch = host.CpuArchitecture } properties.Add(jsonutils.NewString(osArch), "os_arch") @@ -458,7 +458,7 @@ func (self *SGuest) GetSchedMigrateParams( if input.LiveMigrate { schedDesc.LiveMigrate = input.LiveMigrate if self.GetMetadata("__cpu_mode", userCred) != api.CPU_MODE_QEMU { - host := self.GetHost() + host, _ := self.GetHost() schedDesc.CpuDesc = host.CpuDesc schedDesc.CpuMicrocode = host.CpuMicrocode schedDesc.CpuMode = api.CPU_MODE_HOST @@ -748,9 +748,9 @@ func (self *SGuest) AllowPerformAttachdisk(ctx context.Context, userCred mcclien } func (self *SGuest) ValidateAttachDisk(ctx context.Context, disk *SDisk) error { - storage := disk.GetStorage() + storage, _ := disk.GetStorage() + host, _ := self.GetHost() if provider := storage.GetCloudprovider(); provider != nil { - host := self.GetHost() if provider.Id != host.ManagerId { return httperrors.NewInputParameterError("Disk %s and guest not belong to the same account", disk.Name) } @@ -769,7 +769,7 @@ func (self *SGuest) ValidateAttachDisk(ctx context.Context, disk *SDisk) error { } } - if len(disk.GetPathAtHost(self.GetHost())) == 0 { + if len(disk.GetPathAtHost(host)) == 0 { return httperrors.NewInputParameterError("Disk %s not belong the guest's host", disk.Name) } if disk.Status != api.DISK_READY { @@ -895,7 +895,7 @@ func (self *SGuest) PerformStart(ctx context.Context, userCred mcclient.TokenCre data jsonutils.JSONObject) (jsonutils.JSONObject, error) { if utils.IsInStringArray(self.Status, []string{api.VM_READY, api.VM_START_FAILED, api.VM_SAVE_DISK_FAILED, api.VM_SUSPEND}) { if !self.guestDisksStorageTypeIsShared() { - host := self.GetHost() + host, _ := self.GetHost() guestsMem, err := host.GetNotReadyGuestsMemorySize() if err != nil { return nil, err @@ -1000,7 +1000,7 @@ func (self *SGuest) NotifyServerEvent( kwargs.Add(jsonutils.NewString(self.Name), "name") kwargs.Add(jsonutils.NewString(self.Hypervisor), "hypervisor") - host := self.GetHost() + host, _ := self.GetHost() if host != nil { brand := host.GetBrand() if brand == api.CLOUD_PROVIDER_ONECLOUD { @@ -1520,7 +1520,7 @@ func (self *SGuest) PerformPurge(ctx context.Context, userCred mcclient.TokenCre if err != nil { return nil, err } - host := self.GetHost() + host, _ := self.GetHost() if host != nil && host.GetEnabled() { return nil, httperrors.NewInvalidStatusError("Cannot purge server on enabled host") } @@ -1761,7 +1761,7 @@ func (self *SGuest) PerformCreatedisk(ctx context.Context, userCred mcclient.Tok } diskSize += diskInfo.SizeMb } - host := self.GetHost() + host, _ := self.GetHost() if host == nil { logclient.AddActionLogWithContext(ctx, self, logclient.ACT_CREATE, "No valid host", userCred, false) return nil, httperrors.NewBadRequestError("No valid host") @@ -1915,7 +1915,7 @@ func (self *SGuest) PerformDetachIsolatedDevice(ctx context.Context, userCred mc } } else { devs := self.GetIsolatedDevices() - host := self.GetHost() + host, _ := self.GetHost() lockman.LockObject(ctx, host) defer lockman.ReleaseObject(ctx, host) for i := 0; i < len(devs); i++ { @@ -1940,7 +1940,7 @@ func (self *SGuest) startDetachIsolateDevice(ctx context.Context, userCred mccli return httperrors.NewBadRequestError(msgFmt, device) } dev := iDev.(*SIsolatedDevice) - host := self.GetHost() + host, _ := self.GetHost() lockman.LockObject(ctx, host) defer lockman.ReleaseObject(ctx, host) err = self.detachIsolateDevice(ctx, userCred, dev) @@ -2005,7 +2005,7 @@ func (self *SGuest) PerformAttachIsolatedDevice(ctx context.Context, userCred mc } func (self *SGuest) startAttachIsolatedDevices(ctx context.Context, userCred mcclient.TokenCredential, gpuModel string, count int) error { - host := self.GetHost() + host, _ := self.GetHost() lockman.LockObject(ctx, host) defer lockman.ReleaseObject(ctx, host) devs, err := IsolatedDeviceManager.GetDevsOnHost(host.Id, gpuModel, count) @@ -2034,7 +2034,7 @@ func (self *SGuest) startAttachIsolatedDevice(ctx context.Context, userCred mccl return httperrors.NewBadRequestError(msgFmt, device) } dev := iDev.(*SIsolatedDevice) - host := self.GetHost() + host, _ := self.GetHost() lockman.LockObject(ctx, host) defer lockman.ReleaseObject(ctx, host) err = self.attachIsolatedDevice(ctx, userCred, dev) @@ -2161,7 +2161,8 @@ func (self *SGuest) getReuseAddr(gn *SGuestnetwork) string { if self.GetHypervisor() != api.HYPERVISOR_BAREMETAL { return "" } - hostNics := self.GetHost().GetNics() + host, _ := self.GetHost() + hostNics := host.GetNics() for _, hn := range hostNics { if hn.GetMac().String() == gn.MacAddr { return hn.IpAddr @@ -2211,7 +2212,7 @@ func (self *SGuest) PerformChangeIpaddr(ctx context.Context, userCred mcclient.T if err != nil { return nil, err } - host := self.GetHost() + host, _ := self.GetHost() ngn, err := func() ([]SGuestnetwork, error) { lockman.LockRawObject(ctx, GuestnetworkManager.KeywordPlural(), "") @@ -2384,7 +2385,7 @@ func (self *SGuest) PerformAttachnetwork(ctx context.Context, userCred mcclient. if err != nil { return nil, httperrors.NewOutOfQuotaError("%v", err) } - host := self.GetHost() + host, _ := self.GetHost() defer host.ClearSchedDescCache() for i := 0; i < count; i++ { _, err = self.attach2NetworkDesc(ctx, userCred, host, input.Nets[i], pendingUsage, nil) @@ -2517,7 +2518,7 @@ func (self *SGuest) PerformChangeConfig(ctx context.Context, userCred mcclient.T return nil, httperrors.NewInvalidStatusError("Cannot change config in %s", self.Status) } - host := self.GetHost() + host, _ := self.GetHost() if host == nil { return nil, httperrors.NewInvalidStatusError("No valid host") } @@ -2638,7 +2639,7 @@ func (self *SGuest) PerformChangeConfig(ctx context.Context, userCred mcclient.T arr := jsonutils.NewArray(jsonutils.NewString(disks[diskIdx].DiskId), jsonutils.NewInt(int64(diskConf.SizeMb))) resizeDisks.Add(arr) addDisk += diskConf.SizeMb - oldSize - storage := disks[diskIdx].GetDisk().GetStorage() + storage, _ := disks[diskIdx].GetDisk().GetStorage() schedInputDisks = append(schedInputDisks, &api.DiskConfig{ SizeMb: addDisk, Index: diskConf.Index, @@ -3015,7 +3016,7 @@ func (self *SGuest) IsLegalKey(key string) bool { } func (self *SGuest) SendMonitorCommand(ctx context.Context, userCred mcclient.TokenCredential, cmd string) (jsonutils.JSONObject, error) { - host := self.GetHost() + host, _ := self.GetHost() url := fmt.Sprintf("%s/servers/%s/monitor", host.ManagerUri, self.Id) header := http.Header{} header.Add("X-Auth-Token", userCred.GetTokenString()) @@ -3066,7 +3067,7 @@ func (self *SGuest) PerformAssociateEip(ctx context.Context, userCred mcclient.T if err != nil { return nil, httperrors.NewGeneralError(errors.Wrapf(err, "eip.GetRegion")) } - instRegion := self.getRegion() + instRegion, _ := self.getRegion() if eip.Mode == api.EIP_MODE_INSTANCE_PUBLICIP { return nil, httperrors.NewUnsupportOperationError("fixed eip cannot be associated") @@ -3093,15 +3094,15 @@ func (self *SGuest) PerformAssociateEip(ctx context.Context, userCred mcclient.T } } - eipZone := eip.GetZone() + eipZone, _ := eip.GetZone() if eipZone != nil { - insZone := self.getZone() + insZone, _ := self.getZone() if eipZone.Id != insZone.Id { return nil, httperrors.NewInputParameterError("cannot associate eip and instance in different zone") } } - host := self.GetHost() + host, _ := self.GetHost() if host == nil { return nil, httperrors.NewInputParameterError("server host is not found???") } @@ -3159,8 +3160,8 @@ func (self *SGuest) AllowPerformCreateEip(ctx context.Context, userCred mcclient func (self *SGuest) PerformCreateEip(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) (jsonutils.JSONObject, error) { var ( - host = self.GetHost() - region = host.GetRegion() + host, _ = self.GetHost() + region, _ = host.GetRegion() regionDriver = region.GetDriver() bw int64 @@ -3565,7 +3566,8 @@ func (self *SGuest) AllowPerformCreateBackup(ctx context.Context, userCred mccli func (self *SGuest) guestDisksStorageTypeIsLocal() bool { for _, gd := range self.GetDisks() { - if gd.GetDisk().GetStorage().StorageType != api.STORAGE_LOCAL { + storage, _ := gd.GetDisk().GetStorage() + if storage.StorageType != api.STORAGE_LOCAL { return false } } @@ -3574,7 +3576,8 @@ func (self *SGuest) guestDisksStorageTypeIsLocal() bool { func (self *SGuest) guestDisksStorageTypeIsShared() bool { for _, gd := range self.GetDisks() { - if gd.GetDisk().GetStorage().StorageType == api.STORAGE_LOCAL { + storage, _ := gd.GetDisk().GetStorage() + if storage.StorageType == api.STORAGE_LOCAL { return false } } @@ -3842,7 +3845,7 @@ func (self *SGuest) GetStorages() []*SStorage { disks := self.GetDisks() storageMap := make(map[string]*SStorage) for i := range disks { - storage := disks[i].GetStorage() + storage, _ := disks[i].GetStorage() if _, ok := storageMap[storage.GetId()]; !ok { storageMap[storage.GetId()] = storage } @@ -4090,7 +4093,8 @@ func (self *SGuest) importNics(ctx context.Context, userCred mcclient.TokenCrede if err != nil { return httperrors.NewNotFoundError("Not found network by ip %s", nic.Ip) } - _, err = self.attach2NetworkDesc(ctx, userCred, self.GetHost(), ToNetConfig(&nic, net), nil, nil) + host, _ := self.GetHost() + _, err = self.attach2NetworkDesc(ctx, userCred, host, ToNetConfig(&nic, net), nil, nil) if err != nil { return err } @@ -4121,8 +4125,9 @@ func (self *SGuest) importDisks(ctx context.Context, userCred mcclient.TokenCred if len(disks) == 0 { return httperrors.NewInputParameterError("Empty import disks") } + host, _ := self.GetHost() for _, disk := range disks { - disk, err := self.createDiskOnHost(ctx, userCred, self.GetHost(), ToDiskConfig(&disk), nil, true, true, nil, nil, true) + disk, err := self.createDiskOnHost(ctx, userCred, host, ToDiskConfig(&disk), nil, true, true, nil, nil, true) if err != nil { return err } @@ -4203,8 +4208,9 @@ func (self *SGuest) GetDetailsVirtInstall( vdiListenPort int64 ) + host, _ := self.GetHost() if utils.IsInStringArray(self.Status, []string{api.VM_RUNNING, api.VM_BLOCK_STREAM}) { - vncInfo, err := self.GetDriver().GetGuestVncInfo(ctx, userCred, self, self.GetHost()) + vncInfo, err := self.GetDriver().GetGuestVncInfo(ctx, userCred, self, host) if err != nil { log.Errorln(err) return nil, err @@ -4241,7 +4247,7 @@ func (self *SGuest) GenerateVirtInstallCommandLine( cmd += L(fmt.Sprintf("--ram %d", self.VmemSize)) cmd += L(fmt.Sprintf("--vcpus %d", self.VcpuCount)) - host := self.GetHost() + host, _ := self.GetHost() // disks guestDisks := self.GetDisks() @@ -4424,7 +4430,7 @@ func (self *SGuest) PerformSyncFixNics(ctx context.Context, if err != nil { return nil, httperrors.NewGeneralError(err) } - host := self.GetHost() + host, _ := self.GetHost() if host == nil { return nil, httperrors.NewInternalServerError("host not found???") } @@ -4787,11 +4793,12 @@ func (self *SGuest) validateCreateInstanceSnapshot( // construct Quota pendingUsage := &SRegionQuota{InstanceSnapshot: 1} - provider := self.GetHost().GetProviderName() + host, _ := self.GetHost() + provider := host.GetProviderName() if utils.IsInStringArray(provider, ProviderHasSubSnapshot) { disks := self.GetDisks() for i := 0; i < len(disks); i++ { - if storage := disks[i].GetDisk().GetStorage(); utils.IsInStringArray(storage.StorageType, api.FIEL_STORAGE) { + if storage, _ := disks[i].GetDisk().GetStorage(); utils.IsInStringArray(storage.StorageType, api.FIEL_STORAGE) { count, err := SnapshotManager.GetDiskManualSnapshotCount(disks[i].DiskId) if err != nil { return nil, httperrors.NewInternalServerError("%v", err) @@ -5044,7 +5051,7 @@ func (self *SGuest) GetDetailsJnlp(ctx context.Context, userCred mcclient.TokenC if self.Hypervisor != api.HYPERVISOR_BAREMETAL { return nil, httperrors.NewInvalidStatusError("not a baremetal server") } - host := self.GetHost() + host, _ := self.GetHost() if host == nil { return nil, httperrors.NewInvalidStatusError("no valid host") } diff --git a/pkg/compute/models/guest_migrate_network.go b/pkg/compute/models/guest_migrate_network.go index 1ba352a2a9..eb6220492c 100644 --- a/pkg/compute/models/guest_migrate_network.go +++ b/pkg/compute/models/guest_migrate_network.go @@ -90,13 +90,13 @@ func (guest *SGuest) PerformMigrateNetwork(ctx context.Context, userCred mcclien } destNet := destModel.(*SNetwork) - host := guest.GetHost() + host, _ := guest.GetHost() if host == nil { return nil, errors.Wrap(httperrors.ErrInvalidStatus, "guest is not allocated!") } if destNet.isOneCloudVpcNetwork() { // vpc network should be in the same Zone - destZone := destNet.GetZone() + destZone, _ := destNet.GetZone() if destZone == nil || destZone.Id != host.ZoneId { return nil, errors.Wrap(httperrors.ErrBadRequest, "destination overlay network not in same zone as server") } diff --git a/pkg/compute/models/guest_sshable.go b/pkg/compute/models/guest_sshable.go index 6db66db36e..2e05e1d49e 100644 --- a/pkg/compute/models/guest_sshable.go +++ b/pkg/compute/models/guest_sshable.go @@ -139,7 +139,7 @@ func (guest *SGuest) sshableTryEach( if network == nil { continue } - vpc := network.GetVpc() + vpc, _ := network.GetVpc() if vpc == nil { continue } diff --git a/pkg/compute/models/guest_template.go b/pkg/compute/models/guest_template.go index b023dcdc72..45f20720d2 100644 --- a/pkg/compute/models/guest_template.go +++ b/pkg/compute/models/guest_template.go @@ -253,7 +253,7 @@ func (gtm *SGuestTemplateManager) validateData( return cinput, errors.Wrap(err, "NetworkManager.FetchById") } net := model.(*SNetwork) - vpc := net.GetVpc() + vpc, _ := net.GetVpc() if vpc != nil { cinput.VpcId = vpc.Id } diff --git a/pkg/compute/models/guestdisks.go b/pkg/compute/models/guestdisks.go index 88b08cc5b0..7f5824492e 100644 --- a/pkg/compute/models/guestdisks.go +++ b/pkg/compute/models/guestdisks.go @@ -138,7 +138,7 @@ func (manager *SGuestdiskManager) FetchCustomizeColumns( rows[i].Status = disk.Status rows[i].DiskSize = disk.DiskSize rows[i].DiskType = disk.DiskType - storage := disk.GetStorage() + storage, _ := disk.GetStorage() if storage != nil { rows[i].StorageType = storage.StorageType rows[i].MediumType = storage.MediumType @@ -188,7 +188,7 @@ func (self *SGuestdisk) GetJsonDescAtHost(host *SHost) jsonutils.JSONObject { templateId := disk.GetTemplateId() if len(templateId) > 0 { desc.Add(jsonutils.NewString(templateId), "template_id") - storage := disk.GetStorage() + storage, _ := disk.GetStorage() storagecacheimg := StoragecachedimageManager.GetStoragecachedimage(storage.StoragecacheId, templateId) if storagecacheimg != nil { desc.Add(jsonutils.NewString(storagecacheimg.Path), "image_path") diff --git a/pkg/compute/models/guestnetworks.go b/pkg/compute/models/guestnetworks.go index bb1755ac96..a828eb00e0 100644 --- a/pkg/compute/models/guestnetworks.go +++ b/pkg/compute/models/guestnetworks.go @@ -287,7 +287,7 @@ func (manager *SGuestnetworkManager) newGuestNetwork( lockman.LockObject(ctx, network) defer lockman.ReleaseObject(ctx, network) - vpc := network.GetVpc() + vpc, _ := network.GetVpc() if vpc == nil { return nil, fmt.Errorf("cannot find vpc of network %s(%s)", network.Id, network.Name) } @@ -526,7 +526,7 @@ func (self *SGuestnetwork) getJsonDescOneCloudVpc(network *SNetwork) *jsonutils. } } } - vpc := network.GetVpc() + vpc, _ := network.GetVpc() vpcDesc := jsonutils.NewDict() vpcDesc.Set("id", jsonutils.NewString(vpc.Id)) @@ -799,7 +799,7 @@ func (self *SGuestnetwork) getBandwidth() int { } else { net := self.GetNetwork() if net != nil { - wire := net.GetWire() + wire, _ := net.GetWire() if wire != nil { return wire.Bandwidth } @@ -813,7 +813,8 @@ func (self *SGuestnetwork) getMtu(net *SNetwork) int { } func (self *SGuestnetwork) IsAllocated() bool { - provider := self.GetGuest().getRegion().Provider + region, _ := self.GetGuest().getRegion() + provider := region.Provider if regutils.MatchMacAddr(self.MacAddr) && (self.Virtual || regutils.MatchIP4Addr(self.IpAddr) || (provider != api.CLOUD_PROVIDER_ONECLOUD && !options.Options.EnablePreAllocateIpAddr)) { return true } @@ -957,10 +958,11 @@ func (self *SGuestnetwork) ToNetworkConfig() *api.NetworkConfig { if net == nil { return nil } + wire, _ := net.GetWire() ret := &api.NetworkConfig{ Index: int(self.Index), Network: net.Id, - Wire: net.GetWire().Id, + Wire: wire.Id, Mac: self.MacAddr, Address: self.IpAddr, Driver: self.Driver, diff --git a/pkg/compute/models/guestresource.go b/pkg/compute/models/guestresource.go index e738924d9b..1c8a7afac7 100644 --- a/pkg/compute/models/guestresource.go +++ b/pkg/compute/models/guestresource.go @@ -52,37 +52,36 @@ func ValidateGuestResourceInput(userCred mcclient.TokenCredential, input api.Ser return srvObj.(*SGuest), input, nil } -func (self *SGuestResourceBase) GetGuest() *SGuest { - obj, _ := GuestManager.FetchById(self.GuestId) - if obj != nil { - return obj.(*SGuest) +func (self *SGuestResourceBase) GetGuest() (*SGuest, error) { + obj, err := GuestManager.FetchById(self.GuestId) + if err != nil { + return nil, err } - return nil + return obj.(*SGuest), nil } -func (self *SGuestResourceBase) GetHost() *SHost { - guest := self.GetGuest() - if guest != nil { - return guest.GetHost() +func (self *SGuestResourceBase) GetHost() (*SHost, error) { + guest, err := self.GetGuest() + if err != nil { + return nil, err } - return nil + return guest.GetHost() } -func (self *SGuestResourceBase) GetZone() *SZone { - host := self.GetHost() - if host != nil { - return host.GetZone() +func (self *SGuestResourceBase) GetZone() (*SZone, error) { + host, err := self.GetHost() + if err != nil { + return nil, err } - return nil + return host.GetZone() } -func (self *SGuestResourceBase) GetRegion() *SCloudregion { - host := self.GetHost() - if host == nil { - return nil +func (self *SGuestResourceBase) GetRegion() (*SCloudregion, error) { + host, err := self.GetHost() + if err != nil { + return nil, err } - region := host.GetRegion() - return region + return host.GetRegion() } func (manager *SGuestResourceBaseManager) FetchCustomizeColumns( @@ -245,7 +244,7 @@ func (manager *SGuestResourceBaseManager) GetExportKeys() []string { } func (self *SGuestResourceBase) GetChangeOwnerCandidateDomainIds() []string { - guest := self.GetGuest() + guest, _ := self.GetGuest() if guest != nil { return guest.GetChangeOwnerCandidateDomainIds() } diff --git a/pkg/compute/models/guests.go b/pkg/compute/models/guests.go index c738359ea9..fab04bda1c 100644 --- a/pkg/compute/models/guests.go +++ b/pkg/compute/models/guests.go @@ -688,7 +688,7 @@ func (guest *SGuest) ValidatePurgeCondition(ctx context.Context) error { } func (guest *SGuest) ValidateDeleteCondition(ctx context.Context) error { - host := guest.GetHost() + host, _ := guest.GetHost() if host != nil && guest.GetHypervisor() != api.HYPERVISOR_BAREMETAL { if !host.GetEnabled() { return httperrors.NewInputParameterError("Cannot delete server on disabled host") @@ -782,7 +782,7 @@ func (guest *SGuest) GetVpc() (*SVpc, error) { if network == nil { return nil, errors.Wrapf(err, "failed getting network for guest %s(%s)", guest.Name, guest.Id) } - vpc := network.GetVpc() + vpc, _ := network.GetVpc() if vpc == nil { return nil, errors.Wrapf(err, "failed getting vpc of guest network %s(%s)", network.Name, network.Id) } @@ -876,21 +876,22 @@ func (guest *SGuest) CustomizeCreate(ctx context.Context, userCred mcclient.Toke } func (guest *SGuest) GetCloudproviderId() string { - host := guest.GetHost() + host, _ := guest.GetHost() if host != nil { return host.GetCloudproviderId() } return "" } -func (guest *SGuest) GetHost() *SHost { +func (guest *SGuest) GetHost() (*SHost, error) { if len(guest.HostId) > 0 && regutils.MatchUUID(guest.HostId) { - host, _ := HostManager.FetchById(guest.HostId) - if host != nil { - return host.(*SHost) + host, err := HostManager.FetchById(guest.HostId) + if err != nil { + return nil, err } + return host.(*SHost), nil } - return nil + return nil, fmt.Errorf("empty host id") } func (guest *SGuest) SetHostId(userCred mcclient.TokenCredential, hostId string) error { @@ -1041,7 +1042,7 @@ func serverCreateInput2ComputeQuotaKeys(input api.ServerCreateInput, ownerId mcc if len(input.PreferHost) > 0 { hostObj, _ := HostManager.FetchById(input.PreferHost) host := hostObj.(*SHost) - zone := host.GetZone() + zone, _ := host.GetZone() keys.ZoneId = zone.Id keys.RegionId = zone.CloudregionId } else if len(input.PreferZone) > 0 { @@ -1052,7 +1053,7 @@ func serverCreateInput2ComputeQuotaKeys(input api.ServerCreateInput, ownerId mcc } else if len(input.PreferWire) > 0 { wireObj, _ := WireManager.FetchById(input.PreferWire) wire := wireObj.(*SWire) - zone := wire.GetZone() + zone, _ := wire.GetZone() keys.ZoneId = zone.Id keys.RegionId = zone.CloudregionId } else if len(input.PreferRegion) > 0 { @@ -2235,20 +2236,20 @@ func (self *SGuest) getIPs() []string { return ips } -func (self *SGuest) getZone() *SZone { - host := self.GetHost() - if host != nil { - return host.GetZone() +func (self *SGuest) getZone() (*SZone, error) { + host, err := self.GetHost() + if err != nil { + return nil, err } - return nil + return host.GetZone() } -func (self *SGuest) getRegion() *SCloudregion { - zone := self.getZone() - if zone != nil { - return zone.GetRegion() +func (self *SGuest) getRegion() (*SCloudregion, error) { + zone, err := self.getZone() + if err != nil { + return nil, err } - return nil + return zone.GetRegion() } func (self *SGuest) GetOS() string { @@ -2366,7 +2367,7 @@ var ( ) func (self *SGuest) GetIRegion() (cloudprovider.ICloudRegion, error) { - host := self.GetHost() + host, _ := self.GetHost() if host == nil { return nil, fmt.Errorf("failed to get host by guest %s(%s)", self.Name, self.Id) } @@ -2408,7 +2409,7 @@ func (self *SGuest) syncRemoveCloudVM(ctx context.Context, userCred mcclient.Tok if err == nil { //漂移归位 if hostId := iVM.GetIHostId(); len(hostId) > 0 { host, err := db.FetchByExternalIdAndManagerId(HostManager, hostId, func(q *sqlchemy.SQuery) *sqlchemy.SQuery { - host := self.GetHost() + host, _ := self.GetHost() if host != nil { return q.Equals("manager_id", host.ManagerId) } @@ -2551,7 +2552,7 @@ func (self *SGuest) syncWithCloudVM(ctx context.Context, userCred mcclient.Token SyncCloudProject(userCred, self, syncOwnerId, extVM, host.ManagerId) if provider.GetFactory().IsSupportPrepaidResources() && recycle { - vhost := self.GetHost() + vhost, _ := self.GetHost() err = vhost.syncWithCloudPrepaidVM(extVM, host) if err != nil { return err @@ -2673,7 +2674,7 @@ func (self *SGuest) detachNetworks(ctx context.Context, userCred mcclient.TokenC if err != nil { return err } - host := self.GetHost() + host, _ := self.GetHost() if host != nil { host.ClearSchedDescCache() // ignore error } @@ -2925,13 +2926,13 @@ func getCloudNicNetwork(ctx context.Context, vnic cloudprovider.ICloudNic, host vnet := vnic.GetINetwork() if vnet == nil { if vnic.InClassicNetwork() { - region := host.GetRegion() + region, _ := host.GetRegion() cloudprovider := host.GetCloudprovider() vpc, err := VpcManager.GetOrCreateVpcForClassicNetwork(ctx, cloudprovider, region) if err != nil { return nil, errors.Wrap(err, "NewVpcForClassicNetwork") } - zone := host.GetZone() + zone, _ := host.GetZone() wire, err := WireManager.GetOrCreateWireForClassicNetwork(ctx, vpc, zone) if err != nil { return nil, errors.Wrap(err, "NewWireForClassicNetwork") @@ -4121,7 +4122,7 @@ func (self *SGuest) GetJsonDescAtHypervisor(ctx context.Context, host *SHost) *j desc.Add(jsonutils.NewString(kvmOptions), "kvm") } - zone := self.getZone() + zone, _ := self.getZone() if zone != nil { desc.Add(jsonutils.NewString(zone.Id), "zone_id") desc.Add(jsonutils.NewString(zone.Name), "zone") @@ -4237,7 +4238,7 @@ func (self *SGuest) GetJsonDescAtBaremetal(ctx context.Context, host *SHost) *js desc.Add(jsonutils.NewString(rules), "admin_security_rules") } - zone := self.getZone() + zone, _ := self.getZone() if zone != nil { desc.Add(jsonutils.NewString(zone.Id), "zone_id") desc.Add(jsonutils.NewString(zone.Name), "zone") @@ -4440,7 +4441,7 @@ func (self *SGuest) GetShortDesc(ctx context.Context) *jsonutils.JSONDict { desc.Set("hypervisor", jsonutils.NewString(self.GetHypervisor())) - host := self.GetHost() + host, _ := self.GetHost() spec := self.GetSpec(false) if self.GetHypervisor() == api.HYPERVISOR_BAREMETAL { @@ -4693,7 +4694,7 @@ func (manager *SGuestManager) getExpiredPostpaidGuests() []SGuest { } func (self *SGuest) doExternalSync(ctx context.Context, userCred mcclient.TokenCredential) error { - host := self.GetHost() + host, _ := self.GetHost() if host == nil { return fmt.Errorf("no host???") } @@ -4925,11 +4926,12 @@ func (self *SGuest) SyncVMEip(ctx context.Context, userCred mcclient.TokenCreden } } + region, _ := self.getRegion() if eip == nil && extEip == nil { // do nothing } else if eip == nil && extEip != nil { // add - neip, err := ElasticipManager.getEipByExtEip(ctx, userCred, extEip, provider, self.getRegion(), syncOwnerId) + neip, err := ElasticipManager.getEipByExtEip(ctx, userCred, extEip, provider, region, syncOwnerId) if err != nil { result.AddError(errors.Wrapf(err, "getEipByExtEip")) } else { @@ -4958,7 +4960,7 @@ func (self *SGuest) SyncVMEip(ctx context.Context, userCred mcclient.TokenCreden result.DeleteError(err) } else { result.Delete() - neip, err := ElasticipManager.getEipByExtEip(ctx, userCred, extEip, provider, self.getRegion(), syncOwnerId) + neip, err := ElasticipManager.getEipByExtEip(ctx, userCred, extEip, provider, region, syncOwnerId) if err != nil { result.AddError(err) } else { @@ -4985,7 +4987,7 @@ func (self *SGuest) SyncVMEip(ctx context.Context, userCred mcclient.TokenCreden } func (self *SGuest) getSecgroupsBySecgroupExternalIds(externalIds []string) ([]SSecurityGroup, error) { - host := self.GetHost() + host, _ := self.GetHost() if host == nil { return nil, errors.Error("not found host for guest") } @@ -5023,7 +5025,7 @@ func (self *SGuest) GetIVM() (cloudprovider.ICloudVM, error) { log.Errorf(msg) return nil, fmt.Errorf(msg) } - host := self.GetHost() + host, _ := self.GetHost() if host == nil { msg := fmt.Sprintf("GetIVM: No valid host") log.Errorf(msg) @@ -5110,7 +5112,7 @@ func (self *SGuest) SetDisableDelete(userCred mcclient.TokenCredential, val bool func (self *SGuest) getDefaultStorageType() string { diskCat := self.CategorizeDisks() if diskCat.Root != nil { - rootStorage := diskCat.Root.GetStorage() + rootStorage, _ := diskCat.Root.GetStorage() if rootStorage != nil { return rootStorage.StorageType } @@ -5224,7 +5226,8 @@ func (self *SGuest) OnScheduleToHost(ctx context.Context, userCred mcclient.Toke notes.Add(jsonutils.NewString(hostId), "host_id") db.OpsLog.LogEvent(self, db.ACT_SCHEDULE, notes, userCred) - return self.GetHost().ClearSchedDescCache() + host, _ := self.GetHost() + return host.ClearSchedDescCache() } func (guest *SGuest) AllowGetDetailsTasks(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) bool { @@ -5369,7 +5372,7 @@ func (self *SGuest) toCreateInput() *api.ServerCreateInput { if keypair := self.getKeypair(); keypair != nil { r.KeypairId = keypair.Id } - if host := self.GetHost(); host != nil { + if host, _ := self.GetHost(); host != nil { r.ResourceType = host.ResourceType } if eip, _ := self.GetEipOrPublicIp(); eip != nil { @@ -5384,8 +5387,9 @@ func (self *SGuest) toCreateInput() *api.ServerCreateInput { } } } - if zone := self.getZone(); zone != nil { - r.PreferRegion = zone.GetRegion().GetId() + if zone, _ := self.getZone(); zone != nil { + region, _ := zone.GetRegion() + r.PreferRegion = region.GetId() r.PreferZone = zone.GetId() } return r @@ -5410,7 +5414,7 @@ func (self *SGuest) ToDisksConfig() []*api.DiskConfig { diskConf.Driver = guestDisk.Driver diskConf.Cache = guestDisk.CacheMode diskConf.Mountpoint = guestDisk.Mountpoint - storage := disk.GetStorage() + storage, _ := disk.GetStorage() diskConf.Backend = storage.StorageType diskConf.Medium = storage.MediumType ret[idx] = diskConf @@ -5638,7 +5642,7 @@ func (self *SGuest) GetDiskIndex(diskId string) int8 { } func (guest *SGuest) GetRegionalQuotaKeys() (quotas.IQuotaKeys, error) { - host := guest.GetHost() + host, _ := guest.GetHost() if host == nil { return nil, errors.Wrap(httperrors.ErrInvalidStatus, "no valid host") } @@ -5646,7 +5650,7 @@ func (guest *SGuest) GetRegionalQuotaKeys() (quotas.IQuotaKeys, error) { if provider == nil && len(host.ManagerId) > 0 { return nil, errors.Wrap(httperrors.ErrInvalidStatus, "no valid manager") } - region := host.GetRegion() + region, _ := host.GetRegion() if region == nil { return nil, errors.Wrap(httperrors.ErrInvalidStatus, "no valid region") } @@ -5654,7 +5658,7 @@ func (guest *SGuest) GetRegionalQuotaKeys() (quotas.IQuotaKeys, error) { } func (guest *SGuest) GetQuotaKeys() (quotas.IQuotaKeys, error) { - host := guest.GetHost() + host, _ := guest.GetHost() if host == nil { return nil, errors.Wrap(httperrors.ErrInvalidStatus, "no valid host") } @@ -5662,7 +5666,7 @@ func (guest *SGuest) GetQuotaKeys() (quotas.IQuotaKeys, error) { if provider == nil && len(host.ManagerId) > 0 { return nil, errors.Wrap(httperrors.ErrInvalidStatus, "no valid manager") } - zone := host.GetZone() + zone, _ := host.GetZone() if zone == nil { return nil, errors.Wrap(httperrors.ErrInvalidStatus, "no valid zone") } diff --git a/pkg/compute/models/helper.go b/pkg/compute/models/helper.go index f3142c2e7d..e071172760 100644 --- a/pkg/compute/models/helper.go +++ b/pkg/compute/models/helper.go @@ -108,9 +108,9 @@ func ValidateScheduleCreateData(ctx context.Context, userCred mcclient.TokenCred input.PreferHost = baremetal.Id input.DefaultStorageType = defaultStorage.StorageType - zone := baremetal.GetZone() + zone, _ := baremetal.GetZone() input.PreferZone = zone.Id - region := zone.GetRegion() + region, _ := zone.GetRegion() input.PreferRegion = region.Id } else { if len(input.Schedtags) > 0 { @@ -132,9 +132,9 @@ func ValidateScheduleCreateData(ctx context.Context, userCred mcclient.TokenCred } wire := wireObj.(*SWire) input.PreferWire = wire.Id - zone := wire.GetZone() + zone, _ := wire.GetZone() input.PreferZone = zone.Id - region := zone.GetRegion() + region, _ := zone.GetRegion() input.PreferRegion = region.Id } else if input.PreferZone != "" { zoneStr := input.PreferZone @@ -148,7 +148,7 @@ func ValidateScheduleCreateData(ctx context.Context, userCred mcclient.TokenCred } zone := zoneObj.(*SZone) input.PreferZone = zone.Id - region := zone.GetRegion() + region, _ := zone.GetRegion() input.PreferRegion = region.Id } else if input.PreferRegion != "" { regionStr := input.PreferRegion diff --git a/pkg/compute/models/host_recycle.go b/pkg/compute/models/host_recycle.go index d5d7191776..3e09794c36 100644 --- a/pkg/compute/models/host_recycle.go +++ b/pkg/compute/models/host_recycle.go @@ -57,7 +57,7 @@ func (self *SGuest) CanPerformPrepaidRecycle() error { if self.ExpiredAt.Before(time.Now()) { return fmt.Errorf("prepaid expired") } - host := self.GetHost() + host, _ := self.GetHost() if host == nil { return fmt.Errorf("no host") } @@ -107,7 +107,7 @@ func (self *SGuest) doPrepaidRecycle(ctx context.Context, userCred mcclient.Toke } func (self *SGuest) doPrepaidRecycleNoLock(ctx context.Context, userCred mcclient.TokenCredential) error { - oHost := self.GetHost() + oHost, _ := self.GetHost() fakeHost := SHost{} fakeHost.SetModelManager(HostManager, &fakeHost) @@ -127,7 +127,7 @@ func (self *SGuest) doPrepaidRecycleNoLock(ctx context.Context, userCred mcclien totalSize := 0 for i := 0; i < len(guestdisks); i += 1 { disk := guestdisks[i].GetDisk() - storage := disk.GetStorage() + storage, _ := disk.GetStorage() totalSize += disk.DiskSize @@ -149,7 +149,8 @@ func (self *SGuest) doPrepaidRecycleNoLock(ctx context.Context, userCred mcclien fakeHost.StorageSize = totalSize fakeHost.StorageInfo = jsonutils.Marshal(&storageInfo) - fakeHost.ZoneId = self.getZone().GetId() + zone, _ := self.getZone() + fakeHost.ZoneId = zone.GetId() fakeHost.IsBaremetal = false fakeHost.IsMaintenance = false fakeHost.ResourceType = api.HostResourceTypePrepaidRecycle @@ -213,7 +214,7 @@ func (self *SGuest) doPrepaidRecycleNoLock(ctx context.Context, userCred mcclien var externalId string for i := 0; i < len(guestdisks); i += 1 { disk := guestdisks[i].GetDisk() - storage := disk.GetStorage() + storage, _ := disk.GetStorage() if disk.BillingType == billing_api.BILLING_TYPE_PREPAID { storageSize += int64(disk.DiskSize) if len(externalId) == 0 { @@ -229,7 +230,7 @@ func (self *SGuest) doPrepaidRecycleNoLock(ctx context.Context, userCred mcclien } } - sysStorage := guestdisks[0].GetDisk().GetStorage() + sysStorage, _ := guestdisks[0].GetDisk().GetStorage() fakeStorage := SStorage{} fakeStorage.SetModelManager(StorageManager, &fakeStorage) @@ -308,7 +309,7 @@ func (self *SGuest) PerformUndoPrepaidRecycle(ctx context.Context, userCred mccl return nil, httperrors.NewInvalidStatusError("cannot undo recycle in status %s", self.Status) } - host := self.GetHost() + host, _ := self.GetHost() if host == nil { return nil, httperrors.NewInvalidStatusError("no valid host") @@ -450,7 +451,7 @@ func doUndoPrepaidRecycleNoLock(ctx context.Context, userCred mcclient.TokenCred // check disk data integrity for i := 0; i < len(guestdisks); i += 1 { disk := guestdisks[i].GetDisk() - storage := disk.GetStorage() + storage, _ := disk.GetStorage() if storage.StorageType == api.STORAGE_LOCAL { oHostStorage := oHost.GetHoststorageByExternalId(storage.ExternalId) if oHostStorage == nil { @@ -478,7 +479,7 @@ func doUndoPrepaidRecycleNoLock(ctx context.Context, userCred mcclient.TokenCred for i := 0; i < len(guestdisks); i += 1 { disk := guestdisks[i].GetDisk() - storage := disk.GetStorage() + storage, _ := disk.GetStorage() if storage.StorageType == api.STORAGE_LOCAL { oHostStorage := oHost.GetHoststorageByExternalId(storage.ExternalId) @@ -514,7 +515,7 @@ func doUndoPrepaidRecycleNoLock(ctx context.Context, userCred mcclient.TokenCred } func (self *SGuest) IsPrepaidRecycle() bool { - host := self.GetHost() + host, _ := self.GetHost() if host == nil { return false } diff --git a/pkg/compute/models/hosts.go b/pkg/compute/models/hosts.go index e7f1e6f432..fc23604bda 100644 --- a/pkg/compute/models/hosts.go +++ b/pkg/compute/models/hosts.go @@ -456,7 +456,8 @@ func (manager *SHostManager) ListItemFilter( wires := []string{} for i := 0; i < len(nets); i++ { net := nets[i].GetNetwork() - if net.GetVpc().Id != api.DEFAULT_VPC_ID { + vpc, _ := net.GetVpc() + if vpc.Id != api.DEFAULT_VPC_ID { q = q.IsNotEmpty("ovn_version") } else { if !utils.IsInStringArray(net.WireId, wires) { @@ -558,23 +559,20 @@ func (self *SHost) IsArmHost() bool { return self.CpuArchitecture == apis.OS_ARCH_AARCH64 } -func (self *SHost) GetZone() *SZone { - if len(self.ZoneId) == 0 { - return nil +func (self *SHost) GetZone() (*SZone, error) { + zone, err := ZoneManager.FetchById(self.ZoneId) + if err != nil { + return nil, err } - zone, _ := ZoneManager.FetchById(self.ZoneId) - if zone != nil { - return zone.(*SZone) - } - return nil + return zone.(*SZone), nil } -func (self *SHost) GetRegion() *SCloudregion { - zone := self.GetZone() - if zone != nil { - return zone.GetRegion() +func (self *SHost) GetRegion() (*SCloudregion, error) { + zone, err := self.GetZone() + if err != nil { + return nil, err } - return nil + return zone.GetRegion() } func (self *SHost) GetCpuCount() int { @@ -1994,7 +1992,7 @@ func (manager *SHostManager) newFromCloudHost(ctx context.Context, userCred mccl log.Errorf(msg) return nil, fmt.Errorf(msg) } - izone = wire.GetZone() + izone, _ = wire.GetZone() } host.ExternalId = extHost.GetGlobalId() @@ -2211,7 +2209,8 @@ func (self *SHost) newCloudHostStorage(ctx context.Context, userCred mcclient.To if err == sql.ErrNoRows { // no cloud storage found, this may happen for on-premise host // create the storage right now - storageObj, err = StorageManager.newFromCloudStorage(ctx, userCred, extStorage, provider, self.GetZone()) + zone, _ := self.GetZone() + storageObj, err = StorageManager.newFromCloudStorage(ctx, userCred, extStorage, provider, zone) if err != nil { return nil, errors.Wrapf(err, "StorageManager.newFromCloudStorage") } @@ -2758,11 +2757,11 @@ func (self *SHost) GetIZone() (cloudprovider.ICloudZone, error) { if err != nil { return nil, fmt.Errorf("No cloudprovider for host: %s", err) } - zone := self.GetZone() + zone, _ := self.GetZone() if zone == nil { return nil, fmt.Errorf("no zone for host???") } - region := zone.GetRegion() + region, _ := zone.GetRegion() if region == nil { return nil, fmt.Errorf("No region for zone???") } @@ -2792,11 +2791,9 @@ func (self *SHost) GetIHostAndProvider() (cloudprovider.ICloudHost, cloudprovide if provider.GetFactory().IsOnPremise() { iregion, err = provider.GetOnPremiseIRegion() } else { - region := self.GetRegion() - if region == nil { - msg := "fail to find region of host???" - log.Errorf(msg) - return nil, nil, fmt.Errorf(msg) + region, err := self.GetRegion() + if err != nil { + return nil, nil, errors.Wrapf(err, "GetRegion") } iregion, err = provider.GetIRegionById(region.ExternalId) } @@ -2816,7 +2813,7 @@ func (self *SHost) GetIRegion() (cloudprovider.ICloudRegion, error) { if err != nil { return nil, fmt.Errorf("No cloudprovider for host %s: %s", self.Name, err) } - region := self.GetRegion() + region, _ := self.GetRegion() if region == nil { return nil, fmt.Errorf("failed to find host %s region info", self.Name) } @@ -3041,7 +3038,7 @@ func (self *SHost) GetDetailsVnc(ctx context.Context, userCred mcclient.TokenCre if utils.IsInStringArray(self.Status, []string{api.BAREMETAL_READY, api.BAREMETAL_RUNNING}) { retval := jsonutils.NewDict() retval.Set("host_id", jsonutils.NewString(self.Id)) - zone := self.GetZone() + zone, _ := self.GetZone() retval.Set("zone", jsonutils.NewString(zone.GetName())) return retval, nil } @@ -3336,7 +3333,7 @@ func (manager *SHostManager) ValidateCreateData( return input, errors.Wrap(err, "net.reserveIpWithDuration") } } - zoneObj := net.GetZone() + zoneObj, _ := net.GetZone() if zoneObj == nil { return input, httperrors.NewInputParameterError("IPMI network has no zone???") } @@ -3403,7 +3400,7 @@ func (manager *SHostManager) ValidateCreateData( return input, httperrors.NewConflictError("Access ip %s has been used", accessIpAddr) } - zoneObj := accessNet.GetZone() + zoneObj, _ := accessNet.GetZone() if zoneObj == nil { return input, httperrors.NewInputParameterError("Access network has no zone???") } @@ -3489,7 +3486,7 @@ func (self *SHost) ValidateUpdateData(ctx context.Context, userCred mcclient.Tok if net == nil { return input, httperrors.NewInputParameterError("%s is out of network IP ranges", ipmiIpAddr) } - zoneObj := net.GetZone() + zoneObj, _ := net.GetZone() if zoneObj == nil { return input, httperrors.NewInputParameterError("IPMI network has not zone???") } @@ -5287,9 +5284,9 @@ func (manager *SHostManager) GetHostByIp(hostIp string) (*SHost, error) { func (self *SHost) getCloudProviderInfo() SCloudProviderInfo { var region *SCloudregion - zone := self.GetZone() + zone, _ := self.GetZone() if zone != nil { - region = zone.GetRegion() + region, _ = zone.GetRegion() } provider := self.GetCloudprovider() return MakeCloudProviderInfo(region, zone, provider) @@ -5868,7 +5865,7 @@ func GetHostQuotaKeysFromCreateInput(owner mcclient.IIdentityProvider, input api } func (model *SHost) GetQuotaKeys() quotas.SDomainRegionalCloudResourceKeys { - zone := model.GetZone() + zone, _ := model.GetZone() manager := model.GetCloudprovider() ownerId := model.GetOwnerId() zoneKeys := fetchZonalQuotaKeys(rbacutils.ScopeDomain, ownerId, zone, manager) diff --git a/pkg/compute/models/instance_snapshots.go b/pkg/compute/models/instance_snapshots.go index 81c9497275..f0ddd47852 100644 --- a/pkg/compute/models/instance_snapshots.go +++ b/pkg/compute/models/instance_snapshots.go @@ -245,7 +245,7 @@ func (self *SInstanceSnapshot) getMoreDetails(userCred mcclient.TokenCredential, if err != nil { log.Errorf("unable to GetSystemDisk of guest %q", guest.GetId()) } else { - s := disk.GetStorage() + s, _ := disk.GetStorage() if s != nil { out.StorageType = s.StorageType } @@ -303,9 +303,9 @@ func (manager *SInstanceSnapshotManager) fillInstanceSnapshot(userCred mcclient. instanceSnapshot.GuestId = guest.Id guestSchedInput := guest.ToSchedDesc() - host := guest.GetHost() + host, _ := guest.GetHost() instanceSnapshot.ManagerId = host.ManagerId - zone := host.GetZone() + zone, _ := host.GetZone() instanceSnapshot.CloudregionId = zone.CloudregionId for i := 0; i < len(guestSchedInput.Disks); i++ { @@ -636,8 +636,8 @@ func (ism *SInstanceSnapshotManager) InitializeData() error { if err != nil { return errors.Wrapf(err, "unable to GetGuest for isp %q", isp.GetId()) } else { - host := guest.GetHost() - zone := host.GetZone() + host, _ := guest.GetHost() + zone, _ := host.GetZone() cloudregionId = zone.CloudregionId } _, err = db.Update(isp, func() error { diff --git a/pkg/compute/models/kafka.go b/pkg/compute/models/kafka.go index 01e20f4ab7..e9b3b6f2d2 100644 --- a/pkg/compute/models/kafka.go +++ b/pkg/compute/models/kafka.go @@ -436,8 +436,9 @@ func (self *SKafka) SyncWithCloudKafka(ctx context.Context, userCred mcclient.To } else { network := _network.(*SNetwork) self.NetworkId = network.Id - self.VpcId = network.GetVpc().Id - if zone := network.GetZone(); zone != nil { + vpc, _ := network.GetVpc() + self.VpcId = vpc.Id + if zone, _ := network.GetZone(); zone != nil { self.ZoneId = zone.Id } } @@ -529,8 +530,9 @@ func (self *SCloudregion) newFromCloudKafka(ctx context.Context, userCred mcclie } else { network := _network.(*SNetwork) kafka.NetworkId = network.Id - kafka.VpcId = network.GetVpc().Id - if zone := network.GetZone(); zone != nil { + vpc, _ := network.GetVpc() + kafka.VpcId = vpc.Id + if zone, _ := network.GetZone(); zone != nil { kafka.ZoneId = zone.Id } } diff --git a/pkg/compute/models/loadbalancerbackendgroups.go b/pkg/compute/models/loadbalancerbackendgroups.go index 754d350536..96e6471312 100644 --- a/pkg/compute/models/loadbalancerbackendgroups.go +++ b/pkg/compute/models/loadbalancerbackendgroups.go @@ -225,7 +225,7 @@ func (man *SLoadbalancerBackendGroupManager) ValidateCreateData(ctx context.Cont return nil, httperrors.NewGeneralError(err) } guest := _guest.(*SGuest) - host := guest.GetHost() + host, _ := guest.GetHost() if host == nil { return nil, fmt.Errorf("error getting host of guest %s", guest.Name) } @@ -240,7 +240,7 @@ func (man *SLoadbalancerBackendGroupManager) ValidateCreateData(ctx context.Cont return nil, err } backends[i].Address = address - backendRegion = host.GetRegion() + backendRegion, _ = host.GetRegion() case api.LB_BACKEND_HOST: if !db.IsAdminAllowCreate(userCred, man) { return nil, httperrors.NewForbiddenError("only sysadmin can specify host as backend") @@ -257,7 +257,7 @@ func (man *SLoadbalancerBackendGroupManager) ValidateCreateData(ctx context.Cont backends[i].Name = host.Name backends[i].ExternalID = host.ExternalId backends[i].Address = host.AccessIp - backendRegion = host.GetRegion() + backendRegion, _ = host.GetRegion() default: return nil, httperrors.NewInputParameterError("unexpected backend type %s", backends[i].BackendType) } diff --git a/pkg/compute/models/loadbalancers.go b/pkg/compute/models/loadbalancers.go index d804c546f7..e7a606ab32 100644 --- a/pkg/compute/models/loadbalancers.go +++ b/pkg/compute/models/loadbalancers.go @@ -315,7 +315,7 @@ func (man *SLoadbalancerManager) ValidateCreateData( if err != nil { return nil, errors.Wrap(err, "ValidateZoneResourceInput") } - region = zone.GetRegion() + region, _ = zone.GetRegion() } else if len(input.NetworkId) > 0 { if strings.IndexByte(input.NetworkId, ',') >= 0 { input.NetworkId = strings.Split(input.NetworkId, ",")[0] @@ -325,7 +325,7 @@ func (man *SLoadbalancerManager) ValidateCreateData( if err != nil { return nil, errors.Wrap(err, "ValidateNetworkResourceInput") } - region = network.GetRegion() + region, _ = network.GetRegion() } if region == nil { @@ -429,11 +429,13 @@ func (lb *SLoadbalancer) GetCloudproviderId() string { } func (lb *SLoadbalancer) GetZone() *SZone { - return lb.SZoneResourceBase.GetZone() + zone, _ := lb.SZoneResourceBase.GetZone() + return zone } func (lb *SLoadbalancer) GetVpc() *SVpc { - return lb.SVpcResourceBase.GetVpc() + vpc, _ := lb.SVpcResourceBase.GetVpc() + return vpc } func (lb *SLoadbalancer) GetNetworks() ([]SNetwork, error) { @@ -590,10 +592,10 @@ func (lb *SLoadbalancer) ValidateUpdateData(ctx context.Context, userCred mcclie } if clusterV.Model != nil { var ( - cluster = clusterV.Model.(*SLoadbalancerCluster) - network = lb.GetNetwork() - wire = network.GetWire() - zone = wire.GetZone() + cluster = clusterV.Model.(*SLoadbalancerCluster) + network, _ = lb.GetNetwork() + wire, _ = network.GetWire() + zone, _ = wire.GetZone() ) if cluster.ZoneId != zone.Id { return nil, httperrors.NewInputParameterError("cluster zone %s does not match network zone %s ", diff --git a/pkg/compute/models/mount_targets.go b/pkg/compute/models/mount_targets.go index ea3cb9f77c..925ae9ff99 100644 --- a/pkg/compute/models/mount_targets.go +++ b/pkg/compute/models/mount_targets.go @@ -132,7 +132,7 @@ func (manager *SMountTargetManager) ValidateCreateData(ctx context.Context, user return input, err } network := _network.(*SNetwork) - vpc := network.GetVpc() + vpc, _ := network.GetVpc() if vpc == nil { return input, httperrors.NewGeneralError(fmt.Errorf("failed to found vpc for network %s", input.NetworkId)) } diff --git a/pkg/compute/models/natgateways.go b/pkg/compute/models/natgateways.go index 251e3bdbe2..a57cd7adf0 100644 --- a/pkg/compute/models/natgateways.go +++ b/pkg/compute/models/natgateways.go @@ -152,7 +152,7 @@ func (man *SNatGatewayManager) ValidateCreateData(ctx context.Context, userCred return input, err } network := _network.(*SNetwork) - vpc := network.GetVpc() + vpc, _ := network.GetVpc() if vpc == nil { return input, httperrors.NewGeneralError(errors.Errorf("failed to get network %s %s vpc", network.Name, network.Id)) } @@ -652,7 +652,8 @@ func (self *SNatGateway) SyncNatGatewayEips(ctx context.Context, userCred mcclie } for i := 0; i < len(added); i += 1 { - neip, err := ElasticipManager.getEipByExtEip(ctx, userCred, added[i], provider, self.GetRegion(), provider.GetOwnerId()) + region, _ := self.GetRegion() + neip, err := ElasticipManager.getEipByExtEip(ctx, userCred, added[i], provider, region, provider.GetOwnerId()) if err != nil { result.AddError(err) continue @@ -950,7 +951,8 @@ func (self *SNatGateway) PerformRenew(ctx context.Context, userCred mcclient.Tok return nil, httperrors.NewInputParameterError("invalid duration %s: %s", input.Duration, err) } - if !self.GetRegion().GetDriver().IsSupportedBillingCycle(bc, NatGatewayManager.KeywordPlural()) { + region, _ := self.GetRegion() + if !region.GetDriver().IsSupportedBillingCycle(bc, NatGatewayManager.KeywordPlural()) { return nil, httperrors.NewInputParameterError("unsupported duration %s", input.Duration) } @@ -996,7 +998,7 @@ func (self *SNatGateway) PerformSetAutoRenew(ctx context.Context, userCred mccli return nil, nil } - region := self.GetRegion() + region, _ := self.GetRegion() if region == nil { return nil, httperrors.NewGeneralError(fmt.Errorf("filed to get nat %s region", self.Name)) } diff --git a/pkg/compute/models/natstable.go b/pkg/compute/models/natstable.go index 050e1c46d1..bac96af7c9 100644 --- a/pkg/compute/models/natstable.go +++ b/pkg/compute/models/natstable.go @@ -206,7 +206,7 @@ func (man *SNatSEntryManager) ValidateCreateData(ctx context.Context, userCred m return nil, err } network := _network.(*SNetwork) - vpc := network.GetVpc() + vpc, _ := network.GetVpc() if vpc == nil { return nil, httperrors.NewGeneralError(errors.Wrapf(err, "network.GetVpc")) } diff --git a/pkg/compute/models/networkresource.go b/pkg/compute/models/networkresource.go index 5e8e9b7692..0d5601a5c3 100644 --- a/pkg/compute/models/networkresource.go +++ b/pkg/compute/models/networkresource.go @@ -52,45 +52,44 @@ func ValidateNetworkResourceInput(userCred mcclient.TokenCredential, query api.N return netObj.(*SNetwork), query, nil } -func (self *SNetworkResourceBase) GetNetwork() *SNetwork { - obj, _ := NetworkManager.FetchById(self.NetworkId) - if obj != nil { - return obj.(*SNetwork) +func (self *SNetworkResourceBase) GetNetwork() (*SNetwork, error) { + obj, err := NetworkManager.FetchById(self.NetworkId) + if err != nil { + return nil, errors.Wrapf(err, "GetNetwork(%s)", self.NetworkId) } - return nil + return obj.(*SNetwork), nil } -func (self *SNetworkResourceBase) GetWire() *SWire { - net := self.GetNetwork() - if net != nil { - return net.GetWire() +func (self *SNetworkResourceBase) GetWire() (*SWire, error) { + net, err := self.GetNetwork() + if err != nil { + return nil, err } - return nil + return net.GetWire() } -func (self *SNetworkResourceBase) GetZone() *SZone { - wire := self.GetWire() - if wire != nil { - return wire.GetZone() +func (self *SNetworkResourceBase) GetZone() (*SZone, error) { + wire, err := self.GetWire() + if err != nil { + return nil, err } - return nil + return wire.GetZone() } -func (self *SNetworkResourceBase) GetVpc() *SVpc { - wire := self.GetWire() - if wire != nil { - return wire.GetVpc() +func (self *SNetworkResourceBase) GetVpc() (*SVpc, error) { + wire, err := self.GetWire() + if err != nil { + return nil, err } - return nil + return wire.GetVpc() } -func (self *SNetworkResourceBase) GetRegion() *SCloudregion { - vpc := self.GetVpc() - if vpc == nil { - return nil +func (self *SNetworkResourceBase) GetRegion() (*SCloudregion, error) { + vpc, err := self.GetVpc() + if err != nil { + return nil, err } - region, _ := vpc.GetRegion() - return region + return vpc.GetRegion() } func (manager *SNetworkResourceBaseManager) FetchCustomizeColumns( @@ -254,7 +253,7 @@ func (manager *SNetworkResourceBaseManager) GetExportKeys() []string { } func (self *SNetworkResourceBase) GetChangeOwnerCandidateDomainIds() []string { - network := self.GetNetwork() + network, _ := self.GetNetwork() if network != nil { return network.GetChangeOwnerCandidateDomainIds() } diff --git a/pkg/compute/models/networks.go b/pkg/compute/models/networks.go index 27271f6a63..fee507c8c1 100644 --- a/pkg/compute/models/networks.go +++ b/pkg/compute/models/networks.go @@ -159,7 +159,7 @@ func (manager *SNetworkManager) AllowCreateItem(ctx context.Context, userCred mc func (self *SNetwork) getMtu() int { baseMtu := options.Options.DefaultMtu - wire := self.GetWire() + wire, _ := self.GetWire() if wire != nil { baseMtu = wire.Mtu if IsOneCloudVpcResource(wire) { @@ -371,25 +371,25 @@ func (self *SNetwork) ValidateElbNetwork(ipAddr net.IP) (*SCloudregion, *SZone, } // 验证网络可用 - wire := self.GetWire() + wire, _ := self.GetWire() if wire == nil { return nil, nil, nil, nil, fmt.Errorf("getting wire failed") } - vpc := wire.GetVpc() - if vpc == nil { - return nil, nil, nil, nil, fmt.Errorf("getting vpc failed") + vpc, err := wire.GetVpc() + if err != nil { + return nil, nil, nil, nil, errors.Wrapf(err, "GetVpc") } var zone *SZone if len(wire.ZoneId) > 0 { - zone = wire.GetZone() + zone, _ = wire.GetZone() if zone == nil { return nil, nil, nil, nil, fmt.Errorf("getting zone failed") } } - region := wire.GetRegion() + region, _ := wire.GetRegion() if region == nil { return nil, nil, nil, nil, fmt.Errorf("getting region failed") } @@ -458,7 +458,7 @@ func (self *SNetwork) GetNetworkInterfacesCount() (int, error) { func (manager *SNetworkManager) GetOrCreateClassicNetwork(ctx context.Context, wire *SWire) (*SNetwork, error) { _network, err := db.FetchByExternalIdAndManagerId(manager, wire.Id, func(q *sqlchemy.SQuery) *sqlchemy.SQuery { - v := wire.GetVpc() + v, _ := wire.GetVpc() if v != nil { wire := WireManager.Query().SubQuery() vpc := VpcManager.Query().SubQuery() @@ -834,7 +834,7 @@ func (self *SNetwork) syncRemoveCloudNetwork(ctx context.Context, userCred mccli } func (self *SNetwork) SyncWithCloudNetwork(ctx context.Context, userCred mcclient.TokenCredential, extNet cloudprovider.ICloudNetwork, syncOwnerId mcclient.IIdentityProvider, provider *SCloudprovider) error { - vpc := self.GetVpc() + vpc, _ := self.GetVpc() diff, err := db.UpdateWithLock(ctx, self, func() error { extNet.Refresh() self.Status = extNet.GetStatus() @@ -908,7 +908,7 @@ func (manager *SNetworkManager) newFromCloudNetwork(ctx context.Context, userCre return nil, errors.Wrapf(err, "Insert") } - vpc := wire.GetVpc() + vpc, _ := wire.GetVpc() syncVirtualResourceMetadata(ctx, userCred, &net, extNet) SyncCloudProject(userCred, &net, syncOwnerId, extNet, vpc.ManagerId) @@ -1424,7 +1424,7 @@ func (manager *SNetworkManager) validateEnsureWire(ctx context.Context, userCred return } w = wObj.(*SWire) - v = w.GetVpc() + v, _ = w.GetVpc() crObj, err := CloudregionManager.FetchById(v.CloudregionId) if err != nil { err = errors.Wrapf(err, "cloudregion %s", v.CloudregionId) @@ -1456,7 +1456,7 @@ func (manager *SNetworkManager) validateEnsureZoneVpc(ctx context.Context, userC var wires []SWire // 华为云,ucloud wire zone_id 为空 - cr = z.GetRegion() + cr, _ = z.GetRegion() if utils.IsInStringArray(cr.Provider, api.REGIONAL_NETWORK_PROVIDERS) { wires, err = WireManager.getWiresByVpcAndZone(v, nil) } else { @@ -1732,7 +1732,7 @@ func (self *SNetwork) validateUpdateData(ctx context.Context, userCred mcclient. } netRange := netutils.NewIPV4AddrRange(startIp, endIp) - vpc := self.GetVpc() + vpc, _ := self.GetVpc() if !vpc.containsIPV4Range(netRange) { return input, httperrors.NewInputParameterError("Network not in range of VPC cidrblock %s", vpc.CidrBlock) } @@ -1846,7 +1846,7 @@ func isOverlapNetworks(nets []SNetwork, startIp netutils.IPV4Addr, endIp netutil } func (self *SNetwork) IsManaged() bool { - wire := self.GetWire() + wire, _ := self.GetWire() if wire == nil { return false } @@ -1856,7 +1856,7 @@ func (self *SNetwork) IsManaged() bool { func (self *SNetwork) CustomizeCreate(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, query jsonutils.JSONObject, data jsonutils.JSONObject) error { if !data.Contains("public_scope") { if self.ServerType == api.NETWORK_TYPE_GUEST && !self.IsManaged() { - wire := self.GetWire() + wire, _ := self.GetWire() if db.IsAdminAllowPerform(userCred, self, "public") && ownerId.GetProjectDomainId() == userCred.GetProjectDomainId() && wire != nil && wire.IsPublic && wire.PublicScope == string(rbacutils.ScopeSystem) { self.SetShare(rbacutils.ScopeSystem) } else if db.IsDomainAllowPerform(userCred, self, "public") && ownerId.GetProjectId() == userCred.GetProjectId() && consts.GetNonDefaultDomainProjects() { @@ -1875,7 +1875,7 @@ func (self *SNetwork) CustomizeCreate(ctx context.Context, userCred mcclient.Tok func (self *SNetwork) PostCreate(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, query jsonutils.JSONObject, data jsonutils.JSONObject) { self.SSharableVirtualResourceBase.PostCreate(ctx, userCred, ownerId, query, data) - vpc := self.GetVpc() + vpc, _ := self.GetVpc() if vpc != nil && vpc.IsManaged() { task, err := taskman.TaskManager.NewTask(ctx, "NetworkCreateTask", self, userCred, nil, "", "", nil) if err != nil { @@ -1963,11 +1963,9 @@ func (self *SNetwork) StartDeleteNetworkTask(ctx context.Context, userCred mccli } func (self *SNetwork) GetINetwork() (cloudprovider.ICloudNetwork, error) { - wire := self.GetWire() - if wire == nil { - msg := "No wire for this network????" - log.Errorf(msg) - return nil, fmt.Errorf(msg) + wire, err := self.GetWire() + if err != nil { + return nil, errors.Wrapf(err, "GetWire") } iwire, err := wire.GetIWire() if err != nil { @@ -2376,7 +2374,7 @@ func (self *SNetwork) PerformPurge(ctx context.Context, userCred mcclient.TokenC if err != nil { return nil, err } - vpc := self.GetVpc() + vpc, _ := self.GetVpc() if vpc != nil && len(vpc.ExternalId) > 0 { provider := vpc.GetCloudprovider() if provider != nil && provider.GetEnabled() { @@ -2783,7 +2781,7 @@ func (network *SNetwork) GetSchedtagJointManager() ISchedtagJointManager { } func (network *SNetwork) ClearSchedDescCache() error { - wire := network.GetWire() + wire, _ := network.GetWire() if wire == nil { return nil } @@ -2869,7 +2867,7 @@ func (net *SNetwork) AllowPerformSync(ctx context.Context, userCred mcclient.Tok // 同步接入云IP子网状态 // 本地IDC不支持此操作 func (net *SNetwork) PerformSync(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, input *api.NetworkSyncInput) (jsonutils.JSONObject, error) { - vpc := net.GetVpc() + vpc, _ := net.GetVpc() if vpc != nil && vpc.IsManaged() { return nil, StartResourceSyncStatusTask(ctx, userCred, net, "NetworkSyncstatusTask", "") } @@ -2885,7 +2883,7 @@ func (net *SNetwork) PerformStatus(ctx context.Context, userCred mcclient.TokenC if len(input.Status) == 0 { return nil, httperrors.NewMissingParameterError("status") } - vpc := net.GetVpc() + vpc, _ := net.GetVpc() if vpc != nil && vpc.IsManaged() { return nil, httperrors.NewUnsupportOperationError("managed network cannot change status") } @@ -2897,9 +2895,9 @@ func (net *SNetwork) PerformStatus(ctx context.Context, userCred mcclient.TokenC func (net *SNetwork) GetChangeOwnerCandidateDomainIds() []string { candidates := [][]string{} - wire := net.GetWire() + wire, _ := net.GetWire() if wire != nil { - vpc := wire.GetVpc() + vpc, _ := wire.GetVpc() if vpc != nil { candidates = append(candidates, vpc.GetChangeOwnerCandidateDomainIds()) } diff --git a/pkg/compute/models/route_table_associtaion.go b/pkg/compute/models/route_table_associtaion.go index f020b6e7ad..a2aa211c62 100644 --- a/pkg/compute/models/route_table_associtaion.go +++ b/pkg/compute/models/route_table_associtaion.go @@ -110,7 +110,7 @@ func (self *SRouteTableAssociation) syncWithCloudAssociation(ctx context.Context if err != nil { return errors.Wrap(err, "self.GetRouteTable()") } - vpc := routeTable.GetVpc() + vpc, _ := routeTable.GetVpc() subnet, err := vpc.GetNetworkByExtId(cloudAssociation.AssociatedResourceId) if err == nil { AssociatedResourceId = subnet.GetId() @@ -145,7 +145,7 @@ func (manager *SRouteTableAssociationManager) newAssociationFromCloud( association.RouteTableId = routeTable.GetId() association.ExternalId = cloudAssociation.GetGlobalId() if association.AssociationType == string(cloudprovider.RouteTableAssociaToSubnet) { - vpc := routeTable.GetVpc() + vpc, _ := routeTable.GetVpc() subnet, err := vpc.GetNetworkByExtId(association.ExtAssociatedResourceId) if err == nil { association.AssociatedResourceId = subnet.GetId() diff --git a/pkg/compute/models/routetable_routesets.go b/pkg/compute/models/routetable_routesets.go index 16aad71c6f..01c9159549 100644 --- a/pkg/compute/models/routetable_routesets.go +++ b/pkg/compute/models/routetable_routesets.go @@ -143,7 +143,7 @@ func (manager *SRouteTableRouteSetManager) ValidateCreateData( input.ExtNextHopId = vpcPeer.GetExternalId() } - vpc := routeTable.GetVpc() + vpc, _ := routeTable.GetVpc() account := vpc.GetCloudaccount() factory, err := account.GetProviderFactory() if err != nil { @@ -312,7 +312,7 @@ func (self *SRouteTableRouteSet) GetVpc() (*SVpc, error) { if err != nil { return nil, errors.Wrap(err, "self.GetRouteTable()") } - return routeTable.GetVpc(), nil + return routeTable.GetVpc() } func (self *SRouteTableRouteSet) syncRemoveRouteSet(ctx context.Context, userCred mcclient.TokenCredential) error { @@ -378,7 +378,7 @@ func (manager *SRouteTableRouteSetManager) newRouteSetFromCloud(ctx context.Cont routeSet.ExternalId = cloudRouteSet.GetGlobalId() routeSet.SetModelManager(manager, routeSet) if cloudRouteSet.GetNextHopType() == api.Next_HOP_TYPE_VPCPEERING { - vpc := routeTable.GetVpc() + vpc, _ := routeTable.GetVpc() vpcPeer, err := vpc.GetVpcPeeringConnectionByExtId(cloudRouteSet.GetNextHop()) if err == nil { routeSet.NextHopId = vpcPeer.GetId() diff --git a/pkg/compute/models/scaling_group.go b/pkg/compute/models/scaling_group.go index b273f11013..0a9b7511d0 100644 --- a/pkg/compute/models/scaling_group.go +++ b/pkg/compute/models/scaling_group.go @@ -164,7 +164,7 @@ func (sgm *SScalingGroupManager) ValidateCreateData(ctx context.Context, userCre // check networks in vpc for i := range networks { - vpc := networks[i].GetVpc() + vpc, _ := networks[i].GetVpc() if vpc == nil { return input, fmt.Errorf("Get vpc of network '%s' failed", networks[i].Id) } diff --git a/pkg/compute/models/skus.go b/pkg/compute/models/skus.go index 75ccb4ad2d..702ede8141 100644 --- a/pkg/compute/models/skus.go +++ b/pkg/compute/models/skus.go @@ -308,7 +308,7 @@ func (self *SServerSkuManager) ValidateCreateData(ctx context.Context, userCred if input.CloudregionId != zone.CloudregionId { return input, httperrors.NewConflictError("zone %s not in cloudregion %s", zone.Name, input.CloudregionId) } - region = zone.GetRegion() + region, _ = zone.GetRegion() } if input.CpuCoreCount < 1 || input.CpuCoreCount > 256 { @@ -794,7 +794,7 @@ func (manager *SServerSkuManager) ListItemFilter( return nil, httperrors.NewGeneralError(err) } zone := _zone.(*SZone) - region := zone.GetRegion() + region, _ := zone.GetRegion() if region == nil { return nil, httperrors.NewResourceNotFoundError("failed to find cloudregion for zone %s(%s)", zone.Name, zone.Id) } diff --git a/pkg/compute/models/snapshotpolicydisks.go b/pkg/compute/models/snapshotpolicydisks.go index ef3f6494ea..06c02c0945 100644 --- a/pkg/compute/models/snapshotpolicydisks.go +++ b/pkg/compute/models/snapshotpolicydisks.go @@ -313,7 +313,8 @@ func (m *SSnapshotPolicyDiskManager) SyncByDisk(ctx context.Context, userCred mc } //fetch snapshotPolicy Cache to find the snapshotpolicyID corresponding to extSnapshotpolicyID - spCaches, err := SnapshotPolicyCacheManager.FetchAllByExtIds(extSnapshotpolicies, storage.GetRegion().GetId(), + region, _ := storage.GetRegion() + spCaches, err := SnapshotPolicyCacheManager.FetchAllByExtIds(extSnapshotpolicies, region.GetId(), storage.ManagerId) if err != nil { return errors.Wrapf(err, "fetachsnapshotpolicy caches failed") @@ -394,7 +395,8 @@ func (m *SSnapshotPolicyDiskManager) SyncAttachDiskExt(ctx context.Context, user extSnapshotpolicies []string, syncOwnerID mcclient.IIdentityProvider, disk *SDisk, storage *SStorage) error { //fetch snapshotPolicy Cache to find the snapshotpolicyID corresponding to extSnapshotpolicyID - spCaches, err := SnapshotPolicyCacheManager.FetchAllByExtIds(extSnapshotpolicies, storage.GetRegion().GetId(), + region, _ := storage.GetRegion() + spCaches, err := SnapshotPolicyCacheManager.FetchAllByExtIds(extSnapshotpolicies, region.GetId(), storage.ManagerId) if err != nil { return errors.Wrapf(err, "fetachsnapshotpolicy caches failed") @@ -483,7 +485,9 @@ func (self *SSnapshotPolicyDiskManager) ValidateCreateData(ctx context.Context, if err != nil { return nil, err } - err = disk.GetStorage().GetRegion().GetDriver().ValidateCreateSnapshopolicyDiskData(ctx, userCred, disk, snapshotPolicy) + storage, _ := disk.GetStorage() + region, _ := storage.GetRegion() + err = region.GetDriver().ValidateCreateSnapshopolicyDiskData(ctx, userCred, disk, snapshotPolicy) if err != nil { return nil, err } diff --git a/pkg/compute/models/snapshots.go b/pkg/compute/models/snapshots.go index dc861a0f7a..19f0fa9125 100644 --- a/pkg/compute/models/snapshots.go +++ b/pkg/compute/models/snapshots.go @@ -350,12 +350,12 @@ func (manager *SSnapshotManager) ValidateCreateData( input.Size = disk.DiskSize input.OsArch = disk.OsArch - storage := disk.GetStorage() + storage, _ := disk.GetStorage() if len(disk.ExternalId) == 0 { input.StorageId = disk.StorageId } input.ManagerId = storage.ManagerId - region := storage.GetRegion() + region, _ := storage.GetRegion() if region == nil { return input, httperrors.NewInputParameterError("failed to found region for disk's storage %s(%s)", storage.Name, storage.Id) } @@ -550,7 +550,7 @@ func (self *SSnapshotManager) CreateSnapshot(ctx context.Context, owner mcclient return nil, err } disk := iDisk.(*SDisk) - storage := disk.GetStorage() + storage, _ := disk.GetStorage() snapshot := &SSnapshot{} snapshot.SetModelManager(self, snapshot) snapshot.ProjectId = owner.GetProjectId() @@ -569,7 +569,7 @@ func (self *SSnapshotManager) CreateSnapshot(ctx context.Context, owner mcclient snapshot.Location = location snapshot.CreatedBy = createdBy snapshot.ManagerId = storage.ManagerId - if cloudregion := storage.GetRegion(); cloudregion != nil { + if cloudregion, _ := storage.GetRegion(); cloudregion != nil { snapshot.CloudregionId = cloudregion.GetId() } snapshot.Name = name diff --git a/pkg/compute/models/storagecaches.go b/pkg/compute/models/storagecaches.go index 3f19d22cb3..c662f86f1e 100644 --- a/pkg/compute/models/storagecaches.go +++ b/pkg/compute/models/storagecaches.go @@ -147,7 +147,7 @@ func (self *SStoragecache) GetRegion() (*SCloudregion, error) { if err != nil { return nil, err } - region := host.GetRegion() + region, _ := host.GetRegion() if region == nil { return nil, fmt.Errorf("failed to get region for host %s(%s)", host.Name, host.Id) } diff --git a/pkg/compute/models/storages.go b/pkg/compute/models/storages.go index 1134570dd3..16f2bfd9ba 100644 --- a/pkg/compute/models/storages.go +++ b/pkg/compute/models/storages.go @@ -570,18 +570,22 @@ func (self *SStorage) GetZoneId() string { } } -func (self *SStorage) getZone() *SZone { +func (self *SStorage) getZone() (*SZone, error) { zoneId := self.GetZoneId() if len(zoneId) > 0 { - return ZoneManager.FetchZoneById(zoneId) + zone, err := ZoneManager.FetchById(zoneId) + if err != nil { + return nil, errors.Wrapf(err, "GetZone(%s)", zoneId) + } + return zone.(*SZone), nil } - return nil + return nil, fmt.Errorf("empty zoneId for storage %s(%s)", self.Name, self.Id) } -func (self *SStorage) GetRegion() *SCloudregion { - zone := self.getZone() - if zone == nil { - return nil +func (self *SStorage) GetRegion() (*SCloudregion, error) { + zone, err := self.getZone() + if err != nil { + return nil, err } return zone.GetRegion() } @@ -1302,7 +1306,7 @@ func (self *SStorage) GetIStorage() (cloudprovider.ICloudStorage, error) { if provider.GetFactory().IsOnPremise() { iRegion, err = provider.GetOnPremiseIRegion() } else { - region := self.GetRegion() + region, _ := self.GetRegion() if region == nil { msg := "cannot find region for storage???" log.Errorf(msg) @@ -1553,9 +1557,9 @@ func (self *SStorage) ClearSchedDescCache() error { func (self *SStorage) getCloudProviderInfo() SCloudProviderInfo { var region *SCloudregion - zone := self.getZone() + zone, _ := self.getZone() if zone != nil { - region = zone.GetRegion() + region, _ = zone.GetRegion() } provider := self.GetCloudprovider() return MakeCloudProviderInfo(region, zone, provider) diff --git a/pkg/compute/models/vpcresource.go b/pkg/compute/models/vpcresource.go index 247e995c8d..747ddf3bc9 100644 --- a/pkg/compute/models/vpcresource.go +++ b/pkg/compute/models/vpcresource.go @@ -33,8 +33,8 @@ import ( ) type IVpcResource interface { - GetVpc() *SVpc - GetRegion() *SCloudregion + GetVpc() (*SVpc, error) + GetRegion() (*SCloudregion, error) } type SVpcResourceBase struct { @@ -46,42 +46,41 @@ type SVpcResourceBaseManager struct { SManagedResourceBaseManager } -func (self *SVpcResourceBase) GetVpc() *SVpc { - obj, _ := VpcManager.FetchById(self.VpcId) - if obj == nil { - return nil +func (self *SVpcResourceBase) GetVpc() (*SVpc, error) { + obj, err := VpcManager.FetchById(self.VpcId) + if err != nil { + return nil, errors.Wrapf(err, "GetVpc(%s)", self.VpcId) } - return obj.(*SVpc) + return obj.(*SVpc), nil } -func (self *SVpcResourceBase) GetRegion() *SCloudregion { - vpc := self.GetVpc() - if vpc == nil { - return nil +func (self *SVpcResourceBase) GetRegion() (*SCloudregion, error) { + vpc, err := self.GetVpc() + if err != nil { + return nil, err } - region, _ := vpc.GetRegion() - return region + return vpc.GetRegion() } func (self *SVpcResourceBase) GetRegionId() string { - region := self.GetRegion() - if region != nil { - return region.Id + region, err := self.GetRegion() + if err != nil { + return "" } - return "" + return region.Id } func (self *SVpcResourceBase) GetIRegion() (cloudprovider.ICloudRegion, error) { - vpc := self.GetVpc() - if vpc != nil { - return vpc.GetIRegion() + vpc, err := self.GetVpc() + if err != nil { + return nil, errors.Wrapf(err, "GetVpc") } - return nil, errors.Wrap(httperrors.ErrBadRequest, "not a valid vpc") + return vpc.GetIRegion() } func (self *SVpcResourceBase) GetCloudprovider() *SCloudprovider { - vpc := self.GetVpc() - if vpc == nil { + vpc, err := self.GetVpc() + if err != nil { return nil } return vpc.GetCloudprovider() @@ -96,7 +95,7 @@ func (self *SVpcResourceBase) GetCloudproviderId() string { } func (self *SVpcResourceBase) GetProviderName() string { - vpc := self.GetVpc() + vpc, _ := self.GetVpc() if vpc == nil { return "" } @@ -294,7 +293,7 @@ func (manager *SVpcResourceBaseManager) GetExportKeys() []string { } func (self *SVpcResourceBase) GetChangeOwnerCandidateDomainIds() []string { - vpc := self.GetVpc() + vpc, _ := self.GetVpc() if vpc != nil { return vpc.GetChangeOwnerCandidateDomainIds() } @@ -302,11 +301,11 @@ func (self *SVpcResourceBase) GetChangeOwnerCandidateDomainIds() []string { } func IsOneCloudVpcResource(res IVpcResource) bool { - vpc := res.GetVpc() + vpc, _ := res.GetVpc() if vpc == nil { return false } - region := res.GetRegion() + region, _ := res.GetRegion() if region == nil { return false } diff --git a/pkg/compute/models/waf_instances.go b/pkg/compute/models/waf_instances.go index a5ecd36a4c..f22e696e1f 100644 --- a/pkg/compute/models/waf_instances.go +++ b/pkg/compute/models/waf_instances.go @@ -103,7 +103,7 @@ func (manager *SWafInstanceManager) ValidateCreateData(ctx context.Context, user return input, err } server := _server.(*SGuest) - host := server.GetHost() + host, _ := server.GetHost() if host.ManagerId != provider.GetId() { return input, httperrors.NewConflictError("server %s does not belong to account %s", server.Name, provider.GetName()) } diff --git a/pkg/compute/models/wireresource.go b/pkg/compute/models/wireresource.go index 6ad6b1f122..dc1a977e92 100644 --- a/pkg/compute/models/wireresource.go +++ b/pkg/compute/models/wireresource.go @@ -55,45 +55,44 @@ func ValidateWireResourceInput(userCred mcclient.TokenCredential, input api.Wire return wireObj.(*SWire), input, nil } -func (self *SWireResourceBase) GetWire() *SWire { - w, _ := WireManager.FetchById(self.WireId) - if w != nil { - return w.(*SWire) +func (self *SWireResourceBase) GetWire() (*SWire, error) { + w, err := WireManager.FetchById(self.WireId) + if err != nil { + return nil, errors.Wrapf(err, "GetWire(%s)", self.WireId) } - return nil + return w.(*SWire), nil } func (self *SWireResourceBase) GetCloudproviderId() string { - vpc := self.GetVpc() + vpc, _ := self.GetVpc() if vpc != nil { return vpc.ManagerId } return "" } -func (self *SWireResourceBase) GetVpc() *SVpc { - wire := self.GetWire() - if wire != nil { - return wire.GetVpc() +func (self *SWireResourceBase) GetVpc() (*SVpc, error) { + wire, err := self.GetWire() + if err != nil { + return nil, errors.Wrapf(err, "GetWire") } - return nil + return wire.GetVpc() } -func (self *SWireResourceBase) GetRegion() *SCloudregion { - vpc := self.GetVpc() - if vpc == nil { - return nil +func (self *SWireResourceBase) GetRegion() (*SCloudregion, error) { + vpc, err := self.GetVpc() + if err != nil { + return nil, errors.Wrapf(err, "GetVpc") } - region, _ := vpc.GetRegion() - return region + return vpc.GetRegion() } -func (self *SWireResourceBase) GetZone() *SZone { - wire := self.GetWire() - if wire != nil { - return wire.GetZone() +func (self *SWireResourceBase) GetZone() (*SZone, error) { + wire, err := self.GetWire() + if err != nil { + return nil, errors.Wrapf(err, "GetWire") } - return nil + return wire.GetZone() } func (manager *SWireResourceBaseManager) FetchCustomizeColumns( @@ -325,7 +324,7 @@ func (manager *SWireResourceBaseManager) GetExportKeys() []string { } func (self *SWireResourceBase) GetChangeOwnerCandidateDomainIds() []string { - wire := self.GetWire() + wire, _ := self.GetWire() if wire != nil { return wire.GetChangeOwnerCandidateDomainIds() } diff --git a/pkg/compute/models/wires.go b/pkg/compute/models/wires.go index 274459a6ea..c8a3faa0fc 100644 --- a/pkg/compute/models/wires.go +++ b/pkg/compute/models/wires.go @@ -350,7 +350,7 @@ func (self *SWire) syncRemoveCloudWire(ctx context.Context, userCred mcclient.To lockman.LockObject(ctx, self) defer lockman.ReleaseObject(ctx, self) - vpc := self.GetVpc() + vpc, _ := self.GetVpc() cloudprovider := vpc.GetCloudprovider() if self.ExternalId == WireManager.getWireExternalIdForClassicNetwork(cloudprovider.Provider, self.VpcId, self.ZoneId) { return nil @@ -373,7 +373,7 @@ func (self *SWire) syncWithCloudWire(ctx context.Context, userCred mcclient.Toke self.IsEmulated = extWire.IsEmulated() self.Status = extWire.GetStatus() - vpc := self.GetVpc() + vpc, _ := self.GetVpc() if vpc != nil { region, err := vpc.GetRegion() if err != nil { @@ -1072,10 +1072,9 @@ func (wire *SWire) clearHostSchedDescCache() error { } func (self *SWire) GetIWire() (cloudprovider.ICloudWire, error) { - vpc := self.GetVpc() - if vpc == nil { - log.Errorf("Cannot find VPC for wire???") - return nil, fmt.Errorf("No VPC?????") + vpc, err := self.GetVpc() + if err != nil { + return nil, errors.Wrapf(err, "GetVpc") } ivpc, err := vpc.GetIVpc() if err != nil { @@ -1098,7 +1097,7 @@ func (manager *SWireManager) GetOnPremiseWireOfIp(ipAddr string) (*SWire, error) if err != nil { return nil, err } - wire := net.GetWire() + wire, _ := net.GetWire() if wire != nil { return wire, nil } else { @@ -1427,7 +1426,7 @@ func (man *SWireManager) removeWiresByVpc(ctx context.Context, userCred mcclient } func (self *SWire) IsManaged() bool { - vpc := self.GetVpc() + vpc, _ := self.GetVpc() if vpc == nil { return false } @@ -1436,7 +1435,7 @@ func (self *SWire) IsManaged() bool { func (model *SWire) CustomizeCreate(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, query jsonutils.JSONObject, data jsonutils.JSONObject) error { if !data.Contains("public_scope") { - vpc := model.GetVpc() + vpc, _ := model.GetVpc() if !model.IsManaged() && db.IsAdminAllowPerform(userCred, model, "public") && ownerId.GetProjectDomainId() == userCred.GetProjectDomainId() && vpc != nil && vpc.IsPublic && vpc.PublicScope == string(rbacutils.ScopeSystem) { model.SetShare(rbacutils.ScopeSystem) } else { @@ -1450,7 +1449,7 @@ func (model *SWire) CustomizeCreate(ctx context.Context, userCred mcclient.Token func (wire *SWire) GetChangeOwnerCandidateDomainIds() []string { candidates := [][]string{} - vpc := wire.GetVpc() + vpc, _ := wire.GetVpc() if vpc != nil { candidates = append(candidates, vpc.GetChangeOwnerCandidateDomainIds(), diff --git a/pkg/compute/models/zoneresource.go b/pkg/compute/models/zoneresource.go index 0ad999d399..9219519dd6 100644 --- a/pkg/compute/models/zoneresource.go +++ b/pkg/compute/models/zoneresource.go @@ -52,8 +52,12 @@ func ValidateZoneResourceInput(userCred mcclient.TokenCredential, query api.Zone return zoneObj.(*SZone), query, nil } -func (self *SZoneResourceBase) GetZone() *SZone { - return ZoneManager.FetchZoneById(self.ZoneId) +func (self *SZoneResourceBase) GetZone() (*SZone, error) { + zone, err := ZoneManager.FetchById(self.ZoneId) + if err != nil { + return nil, errors.Wrapf(err, "GetZone(%s)", self.ZoneId) + } + return zone.(*SZone), nil } func (manager *SZoneResourceBaseManager) FetchCustomizeColumns( diff --git a/pkg/compute/models/zones.go b/pkg/compute/models/zones.go index 29346d616e..b8135d8ffb 100644 --- a/pkg/compute/models/zones.go +++ b/pkg/compute/models/zones.go @@ -165,7 +165,8 @@ func (manager *SZoneManager) FetchCustomizeColumns( } zone := objs[i].(*SZone) rows[i].ZoneGeneralUsage = zone.GeneralUsage() - rows[i].CloudenvResourceInfo = zone.GetRegion().GetRegionCloudenvInfo() + region, _ := zone.GetRegion() + rows[i].CloudenvResourceInfo = region.GetRegionCloudenvInfo() } return rows } @@ -331,8 +332,12 @@ func (manager *SZoneManager) FetchZoneById(zoneId string) *SZone { return zoneObj.(*SZone) } -func (zone *SZone) GetRegion() *SCloudregion { - return CloudregionManager.FetchRegionById(zone.GetCloudRegionId()) +func (zone *SZone) GetRegion() (*SCloudregion, error) { + region, err := CloudregionManager.FetchById(zone.GetCloudRegionId()) + if err != nil { + return nil, err + } + return region.(*SCloudregion), nil } func (manager *SZoneManager) InitializeData() error { @@ -688,7 +693,7 @@ func (self *SZone) GetDetailsDiskCapability(ctx context.Context, userCred mcclie } func (self *SZone) isManaged() bool { - region := self.GetRegion() + region, _ := self.GetRegion() if region != nil && len(region.ExternalId) == 0 { return false } else { diff --git a/pkg/compute/regiondrivers/aliyun.go b/pkg/compute/regiondrivers/aliyun.go index f6e5bc495f..0f16d1d8bf 100644 --- a/pkg/compute/regiondrivers/aliyun.go +++ b/pkg/compute/regiondrivers/aliyun.go @@ -106,7 +106,7 @@ func (self *SAliyunRegionDriver) validateCreateLBCommonData(ownerId mcclient.IId } } - region := zoneV.Model.(*models.SZone).GetRegion() + region, _ := zoneV.Model.(*models.SZone).GetRegion() if region == nil { return nil, nil, fmt.Errorf("getting region failed") } @@ -294,7 +294,7 @@ func (self *SAliyunRegionDriver) ValidateCreateLoadbalancerBackendData(ctx conte } guest := backend.(*models.SGuest) - host := guest.GetHost() + host, _ := guest.GetHost() if host == nil { return nil, fmt.Errorf("error getting host of guest %s", guest.GetId()) } @@ -302,7 +302,7 @@ func (self *SAliyunRegionDriver) ValidateCreateLoadbalancerBackendData(ctx conte return nil, fmt.Errorf("error loadbalancer of backend group %s", backendGroup.GetId()) } - hostRegion := host.GetRegion() + hostRegion, _ := host.GetRegion() lbRegion := lb.GetRegion() if hostRegion.Id != lbRegion.Id { return nil, httperrors.NewInputParameterError("region of host %q (%s) != region of loadbalancer %q (%s))", @@ -885,11 +885,11 @@ func (self *SAliyunRegionDriver) ValidateCreateDBInstanceData(ctx context.Contex } if network != nil { - wire := network.GetWire() + wire, _ := network.GetWire() if wire == nil { return input, httperrors.NewGeneralError(fmt.Errorf("failed to found wire for network %s(%s)", network.Name, network.Id)) } - zone := wire.GetZone() + zone, _ := wire.GetZone() if zone == nil { return input, httperrors.NewGeneralError(fmt.Errorf("failed to found zone for wire %s(%s)", wire.Name, wire.Id)) } @@ -953,7 +953,7 @@ func (self *SAliyunRegionDriver) ValidateCreateDBInstanceData(ctx context.Contex } case api.DBINSTANCE_TYPE_SQLSERVER: if input.Category == api.ALIYUN_DBINSTANCE_CATEGORY_ALWAYSON { - vpc := network.GetVpc() + vpc, _ := network.GetVpc() count, err := vpc.GetNetworkCount() if err != nil { return input, httperrors.NewGeneralError(err) @@ -1128,7 +1128,7 @@ func (self *SAliyunRegionDriver) ValidateCreateElasticcacheData(ctx context.Cont data.Set("billing_cycle", jsonutils.NewString(cycle.String())) } - vpc := network.GetVpc() + vpc, _ := network.GetVpc() if vpc == nil { return nil, httperrors.NewNotFoundError("network %s related vpc not found", network.GetId()) } diff --git a/pkg/compute/regiondrivers/huawei.go b/pkg/compute/regiondrivers/huawei.go index e54ae41b5b..6ebd2adbb2 100644 --- a/pkg/compute/regiondrivers/huawei.go +++ b/pkg/compute/regiondrivers/huawei.go @@ -130,7 +130,7 @@ func (self *SHuaWeiRegionDriver) ValidateCreateLoadbalancerData(ctx context.Cont data.Set("eip_id", jsonutils.NewString(eip.ExternalId)) } - region := zoneV.Model.(*models.SZone).GetRegion() + region, _ := zoneV.Model.(*models.SZone).GetRegion() if region == nil { return nil, fmt.Errorf("getting region failed") } @@ -2334,7 +2334,7 @@ func ValidateElasticcacheSku(zoneId string, chargeType string, sku *models.SElas } if network != nil { - if zone := network.GetZone(); zone != nil && zone.Id != sku.ZoneId { + if zone, _ := network.GetZone(); zone != nil && zone.Id != sku.ZoneId { return httperrors.NewResourceNotFoundError("elastic cache sku zone (%s) and subnet zone (%s) mismatch", sku.ZoneId, zone.Id) } } @@ -2451,7 +2451,7 @@ func (self *SHuaWeiRegionDriver) ValidateCreateElasticcacheData(ctx context.Cont data.Set("billing_cycle", jsonutils.NewString(cycle.String())) } - vpc := network.GetVpc() + vpc, _ := network.GetVpc() if vpc == nil { return nil, httperrors.NewNotFoundError("network %s related vpc not found", network.GetId()) } diff --git a/pkg/compute/regiondrivers/kvm.go b/pkg/compute/regiondrivers/kvm.go index 1cf93ed111..23d3a88a7b 100644 --- a/pkg/compute/regiondrivers/kvm.go +++ b/pkg/compute/regiondrivers/kvm.go @@ -231,7 +231,7 @@ func (self *SKVMRegionDriver) ValidateCreateLoadbalancerBackendData(ctx context. guest := backend.(*models.SGuest) { // guest zone must match that of loadbalancer's - host := guest.GetHost() + host, _ := guest.GetHost() if host == nil { return nil, httperrors.NewInputParameterError("error getting host of guest %s", guest.GetId()) } @@ -239,8 +239,8 @@ func (self *SKVMRegionDriver) ValidateCreateLoadbalancerBackendData(ctx context. return nil, httperrors.NewInputParameterError("error loadbalancer of backend group %s", backendGroup.GetId()) } var ( - lbRegion = lb.GetRegion() - hostRegion = host.GetRegion() + lbRegion = lb.GetRegion() + hostRegion, _ = host.GetRegion() ) if lbRegion.Id != hostRegion.Id { return nil, httperrors.NewInputParameterError("region of host %q (%s) != region of loadbalancer %q (%s)", @@ -953,7 +953,7 @@ func (self *SKVMRegionDriver) ValidateCreateEipData(ctx context.Context, userCre } input.NetworkId = network.Id - vpc := network.GetVpc() + vpc, _ := network.GetVpc() if vpc == nil { return httperrors.NewInputParameterError("failed to found vpc for network %s(%s)", network.Name, network.Id) } @@ -1104,7 +1104,7 @@ func (self *SKVMRegionDriver) RequestCreateInstanceSnapshot(ctx context.Context, } func (self *SKVMRegionDriver) SnapshotIsOutOfChain(disk *models.SDisk) bool { - storage := disk.GetStorage() + storage, _ := disk.GetStorage() return models.GetStorageDriver(storage.StorageType).SnapshotIsOutOfChain(disk) } @@ -1126,7 +1126,7 @@ func (self *SKVMRegionDriver) OnDiskReset(ctx context.Context, userCred mcclient return err } } - storage := disk.GetStorage() + storage, _ := disk.GetStorage() return models.GetStorageDriver(storage.StorageType).OnDiskReset(ctx, userCred, disk, snapshot, data) } @@ -1189,7 +1189,7 @@ func (self *SKVMRegionDriver) OnSnapshotDelete(ctx context.Context, snapshot *mo func (self *SKVMRegionDriver) RequestSyncDiskStatus(ctx context.Context, userCred mcclient.TokenCredential, disk *models.SDisk, task taskman.ITask) error { taskman.LocalTaskRun(task, func() (jsonutils.JSONObject, error) { - storage := disk.GetStorage() + storage, _ := disk.GetStorage() host := storage.GetMasterHost() header := task.GetTaskRequestHeader() url := fmt.Sprintf("%s/disks/%s/%s/status", host.ManagerUri, storage.Id, disk.Id) diff --git a/pkg/compute/regiondrivers/managedvirtual.go b/pkg/compute/regiondrivers/managedvirtual.go index 1527d47e4c..1d1c10f799 100644 --- a/pkg/compute/regiondrivers/managedvirtual.go +++ b/pkg/compute/regiondrivers/managedvirtual.go @@ -84,14 +84,14 @@ func (self *SManagedVirtualizationRegionDriver) ValidateCreateLoadbalancerBacken return nil, httperrors.NewUnsupportOperationError("internal error: unexpected backend type %s", backendType) } guest := backend.(*models.SGuest) - host := guest.GetHost() + host, _ := guest.GetHost() if host == nil { return nil, fmt.Errorf("error getting host of guest %s", guest.GetId()) } if lb == nil { return nil, fmt.Errorf("error loadbalancer of backend group %s", backendGroup.GetId()) } - hostRegion := host.GetRegion() + hostRegion, _ := host.GetRegion() lbRegion := lb.GetRegion() if hostRegion.Id != lbRegion.Id { return nil, httperrors.NewInputParameterError("region of host %q (%s) != region of loadbalancer %q (%s))", @@ -1302,8 +1302,10 @@ func (self *SManagedVirtualizationRegionDriver) RequestApplySnapshotPolicy(ctx c taskman.LocalTaskRun(task, func() (jsonutils.JSONObject, error) { - regionId := disk.GetStorage().GetRegion().GetId() - providerId := disk.GetStorage().ManagerId + storage, _ := disk.GetStorage() + region, _ := storage.GetRegion() + regionId := region.GetId() + providerId := storage.ManagerId spcache, err := models.SnapshotPolicyCacheManager.Register(ctx, userCred, sp.GetId(), regionId, providerId) if err != nil { return nil, errors.Wrap(err, "registersnapshotpolicy cache failed") @@ -1330,8 +1332,10 @@ func (self *SManagedVirtualizationRegionDriver) RequestCancelSnapshotPolicy(ctx taskman.LocalTaskRun(task, func() (jsonutils.JSONObject, error) { - regionId := disk.GetStorage().GetRegion().GetId() - providerId := disk.GetStorage().ManagerId + storage, _ := disk.GetStorage() + region, _ := storage.GetRegion() + regionId := region.GetId() + providerId := storage.ManagerId spcache, err := models.SnapshotPolicyCacheManager.FetchSnapshotPolicyCache(sp.GetId(), regionId, providerId) if err != nil { @@ -2937,7 +2941,7 @@ func (self *SManagedVirtualizationRegionDriver) RequestRemoteUpdateElasticcache( } tagsUpdateInfo := cloudprovider.TagsUpdateInfo{OldTags: oldTags, NewTags: tags} mangerId := "" - if vpc := elasticcache.GetVpc(); vpc != nil { + if vpc, _ := elasticcache.GetVpc(); vpc != nil { mangerId = vpc.ManagerId } err = cloudprovider.SetTags(ctx, iElasticcache, mangerId, tags, replaceTags) diff --git a/pkg/compute/regiondrivers/openstack.go b/pkg/compute/regiondrivers/openstack.go index 984299250d..bc17c95958 100644 --- a/pkg/compute/regiondrivers/openstack.go +++ b/pkg/compute/regiondrivers/openstack.go @@ -129,7 +129,7 @@ func (self *SOpenStackRegionDriver) ValidateCreateLoadbalancerData(ctx context.C } // region := zoneV.Model.(*models.SZone).GetRegion() - region := networkV.Model.(*models.SNetwork).GetRegion() + region, _ := networkV.Model.(*models.SNetwork).GetRegion() if region == nil { return nil, fmt.Errorf("getting region failed") } @@ -267,7 +267,7 @@ func (self *SOpenStackRegionDriver) ValidateCreateEipData(ctx context.Context, u network := _network.(*models.SNetwork) input.NetworkId = network.Id - vpc := network.GetVpc() + vpc, _ := network.GetVpc() if vpc == nil { return httperrors.NewInputParameterError("failed to found vpc for network %s(%s)", network.Name, network.Id) } diff --git a/pkg/compute/regiondrivers/qcloud.go b/pkg/compute/regiondrivers/qcloud.go index fd314f1ac4..8aa4d452a3 100644 --- a/pkg/compute/regiondrivers/qcloud.go +++ b/pkg/compute/regiondrivers/qcloud.go @@ -120,7 +120,7 @@ func (self *SQcloudRegionDriver) ValidateCreateLoadbalancerData(ctx context.Cont } } - region := zoneV.Model.(*models.SZone).GetRegion() + region, _ := zoneV.Model.(*models.SZone).GetRegion() if region == nil { return nil, fmt.Errorf("getting region failed") } @@ -1294,8 +1294,10 @@ func (self *SQcloudRegionDriver) RequestPreSnapshotPolicyApply(ctx context.Conte if sp == nil { return data, nil } + storage, _ := disk.GetStorage() + region, _ := storage.GetRegion() spcache, err := models.SnapshotPolicyCacheManager.FetchSnapshotPolicyCache(sp.GetId(), - disk.GetStorage().GetRegion().GetId(), disk.GetStorage().ManagerId) + region.GetId(), storage.ManagerId) if err != nil { return nil, err } @@ -1569,7 +1571,7 @@ func (self *SQcloudRegionDriver) ValidateCreateElasticcacheData(ctx context.Cont data.Set("billing_cycle", jsonutils.NewString(cycle.String())) } - vpc := network.GetVpc() + vpc, _ := network.GetVpc() if vpc == nil { return nil, httperrors.NewNotFoundError("network %s related vpc not found", network.GetId()) } @@ -1695,8 +1697,9 @@ func (self *SQcloudRegionDriver) RequestSyncSecgroupsForElasticcache(ctx context return nil, fmt.Errorf("failed to sync project %s for create %s elastic cache %s error: %v", ec.ProjectId, provider.Provider, ec.Name, err) } - vpc := ec.GetVpc() - vpcId, err := self.GetSecurityGroupVpcId(ctx, userCred, ec.GetRegion(), nil, vpc, false) + vpc, _ := ec.GetVpc() + region, _ := vpc.GetRegion() + vpcId, err := self.GetSecurityGroupVpcId(ctx, userCred, region, nil, vpc, false) if err != nil { return nil, errors.Wrap(err, "GetSecurityGroupVpcId") } diff --git a/pkg/compute/regiondrivers/zstack.go b/pkg/compute/regiondrivers/zstack.go index bde71d311d..56ebe57835 100644 --- a/pkg/compute/regiondrivers/zstack.go +++ b/pkg/compute/regiondrivers/zstack.go @@ -87,7 +87,7 @@ func (self *SZStackRegionDriver) ValidateCreateEipData(ctx context.Context, user network := _network.(*models.SNetwork) input.NetworkId = network.Id - vpc := network.GetVpc() + vpc, _ := network.GetVpc() if vpc == nil { return httperrors.NewInputParameterError("failed to found vpc for network %s(%s)", network.Name, network.Id) } diff --git a/pkg/compute/tasks/baremetal_server_reset_task.go b/pkg/compute/tasks/baremetal_server_reset_task.go index 55382c7aab..c6d7afbd93 100644 --- a/pkg/compute/tasks/baremetal_server_reset_task.go +++ b/pkg/compute/tasks/baremetal_server_reset_task.go @@ -31,7 +31,7 @@ type BaremetalServerResetTask struct { func (self *BaremetalServerResetTask) OnInit(ctx context.Context, obj db.IStandaloneModel, body jsonutils.JSONObject) { guest := obj.(*models.SGuest) - baremetal := guest.GetHost() + baremetal, _ := guest.GetHost() if baremetal == nil { self.SetStageFailed(ctx, jsonutils.NewString("Baremetal is not found")) return diff --git a/pkg/compute/tasks/baremetal_server_start_task.go b/pkg/compute/tasks/baremetal_server_start_task.go index b07d6e6860..b63ec22ae7 100644 --- a/pkg/compute/tasks/baremetal_server_start_task.go +++ b/pkg/compute/tasks/baremetal_server_start_task.go @@ -39,7 +39,7 @@ func (self *BaremetalServerStartTask) OnInit(ctx context.Context, obj db.IStanda guest := obj.(*models.SGuest) guest.SetStatus(self.UserCred, api.VM_START_START, "") db.OpsLog.LogEvent(guest, db.ACT_STARTING, "", self.UserCred) - baremetal := guest.GetHost() + baremetal, _ := guest.GetHost() if baremetal == nil { self.OnStartCompleteFailed(ctx, guest, jsonutils.NewString("Baremetal is None")) return @@ -59,7 +59,7 @@ func (self *BaremetalServerStartTask) OnInit(ctx context.Context, obj db.IStanda func (self *BaremetalServerStartTask) OnStartComplete(ctx context.Context, guest *models.SGuest, body jsonutils.JSONObject) { guest.SetStatus(self.UserCred, api.VM_RUNNING, "") - baremetal := guest.GetHost() + baremetal, _ := guest.GetHost() baremetal.SetStatus(self.UserCred, api.BAREMETAL_RUNNING, "") db.OpsLog.LogEvent(guest, db.ACT_START, guest.GetShortDesc(ctx), self.UserCred) } @@ -67,7 +67,7 @@ func (self *BaremetalServerStartTask) OnStartComplete(ctx context.Context, guest func (self *BaremetalServerStartTask) OnStartCompleteFailed(ctx context.Context, guest *models.SGuest, body jsonutils.JSONObject) { guest.SetStatus(self.UserCred, api.VM_START_FAILED, body.String()) db.OpsLog.LogEvent(guest, db.ACT_START_FAIL, body, self.UserCred) - baremetal := guest.GetHost() + baremetal, _ := guest.GetHost() baremetal.SetStatus(self.UserCred, api.BAREMETAL_START_FAIL, body.String()) self.SetStageFailed(ctx, body) } diff --git a/pkg/compute/tasks/baremetal_server_stop_task.go b/pkg/compute/tasks/baremetal_server_stop_task.go index 5647282ba5..f7924c2c5b 100644 --- a/pkg/compute/tasks/baremetal_server_stop_task.go +++ b/pkg/compute/tasks/baremetal_server_stop_task.go @@ -39,7 +39,7 @@ func (self *BaremetalServerStopTask) OnInit(ctx context.Context, obj db.IStandal guest := obj.(*models.SGuest) db.OpsLog.LogEvent(guest, db.ACT_STOPPING, "", self.UserCred) guest.SetStatus(self.UserCred, api.VM_START_STOP, "") - baremetal := guest.GetHost() + baremetal, _ := guest.GetHost() if baremetal != nil { self.OnStopGuestFail(ctx, guest, "Baremetal is None") return @@ -68,7 +68,7 @@ func (self *BaremetalServerStopTask) OnGuestStopTaskComplete(ctx context.Context guest.SetStatus(self.UserCred, api.VM_READY, "") db.OpsLog.LogEvent(guest, db.ACT_STOP, "", self.UserCred) } - baremetal := guest.GetHost() + baremetal, _ := guest.GetHost() baremetal.SetStatus(self.UserCred, api.BAREMETAL_READY, "") self.SetStageComplete(ctx, nil) if guest.Status == api.VM_READY { @@ -81,7 +81,7 @@ func (self *BaremetalServerStopTask) OnGuestStopTaskComplete(ctx context.Context func (self *BaremetalServerStopTask) OnGuestStopTaskCompleteFailed(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { guest.SetStatus(self.UserCred, db.ACT_STOP_FAIL, data.String()) db.OpsLog.LogEvent(guest, db.ACT_STOP_FAIL, data, self.UserCred) - baremetal := guest.GetHost() + baremetal, _ := guest.GetHost() baremetal.SetStatus(self.UserCred, api.BAREMETAL_READY, data.String()) self.SetStageFailed(ctx, data) } diff --git a/pkg/compute/tasks/baremetal_server_sync_status_task.go b/pkg/compute/tasks/baremetal_server_sync_status_task.go index 1f93cc1d46..d35a71cbab 100644 --- a/pkg/compute/tasks/baremetal_server_sync_status_task.go +++ b/pkg/compute/tasks/baremetal_server_sync_status_task.go @@ -38,7 +38,7 @@ func init() { func (self *BaremetalServerSyncStatusTask) OnInit(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { guest := obj.(*models.SGuest) - baremetal := guest.GetHost() + baremetal, _ := guest.GetHost() if baremetal == nil { guest.SetStatus(self.UserCred, api.VM_INIT, "BaremetalServerSyncStatusTask") self.SetStageComplete(ctx, nil) @@ -57,7 +57,7 @@ func (self *BaremetalServerSyncStatusTask) OnInit(ctx context.Context, obj db.IS func (self *BaremetalServerSyncStatusTask) OnGuestStatusTaskComplete(ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject) { var status string var hostStatus string - host := guest.GetHost() + host, _ := guest.GetHost() if data.Contains("status") { statusStr, _ := data.GetString("status") switch statusStr { diff --git a/pkg/compute/tasks/disk_base_task.go b/pkg/compute/tasks/disk_base_task.go index 847dd17284..ac35bb3778 100644 --- a/pkg/compute/tasks/disk_base_task.go +++ b/pkg/compute/tasks/disk_base_task.go @@ -47,7 +47,7 @@ func (self *SDiskBaseTask) finalReleasePendingUsage(ctx context.Context) { } func (self *SDiskBaseTask) CleanHostSchedCache(disk *models.SDisk) { - storage := disk.GetStorage() + storage, _ := disk.GetStorage() if storage == nil { return } diff --git a/pkg/compute/tasks/disk_create_task.go b/pkg/compute/tasks/disk_create_task.go index cb13eb082e..1b2834cff1 100644 --- a/pkg/compute/tasks/disk_create_task.go +++ b/pkg/compute/tasks/disk_create_task.go @@ -36,7 +36,8 @@ type DiskCreateTask struct { func (self *DiskCreateTask) OnInit(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { disk := obj.(*models.SDisk) - storagecache := disk.GetStorage().GetStoragecache() + storage, _ := disk.GetStorage() + storagecache := storage.GetStoragecache() imageId := disk.GetTemplateId() if len(imageId) > 0 { self.SetStage("OnStorageCacheImageComplete", nil) @@ -52,7 +53,7 @@ func (self *DiskCreateTask) OnStorageCacheImageComplete(ctx context.Context, dis if rebuild { db.OpsLog.LogEvent(disk, db.ACT_DELOCATE, disk.GetShortDesc(ctx), self.GetUserCred()) } - storage := disk.GetStorage() + storage, _ := disk.GetStorage() host := storage.GetMasterHost() db.OpsLog.LogEvent(disk, db.ACT_ALLOCATING, disk.GetShortDesc(ctx), self.GetUserCred()) disk.SetStatus(self.GetUserCred(), api.DISK_STARTALLOC, fmt.Sprintf("Disk start alloc use host %s(%s)", host.Name, host.Id)) diff --git a/pkg/compute/tasks/disk_delete_task.go b/pkg/compute/tasks/disk_delete_task.go index 81004f25f0..465dc62448 100644 --- a/pkg/compute/tasks/disk_delete_task.go +++ b/pkg/compute/tasks/disk_delete_task.go @@ -100,7 +100,7 @@ func (self *DiskDeleteTask) startDeleteDisk(ctx context.Context, disk *models.SD host *models.SHost ) - storage = disk.GetStorage() + storage, _ = disk.GetStorage() if storage == nil { // dirty data self.OnGuestDiskDeleteComplete(ctx, disk, nil) return diff --git a/pkg/compute/tasks/disk_reset_task.go b/pkg/compute/tasks/disk_reset_task.go index 1b084cff67..a45409ae00 100644 --- a/pkg/compute/tasks/disk_reset_task.go +++ b/pkg/compute/tasks/disk_reset_task.go @@ -102,7 +102,7 @@ func (self *DiskResetTask) OnStartGuest(ctx context.Context, disk *models.SDisk, func (self *DiskResetTask) OnInit(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { disk := obj.(*models.SDisk) - storage := disk.GetStorage() + storage, _ := disk.GetStorage() if storage == nil { self.TaskFailed(ctx, disk, fmt.Errorf("Disk storage not found")) return @@ -166,7 +166,7 @@ func (self *DiskCleanUpSnapshotsTask) StartCleanUpSnapshots(ctx context.Context, var host *models.SHost guests := disk.GetGuests() if len(guests) == 1 { - host = guests[0].GetHost() + host, _ = guests[0].GetHost() } else { self.SetStageFailed(ctx, jsonutils.NewString("Disk can't get guest")) return diff --git a/pkg/compute/tasks/disk_resize_task.go b/pkg/compute/tasks/disk_resize_task.go index 7f1b3ccdf2..02da8231a1 100644 --- a/pkg/compute/tasks/disk_resize_task.go +++ b/pkg/compute/tasks/disk_resize_task.go @@ -49,10 +49,10 @@ func (self *DiskResizeTask) OnInit(ctx context.Context, obj db.IStandaloneModel, disk := obj.(*models.SDisk) var host *models.SHost - storage := disk.GetStorage() + storage, _ := disk.GetStorage() guest := disk.GetGuest() if guest != nil { - host = guest.GetHost() + host, _ = guest.GetHost() } else { host = storage.GetMasterHost() } diff --git a/pkg/compute/tasks/disk_save_task.go b/pkg/compute/tasks/disk_save_task.go index 84e55eb9f3..d10659115d 100644 --- a/pkg/compute/tasks/disk_save_task.go +++ b/pkg/compute/tasks/disk_save_task.go @@ -39,8 +39,8 @@ func init() { func (self *DiskSaveTask) GetMasterHost(disk *models.SDisk) *models.SHost { if guests := disk.GetGuests(); len(guests) == 1 { - if host := guests[0].GetHost(); host == nil { - if storage := disk.GetStorage(); storage != nil { + if host, _ := guests[0].GetHost(); host == nil { + if storage, _ := disk.GetStorage(); storage != nil { return storage.GetMasterHost() } } else { diff --git a/pkg/compute/tasks/disk_syncstatus_task.go b/pkg/compute/tasks/disk_syncstatus_task.go index 88980c5f38..8aeb41f6b6 100644 --- a/pkg/compute/tasks/disk_syncstatus_task.go +++ b/pkg/compute/tasks/disk_syncstatus_task.go @@ -46,12 +46,12 @@ func (self *DiskSyncstatusTask) taskFailed(ctx context.Context, disk *models.SDi func (self *DiskSyncstatusTask) OnInit(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { disk := obj.(*models.SDisk) - storage := disk.GetStorage() + storage, _ := disk.GetStorage() if storage == nil { self.taskFailed(ctx, disk, fmt.Errorf("failed to found storage for disk %s", disk.Name)) return } - region := storage.GetRegion() + region, _ := storage.GetRegion() if region == nil { self.taskFailed(ctx, disk, fmt.Errorf("failed to found cloudregion for disk storage %s(%s)", disk.Name, disk.Id)) return diff --git a/pkg/compute/tasks/elasticcache_allocate_public_connection_task.go b/pkg/compute/tasks/elasticcache_allocate_public_connection_task.go index d5091fc6a3..d0bb0607c5 100644 --- a/pkg/compute/tasks/elasticcache_allocate_public_connection_task.go +++ b/pkg/compute/tasks/elasticcache_allocate_public_connection_task.go @@ -46,7 +46,7 @@ func (self *ElasticcacheAllocatePublicConnectionTask) taskFail(ctx context.Conte func (self *ElasticcacheAllocatePublicConnectionTask) OnInit(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { elasticcache := obj.(*models.SElasticcache) - region := elasticcache.GetRegion() + region, _ := elasticcache.GetRegion() if region == nil { self.taskFail(ctx, elasticcache, jsonutils.NewString(fmt.Sprintf("failed to find region for elastic cache %s", elasticcache.GetName()))) return diff --git a/pkg/compute/tasks/elasticcache_change_spec_task.go b/pkg/compute/tasks/elasticcache_change_spec_task.go index 5afec1f5da..566063c0dc 100644 --- a/pkg/compute/tasks/elasticcache_change_spec_task.go +++ b/pkg/compute/tasks/elasticcache_change_spec_task.go @@ -50,7 +50,7 @@ func (self *ElasticcacheChangeSpecTask) taskFail(ctx context.Context, ec *models func (self *ElasticcacheChangeSpecTask) OnInit(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { elasticcache := obj.(*models.SElasticcache) - region := elasticcache.GetRegion() + region, _ := elasticcache.GetRegion() if region == nil { self.taskFail(ctx, elasticcache, jsonutils.NewString(fmt.Sprintf("failed to find region for elastic cache %s", elasticcache.GetName()))) return diff --git a/pkg/compute/tasks/elasticcache_create_task.go b/pkg/compute/tasks/elasticcache_create_task.go index 7dc1fd489f..5f311f88c0 100644 --- a/pkg/compute/tasks/elasticcache_create_task.go +++ b/pkg/compute/tasks/elasticcache_create_task.go @@ -50,7 +50,7 @@ func (self *ElasticcacheCreateTask) taskFail(ctx context.Context, elasticcache * func (self *ElasticcacheCreateTask) OnInit(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { elasticcache := obj.(*models.SElasticcache) - region := elasticcache.GetRegion() + region, _ := elasticcache.GetRegion() if region == nil { self.taskFail(ctx, elasticcache, jsonutils.NewString(fmt.Sprintf("failed to find region for elastic cache %s", elasticcache.GetName()))) return @@ -84,7 +84,7 @@ func (self *ElasticcacheCreateTask) OnInit(ctx context.Context, obj db.IStandalo } func (self *ElasticcacheCreateTask) OnSyncSecurityGroupComplete(ctx context.Context, elasticcache *models.SElasticcache, data jsonutils.JSONObject) { - region := elasticcache.GetRegion() + region, _ := elasticcache.GetRegion() self.SetStage("OnElasticcacheCreateComplete", nil) if err := region.GetDriver().RequestCreateElasticcache(ctx, self.GetUserCred(), elasticcache, self, data.(*jsonutils.JSONDict)); err != nil { self.taskFail(ctx, elasticcache, jsonutils.NewString(err.Error())) diff --git a/pkg/compute/tasks/elasticcache_delete_task.go b/pkg/compute/tasks/elasticcache_delete_task.go index 68b586debd..da6d8d1b99 100644 --- a/pkg/compute/tasks/elasticcache_delete_task.go +++ b/pkg/compute/tasks/elasticcache_delete_task.go @@ -50,7 +50,7 @@ func (self *ElasticcacheDeleteTask) taskFail(ctx context.Context, elasticcache * func (self *ElasticcacheDeleteTask) OnInit(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { ec := obj.(*models.SElasticcache) - region := ec.GetRegion() + region, _ := ec.GetRegion() if region == nil { self.taskFail(ctx, ec, jsonutils.NewString(fmt.Sprintf("failed to find region for elastic cache %s", ec.GetName()))) return diff --git a/pkg/compute/tasks/elasticcache_flush_instance.go b/pkg/compute/tasks/elasticcache_flush_instance.go index 57fe53f780..c8cfaf4edd 100644 --- a/pkg/compute/tasks/elasticcache_flush_instance.go +++ b/pkg/compute/tasks/elasticcache_flush_instance.go @@ -46,7 +46,7 @@ func (self *ElasticcacheFlushInstanceTask) taskFail(ctx context.Context, elastic func (self *ElasticcacheFlushInstanceTask) OnInit(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { elasticcache := obj.(*models.SElasticcache) - region := elasticcache.GetRegion() + region, _ := elasticcache.GetRegion() if region == nil { self.taskFail(ctx, elasticcache, jsonutils.NewString(fmt.Sprintf("failed to find region for elastic cache %s", elasticcache.GetName()))) return diff --git a/pkg/compute/tasks/elasticcache_release_public_connection_task.go b/pkg/compute/tasks/elasticcache_release_public_connection_task.go index 3ef8e055d0..359742f0d2 100644 --- a/pkg/compute/tasks/elasticcache_release_public_connection_task.go +++ b/pkg/compute/tasks/elasticcache_release_public_connection_task.go @@ -46,7 +46,7 @@ func (self *ElasticcacheReleasePublicConnectionTask) taskFail(ctx context.Contex func (self *ElasticcacheReleasePublicConnectionTask) OnInit(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { elasticcache := obj.(*models.SElasticcache) - region := elasticcache.GetRegion() + region, _ := elasticcache.GetRegion() if region == nil { self.taskFail(ctx, elasticcache, jsonutils.NewString(fmt.Sprintf("failed to find region for elastic cache %s", elasticcache.GetName()))) return diff --git a/pkg/compute/tasks/elasticcache_remote_update_task.go b/pkg/compute/tasks/elasticcache_remote_update_task.go index 17d6acce65..dbf5e3091d 100644 --- a/pkg/compute/tasks/elasticcache_remote_update_task.go +++ b/pkg/compute/tasks/elasticcache_remote_update_task.go @@ -41,7 +41,7 @@ func (self *ElasticcacheRemoteUpdateTask) taskFail(ctx context.Context, elasticc func (self *ElasticcacheRemoteUpdateTask) OnInit(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { ec := obj.(*models.SElasticcache) - region := ec.GetRegion() + region, _ := ec.GetRegion() if region == nil { self.taskFail(ctx, ec, jsonutils.NewString(fmt.Sprintf("failed to find region for elastic cache %s", ec.GetName()))) return diff --git a/pkg/compute/tasks/elasticcache_renew_task.go b/pkg/compute/tasks/elasticcache_renew_task.go index 7978b56753..a144149f28 100644 --- a/pkg/compute/tasks/elasticcache_renew_task.go +++ b/pkg/compute/tasks/elasticcache_renew_task.go @@ -43,7 +43,8 @@ func (self *ElasticcacheRenewTask) OnInit(ctx context.Context, obj db.IStandalon durationStr, _ := self.GetParams().GetString("duration") bc, _ := billing.ParseBillingCycle(durationStr) - exp, err := instance.GetRegion().GetDriver().RequestRenewElasticcache(ctx, self.UserCred, instance, bc) + region, _ := instance.GetRegion() + exp, err := region.GetDriver().RequestRenewElasticcache(ctx, self.UserCred, instance, bc) if err != nil { db.OpsLog.LogEvent(instance, db.ACT_REW_FAIL, err, self.UserCred) logclient.AddActionLogWithStartable(self, instance, logclient.ACT_RENEW, err, self.UserCred, false) diff --git a/pkg/compute/tasks/elasticcache_restart_task.go b/pkg/compute/tasks/elasticcache_restart_task.go index 8e596124c8..9eaf3f0d4b 100644 --- a/pkg/compute/tasks/elasticcache_restart_task.go +++ b/pkg/compute/tasks/elasticcache_restart_task.go @@ -46,7 +46,7 @@ func (self *ElasticcacheRestartTask) taskFail(ctx context.Context, elasticcache func (self *ElasticcacheRestartTask) OnInit(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { ec := obj.(*models.SElasticcache) - region := ec.GetRegion() + region, _ := ec.GetRegion() if region == nil { self.taskFail(ctx, ec, jsonutils.NewString(fmt.Sprintf("failed to find region for elastic cache %s", ec.GetName()))) return diff --git a/pkg/compute/tasks/elasticcache_set_auto_renew_task.go b/pkg/compute/tasks/elasticcache_set_auto_renew_task.go index c2f18dc007..de30e066d1 100644 --- a/pkg/compute/tasks/elasticcache_set_auto_renew_task.go +++ b/pkg/compute/tasks/elasticcache_set_auto_renew_task.go @@ -38,7 +38,8 @@ func (self *ElasticcacheSetAutoRenewTask) OnInit(ctx context.Context, obj db.ISt ec := obj.(*models.SElasticcache) autoRenew, _ := self.GetParams().Bool("auto_renew") - err := ec.GetRegion().GetDriver().RequestElasticcacheSetAutoRenew(ctx, self.UserCred, ec, autoRenew, self) + region, _ := ec.GetRegion() + err := region.GetDriver().RequestElasticcacheSetAutoRenew(ctx, self.UserCred, ec, autoRenew, self) if err != nil { db.OpsLog.LogEvent(ec, db.ACT_SET_AUTO_RENEW_FAIL, err, self.UserCred) logclient.AddActionLogWithStartable(self, ec, logclient.ACT_SET_AUTO_RENEW, err, self.UserCred, false) diff --git a/pkg/compute/tasks/elasticcache_set_maintain_time_task.go b/pkg/compute/tasks/elasticcache_set_maintain_time_task.go index 746abe91c2..5047c434c9 100644 --- a/pkg/compute/tasks/elasticcache_set_maintain_time_task.go +++ b/pkg/compute/tasks/elasticcache_set_maintain_time_task.go @@ -46,7 +46,7 @@ func (self *ElasticcacheSetMaintainTimeTask) taskFail(ctx context.Context, elast func (self *ElasticcacheSetMaintainTimeTask) OnInit(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { elasticcache := obj.(*models.SElasticcache) - region := elasticcache.GetRegion() + region, _ := elasticcache.GetRegion() if region == nil { self.taskFail(ctx, elasticcache, jsonutils.NewString(fmt.Sprintf("failed to find region for elastic cache %s", elasticcache.GetName()))) return diff --git a/pkg/compute/tasks/elasticcache_sync_task.go b/pkg/compute/tasks/elasticcache_sync_task.go index b6e4db48e1..bed0958003 100644 --- a/pkg/compute/tasks/elasticcache_sync_task.go +++ b/pkg/compute/tasks/elasticcache_sync_task.go @@ -46,7 +46,7 @@ func (self *ElasticcacheSyncTask) taskFail(ctx context.Context, elasticcache *mo func (self *ElasticcacheSyncTask) OnInit(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { ec := obj.(*models.SElasticcache) - region := ec.GetRegion() + region, _ := ec.GetRegion() if region == nil { self.taskFail(ctx, ec, jsonutils.NewString(fmt.Sprintf("failed to find region for elastic cache %s", ec.GetName()))) return diff --git a/pkg/compute/tasks/elasticcache_syncsecgroups_task.go b/pkg/compute/tasks/elasticcache_syncsecgroups_task.go index 87d38b7757..c434febf42 100644 --- a/pkg/compute/tasks/elasticcache_syncsecgroups_task.go +++ b/pkg/compute/tasks/elasticcache_syncsecgroups_task.go @@ -45,7 +45,7 @@ func (self *ElasticcacheSyncsecgroupsTask) taskFailed(ctx context.Context, cache func (self *ElasticcacheSyncsecgroupsTask) OnInit(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { cache := obj.(*models.SElasticcache) - region := cache.GetRegion() + region, _ := cache.GetRegion() if region == nil { self.taskFailed(ctx, cache, jsonutils.NewString(fmt.Sprintf("failed to found cloudregion for elasticcache %s(%s)", cache.Name, cache.Id))) return diff --git a/pkg/compute/tasks/elasticcache_syncstatus_task.go b/pkg/compute/tasks/elasticcache_syncstatus_task.go index a075a83da2..d1501f26b5 100644 --- a/pkg/compute/tasks/elasticcache_syncstatus_task.go +++ b/pkg/compute/tasks/elasticcache_syncstatus_task.go @@ -51,7 +51,7 @@ func (self *ElasticcacheSyncstatusTask) taskFailed(ctx context.Context, cache *m func (self *ElasticcacheSyncstatusTask) OnInit(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { cache := obj.(*models.SElasticcache) - region := cache.GetRegion() + region, _ := cache.GetRegion() if region == nil { self.taskFailed(ctx, cache, jsonutils.NewString(fmt.Sprintf("failed to found cloudregion for elasticcache %s(%s)", cache.Name, cache.Id))) return diff --git a/pkg/compute/tasks/elasticcache_update_auth_mode_task.go b/pkg/compute/tasks/elasticcache_update_auth_mode_task.go index 33c9197e08..a8bf3f4393 100644 --- a/pkg/compute/tasks/elasticcache_update_auth_mode_task.go +++ b/pkg/compute/tasks/elasticcache_update_auth_mode_task.go @@ -46,7 +46,7 @@ func (self *ElasticcacheUpdateAuthModeTask) taskFail(ctx context.Context, elasti func (self *ElasticcacheUpdateAuthModeTask) OnInit(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { elasticcache := obj.(*models.SElasticcache) - region := elasticcache.GetRegion() + region, _ := elasticcache.GetRegion() if region == nil { self.taskFail(ctx, elasticcache, jsonutils.Marshal(fmt.Sprintf("failed to find region for elastic cache %s", elasticcache.GetName()))) return diff --git a/pkg/compute/tasks/elasticcache_update_backup_policy_task.go b/pkg/compute/tasks/elasticcache_update_backup_policy_task.go index 4c89fc4b02..5ad5979271 100644 --- a/pkg/compute/tasks/elasticcache_update_backup_policy_task.go +++ b/pkg/compute/tasks/elasticcache_update_backup_policy_task.go @@ -46,7 +46,7 @@ func (self *ElasticcacheUpdateBackupPolicyTask) taskFail(ctx context.Context, el func (self *ElasticcacheUpdateBackupPolicyTask) OnInit(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { elasticcache := obj.(*models.SElasticcache) - region := elasticcache.GetRegion() + region, _ := elasticcache.GetRegion() if region == nil { self.taskFail(ctx, elasticcache, jsonutils.Marshal(fmt.Sprintf("failed to find region for elastic cache %s", elasticcache.GetName()))) return diff --git a/pkg/compute/tasks/filesystem_create_task.go b/pkg/compute/tasks/filesystem_create_task.go index 80ceb81d15..e382ec697c 100644 --- a/pkg/compute/tasks/filesystem_create_task.go +++ b/pkg/compute/tasks/filesystem_create_task.go @@ -68,6 +68,8 @@ func (self *FileSystemCreateTask) OnInit(ctx context.Context, obj db.IStandalone return } + zone, _ := fs.GetZone() + opts := &cloudprovider.FileSystemCraeteOptions{ Name: fs.Name, Desc: fs.Description, @@ -75,7 +77,7 @@ func (self *FileSystemCreateTask) OnInit(ctx context.Context, obj db.IStandalone StorageType: fs.StorageType, Protocol: fs.Protocol, FileSystemType: fs.FileSystemType, - ZoneId: strings.TrimPrefix(fs.GetZone().ExternalId, iRegion.GetGlobalId()+"/"), + ZoneId: strings.TrimPrefix(zone.ExternalId, iRegion.GetGlobalId()+"/"), } netId := jsonutils.GetAnyString(self.GetParams(), []string{"network_id"}) @@ -87,7 +89,8 @@ func (self *FileSystemCreateTask) OnInit(ctx context.Context, obj db.IStandalone } network := net.(*models.SNetwork) opts.NetworkId = network.ExternalId - opts.VpcId = network.GetVpc().ExternalId + vpc, _ := network.GetVpc() + opts.VpcId = vpc.ExternalId } log.Infof("nas create params: %s", jsonutils.Marshal(opts).String()) diff --git a/pkg/compute/tasks/guest_backup_tasks.go b/pkg/compute/tasks/guest_backup_tasks.go index 09349406fd..486b4b6cbd 100644 --- a/pkg/compute/tasks/guest_backup_tasks.go +++ b/pkg/compute/tasks/guest_backup_tasks.go @@ -43,7 +43,7 @@ type GuestSwitchToBackupTask struct { */ func (self *GuestSwitchToBackupTask) OnInit(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { guest := obj.(*models.SGuest) - host := guest.GetHost() + host, _ := guest.GetHost() self.Params.Set("is_force", jsonutils.JSONTrue) self.SetStage("OnEnsureMasterGuestStoped", nil) err := guest.GetDriver().RequestStopOnHost(ctx, guest, host, self) diff --git a/pkg/compute/tasks/guest_batch_create_task.go b/pkg/compute/tasks/guest_batch_create_task.go index 1c18e4f324..83e58619bb 100644 --- a/pkg/compute/tasks/guest_batch_create_task.go +++ b/pkg/compute/tasks/guest_batch_create_task.go @@ -138,7 +138,7 @@ func (self *GuestBatchCreateTask) allocateGuestOnHost(ctx context.Context, guest } } - host := guest.GetHost() + host, _ := guest.GetHost() quotaCpuMem := models.SQuota{Count: 1, Cpu: int(guest.VcpuCount), Memory: guest.VmemSize} keys, err := guest.GetQuotaKeys() diff --git a/pkg/compute/tasks/guest_block_io_throttle_task.go b/pkg/compute/tasks/guest_block_io_throttle_task.go index ac464fd93c..9618af9dbd 100644 --- a/pkg/compute/tasks/guest_block_io_throttle_task.go +++ b/pkg/compute/tasks/guest_block_io_throttle_task.go @@ -39,7 +39,7 @@ func (self *GuestBlockIoThrottleTask) OnInit(ctx context.Context, obj db.IStanda guest := obj.(*models.SGuest) url := fmt.Sprintf("/servers/%s/io-throttle", guest.Id) headers := self.GetTaskRequestHeader() - host := guest.GetHost() + host, _ := guest.GetHost() self.SetStage("OnIoThrottle", nil) params := jsonutils.NewDict() diff --git a/pkg/compute/tasks/guest_change_config_task.go b/pkg/compute/tasks/guest_change_config_task.go index 366f359943..95e8b89fc5 100644 --- a/pkg/compute/tasks/guest_change_config_task.go +++ b/pkg/compute/tasks/guest_change_config_task.go @@ -176,7 +176,8 @@ func (self *GuestChangeConfigTask) DoCreateDisksTask(ctx context.Context, guest self.OnCreateDisksComplete(ctx, guest, nil) return } - err = guest.CreateDisksOnHost(ctx, self.UserCred, guest.GetHost(), disks, nil, false, false, nil, nil, false) + host, _ := guest.GetHost() + err = guest.CreateDisksOnHost(ctx, self.UserCred, host, disks, nil, false, false, nil, nil, false) if err != nil { self.markStageFailed(ctx, guest, jsonutils.NewString(err.Error())) return diff --git a/pkg/compute/tasks/guest_convert_esxi_to_kvm_task.go b/pkg/compute/tasks/guest_convert_esxi_to_kvm_task.go index cc9d689806..e0599cd5f6 100644 --- a/pkg/compute/tasks/guest_convert_esxi_to_kvm_task.go +++ b/pkg/compute/tasks/guest_convert_esxi_to_kvm_task.go @@ -78,7 +78,7 @@ func (self *GuestConvertEsxiToKvmTask) taskFailed(ctx context.Context, guest *mo func (self *GuestConvertEsxiToKvmTask) GenerateEsxiAcceessInfo(guest *models.SGuest) (*jsonutils.JSONDict, error) { ret := jsonutils.NewDict() - host := guest.GetHost() + host, _ := guest.GetHost() accessInfo, err := host.GetCloudaccount().GetVCenterAccessInfo("") if err != nil { return nil, err @@ -113,7 +113,7 @@ func (self *GuestConvertEsxiToKvmTask) SaveScheduleResult(ctx context.Context, o self.taskFailed(ctx, guest, jsonutils.NewString(fmt.Sprintf("guest set metadata %s", err))) return } - host := targetGuest.GetHost() + host, _ := targetGuest.GetHost() //pendingUsage := models.SQuota{} input := guest.ToCreateInput(self.UserCred) @@ -136,7 +136,7 @@ func (self *GuestConvertEsxiToKvmTask) SaveScheduleResult(ctx context.Context, o func (self *GuestConvertEsxiToKvmTask) RequestHostCreateGuestFromEsxi( ctx context.Context, guest *models.SGuest, esxiAccessInfo *jsonutils.JSONDict, ) error { - host := guest.GetHost() + host, _ := guest.GetHost() params := jsonutils.NewDict() params.Set("desc", guest.GetJsonDescAtHypervisor(ctx, host)) params.Set("esxi_access_info", esxiAccessInfo) diff --git a/pkg/compute/tasks/guest_create_disk_task.go b/pkg/compute/tasks/guest_create_disk_task.go index 2e71a15653..2240c542ff 100644 --- a/pkg/compute/tasks/guest_create_disk_task.go +++ b/pkg/compute/tasks/guest_create_disk_task.go @@ -252,7 +252,7 @@ type ESXiGuestCreateDiskTask struct { func (self *ESXiGuestCreateDiskTask) OnInit(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { guest := obj.(*models.SGuest) - host := guest.GetHost() + host, _ := guest.GetHost() if host == nil { self.SetStageFailed(ctx, jsonutils.NewString("no valid host")) return @@ -317,7 +317,8 @@ func (self *ESXiGuestCreateDiskTask) OnInit(ctx context.Context, obj db.IStandal } disk.SetStatus(self.UserCred, api.DISK_READY, "create disk success") - disk.GetStorage().ClearSchedDescCache() + storage, _ := disk.GetStorage() + storage.ClearSchedDescCache() db.OpsLog.LogEvent(disk, db.ACT_ALLOCATE, disk.GetShortDesc(ctx), self.UserCred) db.OpsLog.LogAttachEvent(ctx, guest, disk, self.UserCred, disk.GetShortDesc(ctx)) } diff --git a/pkg/compute/tasks/guest_delete_task.go b/pkg/compute/tasks/guest_delete_task.go index aa68303170..991a62dc1c 100644 --- a/pkg/compute/tasks/guest_delete_task.go +++ b/pkg/compute/tasks/guest_delete_task.go @@ -45,7 +45,7 @@ func init() { func (self *GuestDeleteTask) OnInit(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { guest := obj.(*models.SGuest) - host := guest.GetHost() + host, _ := guest.GetHost() if guest.Hypervisor == api.HYPERVISOR_BAREMETAL && host != nil && host.HostType != api.HOST_TYPE_BAREMETAL { // if a fake server for converted hypervisor, then just skip stop self.OnGuestStopComplete(ctx, guest, data) @@ -284,7 +284,7 @@ func (self *GuestDeleteTask) OnGuestDetachDisksCompleteFailed(ctx context.Contex func (self *GuestDeleteTask) DoDeleteGuest(ctx context.Context, guest *models.SGuest) { models.IsolatedDeviceManager.ReleaseDevicesOfGuest(ctx, guest, self.UserCred) - host := guest.GetHost() + host, _ := guest.GetHost() if guest.IsPrepaidRecycle() { err := host.BorrowIpAddrsFromGuest(ctx, self.UserCred, guest) if err != nil { diff --git a/pkg/compute/tasks/guest_detach_all_disks_task.go b/pkg/compute/tasks/guest_detach_all_disks_task.go index 5c6cd32497..1bc814cd7a 100644 --- a/pkg/compute/tasks/guest_detach_all_disks_task.go +++ b/pkg/compute/tasks/guest_detach_all_disks_task.go @@ -48,7 +48,7 @@ func (self *GuestDetachAllDisksTask) OnDiskDeleteComplete(ctx context.Context, o self.SetStageComplete(ctx, nil) return } - host := guest.GetHost() + host, _ := guest.GetHost() purge := false if (host == nil || !host.GetEnabled()) && jsonutils.QueryBoolean(self.Params, "purge", false) { purge = true diff --git a/pkg/compute/tasks/guest_detach_disk_task.go b/pkg/compute/tasks/guest_detach_disk_task.go index 6d25cf5eb1..d57f5d060d 100644 --- a/pkg/compute/tasks/guest_detach_disk_task.go +++ b/pkg/compute/tasks/guest_detach_disk_task.go @@ -54,7 +54,7 @@ func (self *GuestDetachDiskTask) OnInit(ctx context.Context, obj db.IStandaloneM } guest.DetachDisk(ctx, disk, self.UserCred) - host := guest.GetHost() + host, _ := guest.GetHost() if host != nil && !host.GetEnabled() && jsonutils.QueryBoolean(self.Params, "purge", false) { self.OnDetachDiskComplete(ctx, guest, nil) return @@ -82,7 +82,7 @@ func (self *GuestDetachDiskTask) OnDetachDiskComplete(ctx context.Context, guest disk := objDisk.(*models.SDisk) disk.SetStatus(self.UserCred, api.DISK_READY, "on detach disk complete") keepDisk := jsonutils.QueryBoolean(self.Params, "keep_disk", true) - host := guest.GetHost() + host, _ := guest.GetHost() purge := false if host != nil && !host.GetEnabled() && jsonutils.QueryBoolean(self.Params, "purge", false) { purge = true diff --git a/pkg/compute/tasks/guest_insert_iso_task.go b/pkg/compute/tasks/guest_insert_iso_task.go index 91011ef91e..ff1e736867 100644 --- a/pkg/compute/tasks/guest_insert_iso_task.go +++ b/pkg/compute/tasks/guest_insert_iso_task.go @@ -44,7 +44,7 @@ func (self *GuestInsertIsoTask) prepareIsoImage(ctx context.Context, obj db.ISta disks := guest.GetDisks() disk := disks[0].GetDisk() - storage := disk.GetStorage() + storage, _ := disk.GetStorage() storageCache := storage.GetStoragecache() if storageCache != nil { diff --git a/pkg/compute/tasks/guest_live_migrate_task.go b/pkg/compute/tasks/guest_live_migrate_task.go index 525705c48e..31c2a99191 100644 --- a/pkg/compute/tasks/guest_live_migrate_task.go +++ b/pkg/compute/tasks/guest_live_migrate_task.go @@ -105,14 +105,15 @@ func (self *GuestMigrateTask) SaveScheduleResult(ctx context.Context, obj ISched disks := guest.GetDisks() disk := disks[0].GetDisk() - isLocalStorage := utils.IsInStringArray(disk.GetStorage().StorageType, + storage, _ := disk.GetStorage() + isLocalStorage := utils.IsInStringArray(storage.StorageType, api.STORAGE_LOCAL_TYPES) if isLocalStorage { targetStorages := jsonutils.NewArray() for i := 0; i < len(disks); i++ { var targetStroage string if len(target.Disks[i].StorageIds) == 0 { - targetStroage = targetHost.GetLeastUsedStorage(disk.GetStorage().StorageType).Id + targetStroage = targetHost.GetLeastUsedStorage(storage.StorageType).Id } else { targetStroage = target.Disks[i].StorageIds[0] } @@ -168,7 +169,7 @@ func (self *GuestMigrateTask) OnCachedCdromComplete(ctx context.Context, guest * } if !jsonutils.QueryBoolean(self.Params, "is_rescue_mode", false) { - host := guest.GetHost() + host, _ := guest.GetHost() url := fmt.Sprintf("%s/servers/%s/src-prepare-migrate", host.ManagerUri, guest.Id) self.SetStage("OnSrcPrepareComplete", nil) _, _, err := httputils.JSONRequest(httputils.GetDefaultClient(), ctx, "POST", @@ -302,7 +303,7 @@ func (self *GuestMigrateTask) localStorageMigrateConf(ctx context.Context, params.Set(disks[i].DiskId, snapshotIds) } - sourceHost := guest.GetHost() + sourceHost, _ := guest.GetHost() snapshotsUri := fmt.Sprintf("%s/download/snapshots/", sourceHost.ManagerUri) disksUri := fmt.Sprintf("%s/download/disks/", sourceHost.ManagerUri) serverUrl := fmt.Sprintf("%s/download/servers/%s", sourceHost.ManagerUri, guest.Id) @@ -353,7 +354,7 @@ func (self *GuestLiveMigrateTask) OnStartDestComplete(ctx context.Context, guest headers := self.GetTaskRequestHeader() - host := guest.GetHost() + host, _ := guest.GetHost() url := fmt.Sprintf("%s/servers/%s/live-migrate", host.ManagerUri, guest.Id) self.SetStage("OnLiveMigrateComplete", nil) _, _, err = httputils.JSONRequest(httputils.GetDefaultClient(), @@ -390,7 +391,7 @@ func (self *GuestMigrateTask) setGuest(ctx context.Context, guest *models.SGuest } } } - oldHost := guest.GetHost() + oldHost, _ := guest.GetHost() oldHost.ClearSchedDescCache() err := guest.OnScheduleToHost(ctx, self.UserCred, targetHostId) if err != nil { diff --git a/pkg/compute/tasks/guest_start_task.go b/pkg/compute/tasks/guest_start_task.go index 982ece33c2..0882b5124e 100644 --- a/pkg/compute/tasks/guest_start_task.go +++ b/pkg/compute/tasks/guest_start_task.go @@ -43,7 +43,7 @@ func (self *GuestStartTask) OnInit(ctx context.Context, obj db.IStandaloneModel, func (self *GuestStartTask) RequestStart(ctx context.Context, guest *models.SGuest) { self.SetStage("OnStartComplete", nil) - host := guest.GetHost() + host, _ := guest.GetHost() guest.SetStatus(self.UserCred, api.VM_STARTING, "") result, err := guest.GetDriver().RequestStartOnHost(ctx, guest, host, self.UserCred, self) if err != nil { @@ -98,7 +98,7 @@ func (self *GuestSchedStartTask) OnInit(ctx context.Context, obj db.IStandaloneM } func (self *GuestSchedStartTask) StartScheduler(ctx context.Context, guest *models.SGuest) { - host := guest.GetHost() + host, _ := guest.GetHost() if guestsMem := host.GetRunningGuestMemorySize(); guestsMem < 0 { self.TaskFailed(ctx, guest, jsonutils.NewString("Guest Start Failed: Can't Get Host Guests Memory")) } else { diff --git a/pkg/compute/tasks/guest_stop_task.go b/pkg/compute/tasks/guest_stop_task.go index 7093129250..109d2198fd 100644 --- a/pkg/compute/tasks/guest_stop_task.go +++ b/pkg/compute/tasks/guest_stop_task.go @@ -44,7 +44,7 @@ func (self *GuestStopTask) OnInit(ctx context.Context, obj db.IStandaloneModel, } func (self *GuestStopTask) stopGuest(ctx context.Context, guest *models.SGuest) { - host := guest.GetHost() + host, _ := guest.GetHost() if host == nil { self.OnGuestStopTaskCompleteFailed(ctx, guest, jsonutils.NewString("no associated host")) return diff --git a/pkg/compute/tasks/guest_sync_task.go b/pkg/compute/tasks/guest_sync_task.go index 886fcb26dd..d8cc3ddb33 100644 --- a/pkg/compute/tasks/guest_sync_task.go +++ b/pkg/compute/tasks/guest_sync_task.go @@ -38,7 +38,7 @@ func init() { func (self *GuestSyncConfTask) OnInit(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { guest := obj.(*models.SGuest) db.OpsLog.LogEvent(guest, db.ACT_SYNC_CONF, nil, self.UserCred) - if host := guest.GetHost(); host == nil { + if host, _ := guest.GetHost(); host == nil { self.SetStageFailed(ctx, jsonutils.NewString("No host for sync")) return } else { diff --git a/pkg/compute/tasks/guest_syncstatus_task.go b/pkg/compute/tasks/guest_syncstatus_task.go index ac36923d4e..2bb9fe45de 100644 --- a/pkg/compute/tasks/guest_syncstatus_task.go +++ b/pkg/compute/tasks/guest_syncstatus_task.go @@ -38,7 +38,7 @@ func init() { func (self *GuestSyncstatusTask) OnInit(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { guest := obj.(*models.SGuest) - host := guest.GetHost() + host, _ := guest.GetHost() if host == nil || host.HostStatus == api.HOST_OFFLINE { log.Errorf("host is not reachable") guest.SetStatus(self.UserCred, api.VM_UNKNOWN, "Host not responding") diff --git a/pkg/compute/tasks/ha_guest_deploy_task.go b/pkg/compute/tasks/ha_guest_deploy_task.go index 91ece3cafb..3d6d7e3c5b 100644 --- a/pkg/compute/tasks/ha_guest_deploy_task.go +++ b/pkg/compute/tasks/ha_guest_deploy_task.go @@ -57,7 +57,7 @@ func (self *HAGuestDeployTask) DeployBackup(ctx context.Context, guest *models.S func (self *HAGuestDeployTask) OnDeploySlaveGuestComplete( ctx context.Context, guest *models.SGuest, data jsonutils.JSONObject, ) { - host := guest.GetHost() + host, _ := guest.GetHost() self.SetStage("OnDeployGuestComplete", nil) self.DeployOnHost(ctx, guest, host) } diff --git a/pkg/compute/tasks/natdentry_create_task.go b/pkg/compute/tasks/natdentry_create_task.go index 56f701c8b4..a4b805036e 100644 --- a/pkg/compute/tasks/natdentry_create_task.go +++ b/pkg/compute/tasks/natdentry_create_task.go @@ -69,7 +69,8 @@ func (self *SNatDEntryCreateTask) OnInit(ctx context.Context, obj db.IStandalone } self.SetStage("OnAssociateEipComplete", nil) - err = nat.GetRegion().GetDriver().RequestAssociateEipForNAT(ctx, self.GetUserCred(), nat, eip, self) + region, _ := nat.GetRegion() + err = region.GetDriver().RequestAssociateEipForNAT(ctx, self.GetUserCred(), nat, eip, self) if err != nil { self.taskFailed(ctx, dnat, errors.Wrapf(err, "RequestBindIPToNatgateway")) return diff --git a/pkg/compute/tasks/natdentry_delete_task.go b/pkg/compute/tasks/natdentry_delete_task.go index ddc524cd90..df2a01c73a 100644 --- a/pkg/compute/tasks/natdentry_delete_task.go +++ b/pkg/compute/tasks/natdentry_delete_task.go @@ -99,7 +99,8 @@ func (self *SNatDEntryDeleteTask) OnInit(ctx context.Context, obj db.IStandalone eip, _ := dnat.GetEip() if eip != nil { - nat.GetRegion().GetDriver().OnNatEntryDeleteComplete(ctx, self.UserCred, eip) + region, _ := nat.GetRegion() + region.GetDriver().OnNatEntryDeleteComplete(ctx, self.UserCred, eip) } self.taskComplete(ctx, dnat) diff --git a/pkg/compute/tasks/natgateway_syncstatus_task.go b/pkg/compute/tasks/natgateway_syncstatus_task.go index cf7fd564ee..97a0553bd6 100644 --- a/pkg/compute/tasks/natgateway_syncstatus_task.go +++ b/pkg/compute/tasks/natgateway_syncstatus_task.go @@ -45,7 +45,7 @@ func (self *NatGatewaySyncstatusTask) taskFailed(ctx context.Context, natgateway func (self *NatGatewaySyncstatusTask) OnInit(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { natgateway := obj.(*models.SNatGateway) - region := natgateway.GetRegion() + region, _ := natgateway.GetRegion() if region == nil { self.taskFailed(ctx, natgateway, jsonutils.NewString(fmt.Sprintf("failed to found cloudregion for natgateway %s(%s)", natgateway.Name, natgateway.Id))) return diff --git a/pkg/compute/tasks/natsentry_create_task.go b/pkg/compute/tasks/natsentry_create_task.go index d2abb55b81..375109d0d0 100644 --- a/pkg/compute/tasks/natsentry_create_task.go +++ b/pkg/compute/tasks/natsentry_create_task.go @@ -69,7 +69,8 @@ func (self *SNatSEntryCreateTask) OnInit(ctx context.Context, obj db.IStandalone } self.SetStage("OnAssociateEipComplete", nil) - err = nat.GetRegion().GetDriver().RequestAssociateEipForNAT(ctx, self.GetUserCred(), nat, eip, self) + region, _ := nat.GetRegion() + err = region.GetDriver().RequestAssociateEipForNAT(ctx, self.GetUserCred(), nat, eip, self) if err != nil { self.taskFailed(ctx, snat, errors.Wrapf(err, "RequestAssociateEipForNAT")) return diff --git a/pkg/compute/tasks/natsentry_delete_task.go b/pkg/compute/tasks/natsentry_delete_task.go index d927e5f037..909a359e3c 100644 --- a/pkg/compute/tasks/natsentry_delete_task.go +++ b/pkg/compute/tasks/natsentry_delete_task.go @@ -101,7 +101,8 @@ func (self *SNatSEntryDeleteTask) OnInit(ctx context.Context, obj db.IStandalone eip, _ := snat.GetEip() if eip != nil { - nat.GetRegion().GetDriver().OnNatEntryDeleteComplete(ctx, self.UserCred, eip) + region, _ := nat.GetRegion() + region.GetDriver().OnNatEntryDeleteComplete(ctx, self.UserCred, eip) } self.taskComplete(ctx, snat) diff --git a/pkg/compute/tasks/network_create_task.go b/pkg/compute/tasks/network_create_task.go index 8bf7dc4717..9efc6a628d 100644 --- a/pkg/compute/tasks/network_create_task.go +++ b/pkg/compute/tasks/network_create_task.go @@ -55,7 +55,7 @@ func (self *NetworkCreateTask) OnInit(ctx context.Context, obj db.IStandaloneMod network.SetStatus(self.UserCred, api.NETWORK_STATUS_PENDING, "") - wire := network.GetWire() + wire, _ := network.GetWire() if wire == nil { self.taskFailed(ctx, network, "getwire", fmt.Errorf("no vpc")) return diff --git a/pkg/compute/tasks/route_table_syncstatus_task.go b/pkg/compute/tasks/route_table_syncstatus_task.go index b735d9dc46..69416acf9c 100644 --- a/pkg/compute/tasks/route_table_syncstatus_task.go +++ b/pkg/compute/tasks/route_table_syncstatus_task.go @@ -49,7 +49,7 @@ func (self *RouteTableSyncStatusTask) taskComplete(ctx context.Context, routeTab func (self *RouteTableSyncStatusTask) OnInit(ctx context.Context, obj db.IStandaloneModel, data jsonutils.JSONObject) { routeTable := obj.(*models.SRouteTable) - vpc := routeTable.GetVpc() + vpc, _ := routeTable.GetVpc() iRouteTable, err := routeTable.GetICloudRouteTable() if err != nil { self.taskFailed(ctx, routeTable, errors.Wrapf(err, "routeTable.GetICloudRouteTable()")) diff --git a/pkg/compute/tasks/snapshotpolicy_disk_task.go b/pkg/compute/tasks/snapshotpolicy_disk_task.go index 7c88500b72..cf72c7ffe0 100644 --- a/pkg/compute/tasks/snapshotpolicy_disk_task.go +++ b/pkg/compute/tasks/snapshotpolicy_disk_task.go @@ -80,7 +80,9 @@ func (self *SnapshotPolicyApplyTask) OnInit(ctx context.Context, obj db.IStandal self.SetStage("OnPreSnapshotPolicyApplyComplete", nil) // pass data to next Stage without inserting database through this way - if err := disk.GetStorage().GetRegion().GetDriver().RequestPreSnapshotPolicyApply(ctx, self.UserCred, self, disk, snapshotPolicy, + storage, _ := disk.GetStorage() + region, _ := storage.GetRegion() + if err := region.GetDriver().RequestPreSnapshotPolicyApply(ctx, self.UserCred, self, disk, snapshotPolicy, data); err != nil { self.taskFail(ctx, disk, &spd, jsonutils.NewString(err.Error())) @@ -122,7 +124,9 @@ func (self *SnapshotPolicyApplyTask) OnPreSnapshotPolicyApplyComplete(ctx contex self.SetStage("OnSnapshotPolicyApply", nil) // pass data to next Stage without inserting database through this way - if err := disk.GetStorage().GetRegion().GetDriver(). + storage, _ := disk.GetStorage() + region, _ := storage.GetRegion() + if err := region.GetDriver(). RequestApplySnapshotPolicy(ctx, self.UserCred, self, disk, &snapshotPolicy, data); err != nil { self.taskFail(ctx, disk, &spd, jsonutils.NewString(err.Error())) @@ -195,7 +199,9 @@ func (self *SnapshotPolicyCancelTask) OnInit(ctx context.Context, obj db.IStanda } snapshotPolicy := model.(*models.SSnapshotPolicy) self.SetStage("OnSnapshotPolicyCancel", nil) - if err := disk.GetStorage().GetRegion().GetDriver().RequestCancelSnapshotPolicy(ctx, self.UserCred, self, disk, snapshotPolicy, data); err != nil { + storage, _ := disk.GetStorage() + region, _ := storage.GetRegion() + if err := region.GetDriver().RequestCancelSnapshotPolicy(ctx, self.UserCred, self, disk, snapshotPolicy, data); err != nil { self.taskFail(ctx, disk, &spd, jsonutils.NewString(err.Error())) // fmt.Sprintf("faile to detach snapshot policy %s and disk %s: %s", snapshotPolicy.Id, disk.Id, err.Error())) diff --git a/pkg/scheduler/algorithm/predicates/cloudregion_schedtag_predicate.go b/pkg/scheduler/algorithm/predicates/cloudregion_schedtag_predicate.go index 0118020304..00ac1b2ab4 100644 --- a/pkg/scheduler/algorithm/predicates/cloudregion_schedtag_predicate.go +++ b/pkg/scheduler/algorithm/predicates/cloudregion_schedtag_predicate.go @@ -83,7 +83,7 @@ func (p *CloudregionSchedtagPredicate) GetCandidateResource(c core.Candidater) I if zone == nil { return nil } - region := zone.GetRegion() + region, _ := zone.GetRegion() if region == nil { return nil } diff --git a/pkg/scheduler/algorithm/predicates/network_predicate.go b/pkg/scheduler/algorithm/predicates/network_predicate.go index 390936a86e..d5ae981141 100644 --- a/pkg/scheduler/algorithm/predicates/network_predicate.go +++ b/pkg/scheduler/algorithm/predicates/network_predicate.go @@ -185,10 +185,13 @@ func IsNetworkAvailable( } } - if wire != "" && !utils.HasPrefix(wire, n.WireId) && !utils.HasPrefix(wire, n.GetWire().GetName()) { - return FailReason{ - Reason: fmt.Sprintf("Wire %s != %s", wire, n.WireId), - Type: NetworkWire, + if wire != "" && !utils.HasPrefix(wire, n.WireId) { + _wire, _ := n.GetWire() + if !utils.HasPrefix(wire, _wire.GetName()) { + return FailReason{ + Reason: fmt.Sprintf("Wire %s != %s", wire, n.WireId), + Type: NetworkWire, + } } } diff --git a/pkg/scheduler/cache/candidate/base.go b/pkg/scheduler/cache/candidate/base.go index b797a18efb..b9ee27d483 100644 --- a/pkg/scheduler/cache/candidate/base.go +++ b/pkg/scheduler/cache/candidate/base.go @@ -476,12 +476,12 @@ func (b *BaseHostDesc) fillCloudProvider(host *computemodels.SHost) error { } func (b *BaseHostDesc) fillRegion(host *computemodels.SHost) error { - b.Region = host.GetRegion() + b.Region, _ = host.GetRegion() return nil } func (b *BaseHostDesc) fillZone(host *computemodels.SHost) error { - zone := host.GetZone() + zone, _ := host.GetZone() b.Zone = zone b.ZoneId = host.ZoneId return nil