diff --git a/pkg/cloudcommon/db/virtualresource.go b/pkg/cloudcommon/db/virtualresource.go index 531b782673..e5e623c1e0 100644 --- a/pkg/cloudcommon/db/virtualresource.go +++ b/pkg/cloudcommon/db/virtualresource.go @@ -17,6 +17,11 @@ import ( "yunion.io/x/onecloud/pkg/util/logclient" ) +const ( + PROJECT_SOURCE_LOCAL = "local" + PROJECT_SOURCE_CLOUD = "cloud" +) + type SVirtualResourceBaseManager struct { SStatusStandaloneResourceBaseManager } @@ -29,7 +34,8 @@ func NewVirtualResourceBaseManager(dt interface{}, tableName string, keyword str type SVirtualResourceBase struct { SStatusStandaloneResourceBase - ProjectId string `name:"tenant_id" width:"128" charset:"ascii" nullable:"false" index:"true" list:"user"` + ProjectId string `name:"tenant_id" width:"128" charset:"ascii" nullable:"false" index:"true" list:"user"` + ProjectSource string `width:"128" charset:"ascii" nullable:"false" list:"user" get:"user" default:"cloud"` IsSystem bool `nullable:"true" default:"false" list:"admin" create:"optional"` @@ -227,6 +233,7 @@ func (model *SVirtualResourceBase) PerformChangeOwner(ctx context.Context, userC } _, err := model.GetModelManager().TableSpec().Update(model, func() error { model.ProjectId = tobj.GetId() + model.ProjectSource = PROJECT_SOURCE_LOCAL return nil }) if err != nil { diff --git a/pkg/cloudprovider/resources.go b/pkg/cloudprovider/resources.go index 049e11f5c5..6f1c4f849d 100644 --- a/pkg/cloudprovider/resources.go +++ b/pkg/cloudprovider/resources.go @@ -25,6 +25,10 @@ type ICloudResource interface { GetMetadata() *jsonutils.JSONDict } +type IVirtualResource interface { + GetProjectId() string +} + type IBillingResource interface { GetBillingType() string GetExpiredAt() time.Time @@ -191,6 +195,7 @@ type ICloudHost interface { type ICloudVM interface { ICloudResource IBillingResource + IVirtualResource GetCreateTime() time.Time GetIHost() ICloudHost @@ -255,6 +260,7 @@ type ICloudNic interface { type ICloudEIP interface { ICloudResource IBillingResource + IVirtualResource GetIpAddr() string GetMode() string @@ -304,6 +310,7 @@ type ICloudRoute interface { type ICloudDisk interface { ICloudResource IBillingResource + IVirtualResource GetIStorage() (ICloudStorage, error) @@ -336,6 +343,8 @@ type ICloudDisk interface { type ICloudSnapshot interface { ICloudResource + IVirtualResource + GetSize() int32 GetDiskId() string GetDiskType() string diff --git a/pkg/compute/models/disks.go b/pkg/compute/models/disks.go index ad5cb3652f..6bd112af4b 100644 --- a/pkg/compute/models/disks.go +++ b/pkg/compute/models/disks.go @@ -1004,6 +1004,7 @@ func (self *SDisk) syncWithCloudDisk(ctx context.Context, userCred mcclient.Toke if provider.GetFactory().IsSupportPrepaidResources() && len(guests) == 1 && guests[0].IsPrepaidRecycle() { recycle = true } + storage := self.GetStorage() _, err := self.GetModelManager().TableSpec().Update(self, func() error { extDisk.Refresh() // self.Name = extDisk.GetName() @@ -1030,8 +1031,15 @@ func (self *SDisk) syncWithCloudDisk(ctx context.Context, userCred mcclient.Toke } // self.ProjectId = userCred.GetProjectId() - if projectSync && len(projectId) > 0 { - self.ProjectId = projectId + if projectSync && self.ProjectSource != db.PROJECT_SOURCE_LOCAL { + if extProjectId := extDisk.GetProjectId(); len(extProjectId) > 0 { + extProject, err := ExternalProjectManager.GetProject(extProjectId, storage.ManagerId) + if err != nil { + log.Errorf(err.Error()) + } else { + self.ProjectId = extProject.ProjectId + } + } } return nil }) @@ -1064,10 +1072,19 @@ func (manager *SDiskManager) newFromCloudDisk(ctx context.Context, userCred mccl disk.Status = extDisk.GetStatus() disk.ExternalId = extDisk.GetGlobalId() disk.StorageId = storage.Id + disk.ProjectSource = db.PROJECT_SOURCE_CLOUD disk.ProjectId = userCred.GetProjectId() if len(projectId) > 0 { disk.ProjectId = projectId } + if extProjectId := extDisk.GetProjectId(); len(extProjectId) > 0 { + externalProject, err := ExternalProjectManager.GetProject(extProjectId, storage.ManagerId) + if err != nil { + log.Errorf(err.Error()) + } else { + disk.ProjectId = externalProject.ProjectId + } + } disk.DiskFormat = extDisk.GetDiskFormat() disk.DiskSize = extDisk.GetDiskSizeMB() disk.AutoDelete = extDisk.GetIsAutoDelete() diff --git a/pkg/compute/models/elasticips.go b/pkg/compute/models/elasticips.go index dd90cf12a0..2613ae41bd 100644 --- a/pkg/compute/models/elasticips.go +++ b/pkg/compute/models/elasticips.go @@ -302,8 +302,15 @@ func (self *SElasticip) SyncWithCloudEip(userCred mcclient.TokenCredential, prov // self.ManagerId = ext.GetManagerId() self.IsEmulated = ext.IsEmulated() self.ProjectId = userCred.GetProjectId() - if projectSync && len(projectId) > 0 { - self.ProjectId = projectId + if projectSync && self.ProjectSource != db.PROJECT_SOURCE_LOCAL { + if extProjectId := ext.GetProjectId(); len(extProjectId) > 0 { + extProject, err := ExternalProjectManager.GetProject(extProjectId, self.ManagerId) + if err != nil { + log.Errorf(err.Error()) + } else { + self.ProjectId = extProject.ProjectId + } + } } self.ChargeType = ext.GetInternetChargeType() @@ -335,11 +342,21 @@ func (manager *SElasticipManager) newFromCloudEip(ctx context.Context, userCred eip.CloudregionId = region.Id eip.ChargeType = extEip.GetInternetChargeType() + eip.ProjectSource = db.PROJECT_SOURCE_CLOUD eip.ProjectId = userCred.GetProjectId() if len(projectId) > 0 { eip.ProjectId = projectId } + if extProjectId := extEip.GetProjectId(); len(extProjectId) > 0 { + externalProject, err := ExternalProjectManager.GetProject(extProjectId, eip.ManagerId) + if err != nil { + log.Errorf(err.Error()) + } else { + eip.ProjectId = externalProject.ProjectId + } + } + err := manager.TableSpec().Insert(&eip) if err != nil { log.Errorf("newFromCloudEip fail %s", err) diff --git a/pkg/compute/models/external_projects.go b/pkg/compute/models/external_projects.go index f2042d9a88..2243303811 100644 --- a/pkg/compute/models/external_projects.go +++ b/pkg/compute/models/external_projects.go @@ -3,16 +3,14 @@ package models import ( "context" "database/sql" + "fmt" "yunion.io/x/jsonutils" "yunion.io/x/log" "yunion.io/x/onecloud/pkg/cloudcommon/db" "yunion.io/x/onecloud/pkg/cloudprovider" - "yunion.io/x/onecloud/pkg/compute/options" "yunion.io/x/onecloud/pkg/httperrors" "yunion.io/x/onecloud/pkg/mcclient" - "yunion.io/x/onecloud/pkg/mcclient/auth" - "yunion.io/x/onecloud/pkg/mcclient/modules" "yunion.io/x/pkg/util/compare" ) @@ -75,6 +73,20 @@ func (manager *SExternalProjectManager) getProjectsByRegion(region *SCloudregion return projects, nil } +func (manager *SExternalProjectManager) GetProject(externalId string, providerId string) (*SExternalProject, error) { + project := &SExternalProject{} + project.SetModelManager(manager) + q := manager.Query().Equals("external_id", externalId).Equals("manager_id", providerId) + count := q.Count() + if count == 0 { + return nil, fmt.Errorf("no external project record %s for provider %s", externalId, providerId) + } + if count > 1 { + return nil, fmt.Errorf("dumplicate external project record %s for provider %s", externalId, providerId) + } + return project, q.First(project) +} + func (manager *SExternalProjectManager) SyncProjects(ctx context.Context, userCred mcclient.TokenCredential, provider *SCloudprovider, region *SCloudregion, projects []cloudprovider.ICloudProject, projectSync bool) compare.SyncResult { syncResult := compare.SyncResult{} @@ -125,16 +137,7 @@ func (manager *SExternalProjectManager) SyncProjects(ctx context.Context, userCr func (self *SExternalProject) SyncWithCloudProject(ctx context.Context, userCred mcclient.TokenCredential, provider *SCloudprovider, ext cloudprovider.ICloudProject, projectSync bool) error { _, err := self.GetModelManager().TableSpec().Update(self, func() error { self.Name = ext.GetName() - self.ExternalId = ext.GetGlobalId() self.IsEmulated = ext.IsEmulated() - self.ProjectId = userCred.GetProjectId() - if projectSync { - projectId, err := ExternalProjectManager.syncProject(ctx, userCred, self.Name) - if err != nil { - return err - } - self.ProjectId = projectId - } return nil }) if err != nil { @@ -143,25 +146,6 @@ func (self *SExternalProject) SyncWithCloudProject(ctx context.Context, userCred return err } -func (manager *SExternalProjectManager) syncProject(ctx context.Context, userCred mcclient.TokenCredential, projectName string) (string, error) { - project, err := db.TenantCacheManager.FetchByName(userCred, projectName) - if err == nil { - return project.GetId(), nil - } - if err == sql.ErrNoRows { - s := auth.GetAdminSession(ctx, options.Options.Region, "") - params := jsonutils.NewDict() - params.Add(jsonutils.NewString(projectName), "name") - params.Add(jsonutils.NewString("auto create from external_project"), "description") - result, err := modules.Projects.Create(s, params) - if err != nil { - return "", err - } - return result.GetString("id") - } - return "", err -} - func (manager *SExternalProjectManager) newFromCloudProject(ctx context.Context, userCred mcclient.TokenCredential, provider *SCloudprovider, extProject cloudprovider.ICloudProject, region *SCloudregion, projectSync bool) (*SExternalProject, error) { project := SExternalProject{} project.SetModelManager(manager) @@ -170,15 +154,7 @@ func (manager *SExternalProjectManager) newFromCloudProject(ctx context.Context, project.ExternalId = extProject.GetGlobalId() project.IsEmulated = extProject.IsEmulated() project.ManagerId = provider.Id - - project.ProjectId = userCred.GetProjectId() - if projectSync { - projectId, err := manager.syncProject(ctx, userCred, project.Name) - if err != nil { - return nil, err - } - project.ProjectId = projectId - } + project.ProjectId = provider.ProjectId factory, err := provider.GetProviderFactory() if err != nil { diff --git a/pkg/compute/models/guests.go b/pkg/compute/models/guests.go index 7e7c1dd6dd..7a0842e0cb 100644 --- a/pkg/compute/models/guests.go +++ b/pkg/compute/models/guests.go @@ -1853,8 +1853,15 @@ func (self *SGuest) syncWithCloudVM(ctx context.Context, userCred mcclient.Token self.VmemSize = extVM.GetVmemSizeMB() } - if projectSync && len(projectId) > 0 { - self.ProjectId = projectId + if projectSync && self.ProjectSource != db.PROJECT_SOURCE_LOCAL { + if extProjectId := extVM.GetProjectId(); len(extProjectId) > 0 { + extProject, err := ExternalProjectManager.GetProject(extProjectId, host.ManagerId) + if err != nil { + log.Errorf(err.Error()) + } else { + self.ProjectId = extProject.ProjectId + } + } } self.Hypervisor = extVM.GetHypervisor() @@ -1978,10 +1985,19 @@ func (manager *SGuestManager) newCloudVM(ctx context.Context, userCred mcclient. guest.VmemSize = extVM.GetVmemSizeMB() } + guest.ProjectSource = db.PROJECT_SOURCE_CLOUD guest.ProjectId = userCred.GetProjectId() if len(projectId) > 0 { guest.ProjectId = projectId } + if extProjectId := extVM.GetProjectId(); len(extProjectId) > 0 { + externalProject, err := ExternalProjectManager.GetProject(extProjectId, host.ManagerId) + if err != nil { + log.Errorf(err.Error()) + } else { + guest.ProjectId = externalProject.ProjectId + } + } extraSecgroups := []*SSecurityGroup{} if metaData != nil && metaData.Contains("secgroupIds") { diff --git a/pkg/compute/models/snapshots.go b/pkg/compute/models/snapshots.go index 007f34f7b1..e5ee7ab1d2 100644 --- a/pkg/compute/models/snapshots.go +++ b/pkg/compute/models/snapshots.go @@ -536,8 +536,15 @@ func (self *SSnapshot) SyncWithCloudSnapshot(userCred mcclient.TokenCredential, self.Name = ext.GetName() self.Status = ext.GetStatus() self.DiskType = ext.GetDiskType() - if projectSync && len(projectId) > 0 { - self.ProjectId = projectId + if projectSync && self.ProjectSource != db.PROJECT_SOURCE_LOCAL { + if extProjectId := ext.GetProjectId(); len(extProjectId) > 0 { + extProject, err := ExternalProjectManager.GetProject(extProjectId, self.ManagerId) + if err != nil { + log.Errorf(err.Error()) + } else { + self.ProjectId = extProject.ProjectId + } + } } self.CloudregionId = region.Id return nil @@ -569,10 +576,21 @@ func (manager *SSnapshotManager) newFromCloudSnapshot(ctx context.Context, userC snapshot.ManagerId = provider.Id snapshot.CloudregionId = region.Id + snapshot.ProjectSource = db.PROJECT_SOURCE_CLOUD snapshot.ProjectId = userCred.GetProjectId() if len(projectId) > 0 { snapshot.ProjectId = projectId } + + if extProjectId := extSnapshot.GetProjectId(); len(extProjectId) > 0 { + externalProject, err := ExternalProjectManager.GetProject(extProjectId, snapshot.ManagerId) + if err != nil { + log.Errorf(err.Error()) + } else { + snapshot.ProjectId = externalProject.ProjectId + } + } + err := manager.TableSpec().Insert(&snapshot) if err != nil { log.Errorf("newFromCloudEip fail %s", err) diff --git a/pkg/util/aliyun/disk.go b/pkg/util/aliyun/disk.go index 2f52be2bf1..b8a7f2f534 100644 --- a/pkg/util/aliyun/disk.go +++ b/pkg/util/aliyun/disk.go @@ -406,3 +406,7 @@ func (self *SRegion) rebuildDisk(diskId string) error { } return nil } + +func (self *SDisk) GetProjectId() string { + return "" +} diff --git a/pkg/util/aliyun/eip.go b/pkg/util/aliyun/eip.go index af609a9f3a..89b45bad32 100644 --- a/pkg/util/aliyun/eip.go +++ b/pkg/util/aliyun/eip.go @@ -326,3 +326,7 @@ func (region *SRegion) UpdateEipBandwidth(eipId string, bw int) error { } return err } + +func (self *SEipAddress) GetProjectId() string { + return "" +} diff --git a/pkg/util/aliyun/instance.go b/pkg/util/aliyun/instance.go index c42365e4a6..d210fe6e82 100644 --- a/pkg/util/aliyun/instance.go +++ b/pkg/util/aliyun/instance.go @@ -938,3 +938,7 @@ func (region *SRegion) RenewInstance(instanceId string, bc billing.SBillingCycle } return nil } + +func (self *SInstance) GetProjectId() string { + return "" +} diff --git a/pkg/util/aliyun/snapshot.go b/pkg/util/aliyun/snapshot.go index bfbc5b21c5..3ca2eb4602 100644 --- a/pkg/util/aliyun/snapshot.go +++ b/pkg/util/aliyun/snapshot.go @@ -179,3 +179,7 @@ func (self *SRegion) DeleteSnapshot(snapshotId string) error { _, err := self.ecsRequest("DeleteSnapshot", params) return err } + +func (self *SSnapshot) GetProjectId() string { + return "" +} diff --git a/pkg/util/aws/disk.go b/pkg/util/aws/disk.go index c2e232c403..58405acc8c 100644 --- a/pkg/util/aws/disk.go +++ b/pkg/util/aws/disk.go @@ -480,3 +480,7 @@ func (self *SDisk) Rebuild(ctx context.Context) error { _, err := self.storage.zone.region.resetDisk(self.DiskId, "") return err } + +func (self *SDisk) GetProjectId() string { + return "" +} diff --git a/pkg/util/aws/eip.go b/pkg/util/aws/eip.go index 8ac7d7e1ee..8e7ab29c34 100644 --- a/pkg/util/aws/eip.go +++ b/pkg/util/aws/eip.go @@ -304,3 +304,7 @@ func (self *SEipAddress) GetBillingType() string { func (self *SEipAddress) GetExpiredAt() time.Time { return time.Time{} } + +func (self *SEipAddress) GetProjectId() string { + return "" +} diff --git a/pkg/util/aws/instance.go b/pkg/util/aws/instance.go index 5b20e7f774..e4f3d342c2 100644 --- a/pkg/util/aws/instance.go +++ b/pkg/util/aws/instance.go @@ -939,3 +939,7 @@ func (self *SInstance) CreateDisk(ctx context.Context, sizeMb int, uuid string, func (self *SInstance) Renew(bc billing.SBillingCycle) error { return cloudprovider.ErrNotSupported } + +func (self *SInstance) GetProjectId() string { + return "" +} diff --git a/pkg/util/aws/snapshot.go b/pkg/util/aws/snapshot.go index 8e765dc432..25a02f3d57 100644 --- a/pkg/util/aws/snapshot.go +++ b/pkg/util/aws/snapshot.go @@ -200,3 +200,7 @@ func (self *SRegion) DeleteSnapshot(snapshotId string) error { _, err := self.ec2Client.DeleteSnapshot(params) return err } + +func (self *SSnapshot) GetProjectId() string { + return "" +} diff --git a/pkg/util/azure/classic_disk.go b/pkg/util/azure/classic_disk.go index 581d0f1e87..4ec487fcaa 100644 --- a/pkg/util/azure/classic_disk.go +++ b/pkg/util/azure/classic_disk.go @@ -223,3 +223,7 @@ func (disk *SClassicDisk) GetAccessPath() string { func (self *SClassicDisk) Rebuild(ctx context.Context) error { return cloudprovider.ErrNotSupported } + +func (self *SClassicDisk) GetProjectId() string { + return "" +} diff --git a/pkg/util/azure/classic_eip.go b/pkg/util/azure/classic_eip.go index 71415c7b93..bbaa19a2bd 100644 --- a/pkg/util/azure/classic_eip.go +++ b/pkg/util/azure/classic_eip.go @@ -151,3 +151,7 @@ func (self *SClassicEipAddress) GetBillingType() string { func (self *SClassicEipAddress) GetExpiredAt() time.Time { return time.Time{} } + +func (self *SClassicEipAddress) GetProjectId() string { + return "" +} diff --git a/pkg/util/azure/classic_instance.go b/pkg/util/azure/classic_instance.go index bd3fb44378..2ba77052b6 100644 --- a/pkg/util/azure/classic_instance.go +++ b/pkg/util/azure/classic_instance.go @@ -535,3 +535,7 @@ func (self *SClassicInstance) CreateDisk(ctx context.Context, sizeMb int, uuid s func (self *SClassicInstance) Renew(bc billing.SBillingCycle) error { return cloudprovider.ErrNotSupported } + +func (self *SClassicInstance) GetProjectId() string { + return "" +} diff --git a/pkg/util/azure/classic_snapshot.go b/pkg/util/azure/classic_snapshot.go index 561d515538..47703dcff5 100644 --- a/pkg/util/azure/classic_snapshot.go +++ b/pkg/util/azure/classic_snapshot.go @@ -77,3 +77,7 @@ func (self *SClassicSnapshot) GetRegionId() string { func (self *SClassicSnapshot) GetDiskType() string { return "" } + +func (self *SClassicSnapshot) GetProjectId() string { + return "" +} diff --git a/pkg/util/azure/disk.go b/pkg/util/azure/disk.go index e9dfc53f6d..14d5d3290b 100644 --- a/pkg/util/azure/disk.go +++ b/pkg/util/azure/disk.go @@ -341,3 +341,7 @@ func (self *SDisk) Rebuild(ctx context.Context) error { // TODO return cloudprovider.ErrNotSupported } + +func (self *SDisk) GetProjectId() string { + return "" +} diff --git a/pkg/util/azure/eip.go b/pkg/util/azure/eip.go index 68ddbe06c3..ce96daeea2 100644 --- a/pkg/util/azure/eip.go +++ b/pkg/util/azure/eip.go @@ -242,3 +242,7 @@ func (self *SEipAddress) GetBillingType() string { func (self *SEipAddress) GetExpiredAt() time.Time { return time.Time{} } + +func (self *SEipAddress) GetProjectId() string { + return "" +} diff --git a/pkg/util/azure/instance.go b/pkg/util/azure/instance.go index 663cfd8e5c..9dac00377f 100644 --- a/pkg/util/azure/instance.go +++ b/pkg/util/azure/instance.go @@ -1043,3 +1043,7 @@ func (self *SInstance) CreateDisk(ctx context.Context, sizeMb int, uuid string, func (self *SInstance) Renew(bc billing.SBillingCycle) error { return cloudprovider.ErrNotSupported } + +func (self *SInstance) GetProjectId() string { + return "" +} diff --git a/pkg/util/azure/snapshot.go b/pkg/util/azure/snapshot.go index 72cc1a3cb4..3e1c7a21c4 100644 --- a/pkg/util/azure/snapshot.go +++ b/pkg/util/azure/snapshot.go @@ -172,3 +172,7 @@ func (self *SSnapshot) GetDiskId() string { func (self *SSnapshot) GetDiskType() string { return "" } + +func (self *SSnapshot) GetProjectId() string { + return "" +} diff --git a/pkg/util/esxi/vdisk.go b/pkg/util/esxi/vdisk.go index e177b57c7e..53c80ce2ae 100644 --- a/pkg/util/esxi/vdisk.go +++ b/pkg/util/esxi/vdisk.go @@ -244,3 +244,7 @@ func (disk *SVirtualDisk) GetExpiredAt() time.Time { func (disk *SVirtualDisk) Rebuild(ctx context.Context) error { return disk.vm.rebuildDisk(ctx, disk) } + +func (disk *SVirtualDisk) GetProjectId() string { + return "" +} diff --git a/pkg/util/esxi/virtualmachine.go b/pkg/util/esxi/virtualmachine.go index 6ccdad303a..34f222d6cd 100644 --- a/pkg/util/esxi/virtualmachine.go +++ b/pkg/util/esxi/virtualmachine.go @@ -718,3 +718,7 @@ func (self *SVirtualMachine) createDiskInternal(ctx context.Context, sizeMb int, func (self *SVirtualMachine) Renew(bc billing.SBillingCycle) error { return cloudprovider.ErrNotSupported } + +func (self *SVirtualMachine) GetProjectId() string { + return "" +} diff --git a/pkg/util/huawei/disk.go b/pkg/util/huawei/disk.go index 5e19812ea9..17e83d285d 100644 --- a/pkg/util/huawei/disk.go +++ b/pkg/util/huawei/disk.go @@ -482,3 +482,7 @@ func (self *SRegion) resetDisk(diskId, snapshotId string) (string, error) { _, err := self.ecsClient.OsSnapshots.PerformAction2("rollback", snapshotId, params, "") return diskId, err } + +func (self *SDisk) GetProjectId() string { + return "" +} diff --git a/pkg/util/huawei/eip.go b/pkg/util/huawei/eip.go index b0aa932fc3..b4b7564fee 100644 --- a/pkg/util/huawei/eip.go +++ b/pkg/util/huawei/eip.go @@ -367,3 +367,7 @@ func (self *SRegion) GetPorts(instanceId string) ([]Port, error) { err := doListAllWithMarker(self.ecsClient.Port.List, querys, &ports) return ports, err } + +func (self *SEipAddress) GetProjectId() string { + return "" +} diff --git a/pkg/util/huawei/instance.go b/pkg/util/huawei/instance.go index 6bfa34d8b8..e70f103ab2 100644 --- a/pkg/util/huawei/instance.go +++ b/pkg/util/huawei/instance.go @@ -1155,3 +1155,7 @@ func (self *SRegion) UnsubscribeInstance(instanceId string, domianId string) (js self.ecsClient.Orders.SetDomainId(domianId) return self.ecsClient.Orders.PerformAction("resources/delete", "", unsubObj) } + +func (self *SInstance) GetProjectId() string { + return "" +} diff --git a/pkg/util/huawei/region.go b/pkg/util/huawei/region.go index 5f3207cd62..03cde39a01 100644 --- a/pkg/util/huawei/region.go +++ b/pkg/util/huawei/region.go @@ -381,7 +381,7 @@ func (self *SRegion) CreateEIP(name string, bwMbps int, chargeType string, bgpTy bgpType = "5_sbgp" case "cn-northeast-1": bgpType = "5_telcom" - case "cn-north-4","ap-southeast-1", "ap-southeast-2", "eu-west-0": + case "cn-north-4", "ap-southeast-1", "ap-southeast-2", "eu-west-0": bgpType = "5_bgp" default: bgpType = "5_bgp" diff --git a/pkg/util/huawei/snapshot.go b/pkg/util/huawei/snapshot.go index ba9e3cd3e0..9f9cbf666d 100644 --- a/pkg/util/huawei/snapshot.go +++ b/pkg/util/huawei/snapshot.go @@ -169,3 +169,7 @@ func (self *SRegion) CreateSnapshot(diskId, name, desc string) (string, error) { err := DoCreate(self.ecsClient.Snapshots.Create, params, &snapshot) return snapshot.ID, err } + +func (self *SSnapshot) GetProjectId() string { + return "" +} diff --git a/pkg/util/openstack/disk.go b/pkg/util/openstack/disk.go index 78eafd20a9..e121388fa5 100644 --- a/pkg/util/openstack/disk.go +++ b/pkg/util/openstack/disk.go @@ -316,3 +316,7 @@ func (disk *SDisk) GetAccessPath() string { func (disk *SDisk) Rebuild(ctx context.Context) error { return cloudprovider.ErrNotSupported } + +func (disk *SDisk) GetProjectId() string { + return "" +} diff --git a/pkg/util/openstack/instance.go b/pkg/util/openstack/instance.go index 2ed3213075..eca8c20308 100644 --- a/pkg/util/openstack/instance.go +++ b/pkg/util/openstack/instance.go @@ -613,3 +613,7 @@ func (instance *SInstance) Renew(bc billing.SBillingCycle) error { func (region *SRegion) RenewInstances(instanceId []string, bc billing.SBillingCycle) error { return cloudprovider.ErrNotSupported } + +func (instance *SInstance) GetProjectId() string { + return "" +} diff --git a/pkg/util/openstack/snapshot.go b/pkg/util/openstack/snapshot.go index 265daeef8e..0c7074c48a 100644 --- a/pkg/util/openstack/snapshot.go +++ b/pkg/util/openstack/snapshot.go @@ -163,3 +163,7 @@ func (region *SRegion) CreateSnapshot(diskId, name, desc string) (*SSnapshot, er snapshot := &SSnapshot{region: region} return snapshot, resp.Unmarshal(snapshot, "snapshot") } + +func (self *SSnapshot) GetProjectId() string { + return "" +} diff --git a/pkg/util/qcloud/disk.go b/pkg/util/qcloud/disk.go index ac9d7c2fb1..516a246658 100644 --- a/pkg/util/qcloud/disk.go +++ b/pkg/util/qcloud/disk.go @@ -382,3 +382,7 @@ func (self *SDisk) Rebuild(ctx context.Context) error { // TODO return cloudprovider.ErrNotSupported } + +func (self *SDisk) GetProjectId() string { + return "" +} diff --git a/pkg/util/qcloud/eip.go b/pkg/util/qcloud/eip.go index afd6dc666d..e30942b643 100644 --- a/pkg/util/qcloud/eip.go +++ b/pkg/util/qcloud/eip.go @@ -330,3 +330,7 @@ func (region *SRegion) UpdateInstanceBandwidth(instanceId string, bw int) error _, err := region.cvmRequest("ResetInstancesInternetMaxBandwidth", params) return err } + +func (self *SEipAddress) GetProjectId() string { + return "" +} diff --git a/pkg/util/qcloud/instance.go b/pkg/util/qcloud/instance.go index 8feea35642..946187c78a 100644 --- a/pkg/util/qcloud/instance.go +++ b/pkg/util/qcloud/instance.go @@ -821,3 +821,7 @@ func (region *SRegion) RenewInstances(instanceId []string, bc billing.SBillingCy } return nil } + +func (self *SInstance) GetProjectId() string { + return "" +} diff --git a/pkg/util/qcloud/localdisk.go b/pkg/util/qcloud/localdisk.go index 723ca61952..18338b2ff7 100644 --- a/pkg/util/qcloud/localdisk.go +++ b/pkg/util/qcloud/localdisk.go @@ -139,3 +139,7 @@ func (self *SLocalDisk) Rebuild(ctx context.Context) error { // TODO return cloudprovider.ErrNotSupported } + +func (disk *SLocalDisk) GetProjectId() string { + return "" +} diff --git a/pkg/util/qcloud/snapshot.go b/pkg/util/qcloud/snapshot.go index 96fb56e61b..c6b2b67285 100644 --- a/pkg/util/qcloud/snapshot.go +++ b/pkg/util/qcloud/snapshot.go @@ -217,3 +217,7 @@ func (self *SRegion) CreateSnapshot(diskId, name, desc string) (string, error) { } return body.GetString("SnapshotId") } + +func (self *SSnapshot) GetProjectId() string { + return "" +}