From afbee642a799ddac2acb4f3678500e4147630468 Mon Sep 17 00:00:00 2001 From: ioito Date: Thu, 21 Apr 2022 19:46:36 +0800 Subject: [PATCH] fix(region): sync resource created time --- pkg/cloudprovider/resources.go | 4 +--- pkg/compute/models/loadbalancers.go | 8 ++++++++ pkg/compute/models/networks.go | 8 ++++++++ pkg/compute/models/secgroupcache.go | 5 +++++ pkg/compute/models/secgroups.go | 4 ++++ pkg/compute/models/vpcs.go | 7 +++++++ pkg/multicloud/apsara/securitygroup.go | 4 ++++ pkg/multicloud/apsara/vpc.go | 4 ++++ pkg/multicloud/apsara/vswitch.go | 4 ++-- pkg/multicloud/azure/loadbalancer.go | 2 ++ pkg/multicloud/azure/loadbalancerbackendgroup.go | 1 + pkg/multicloud/azure/loadbalancercert.go | 2 ++ pkg/multicloud/billing_base.go | 4 ---- pkg/multicloud/google/globalnetwork.go | 4 ++++ pkg/multicloud/google/loadbalancer.go | 5 +++++ pkg/multicloud/google/loadbalancer_backend.go | 5 +++++ pkg/multicloud/google/loadbalancer_backendgroup.go | 5 +++++ pkg/multicloud/google/loadbalancer_cert.go | 4 ++++ pkg/multicloud/google/loadbalancer_listener.go | 5 +++++ pkg/multicloud/google/loadbalancer_listenerrule.go | 5 +++++ pkg/multicloud/google/network.go | 6 ++++++ pkg/multicloud/google/region.go | 4 ++++ pkg/multicloud/google/resourcepolicy.go | 4 ++++ pkg/multicloud/google/snapshot.go | 4 ++++ pkg/multicloud/google/storage.go | 4 ++++ pkg/multicloud/google/wire.go | 5 +++++ pkg/multicloud/hcso/instancetype.go | 2 ++ pkg/multicloud/resource_base.go | 6 ++++++ 28 files changed, 116 insertions(+), 9 deletions(-) diff --git a/pkg/cloudprovider/resources.go b/pkg/cloudprovider/resources.go index bf54cf600f..ea63cd4e6a 100644 --- a/pkg/cloudprovider/resources.go +++ b/pkg/cloudprovider/resources.go @@ -32,6 +32,7 @@ type ICloudResource interface { GetId() string GetName() string GetGlobalId() string + GetCreatedAt() time.Time GetStatus() string @@ -57,7 +58,6 @@ type IVirtualResource interface { type IBillingResource interface { GetBillingType() string - GetCreatedAt() time.Time GetExpiredAt() time.Time SetAutoRenew(bc billing.SBillingCycle) error Renew(bc billing.SBillingCycle) error @@ -223,7 +223,6 @@ type ICloudImage interface { GetMinOsDiskSizeGb() int GetMinRamSizeMb() int GetImageFormat() string - GetCreatedAt() time.Time UEFI() bool GetPublicScope() rbacutils.TRbacScope GetSubImages() []SSubImage @@ -556,7 +555,6 @@ type ICloudGlobalVpc interface { type ICloudIPv6Gateway interface { IVirtualResource - GetCreatedAt() time.Time GetInstanceType() string } diff --git a/pkg/compute/models/loadbalancers.go b/pkg/compute/models/loadbalancers.go index 1c18cccd5c..5b011e97ad 100644 --- a/pkg/compute/models/loadbalancers.go +++ b/pkg/compute/models/loadbalancers.go @@ -960,6 +960,10 @@ func (man *SLoadbalancerManager) newFromCloudLoadbalancer(ctx context.Context, u lbNetworkIds := getExtLbNetworkIds(extLb, lb.ManagerId) lb.NetworkId = strings.Join(lbNetworkIds, ",") + if createdAt := extLb.GetCreatedAt(); !createdAt.IsZero() { + lb.CreatedAt = createdAt + } + // classic vpc if extLb.GetNetworkType() == api.LB_NETWORK_TYPE_CLASSIC { if vpc, err := VpcManager.GetOrCreateVpcForClassicNetwork(ctx, provider, region); err == nil && vpc != nil { @@ -1183,6 +1187,10 @@ func (lb *SLoadbalancer) SyncWithCloudLoadbalancer(ctx context.Context, userCred lb.CloudregionId = region.GetId() } + if createdAt := extLb.GetCreatedAt(); !createdAt.IsZero() { + lb.CreatedAt = createdAt + } + // classic vpc if extLb.GetNetworkType() == api.LB_NETWORK_TYPE_CLASSIC { if vpc, err := VpcManager.GetOrCreateVpcForClassicNetwork(ctx, provider, region); err == nil && vpc != nil { diff --git a/pkg/compute/models/networks.go b/pkg/compute/models/networks.go index 5e65e384c6..4fa03e6d40 100644 --- a/pkg/compute/models/networks.go +++ b/pkg/compute/models/networks.go @@ -706,6 +706,10 @@ func (self *SNetwork) SyncWithCloudNetwork(ctx context.Context, userCred mcclien self.AllocTimoutSeconds = extNet.GetAllocTimeoutSeconds() + if createdAt := extNet.GetCreatedAt(); !createdAt.IsZero() { + self.CreatedAt = createdAt + } + return nil }) if err != nil { @@ -758,6 +762,10 @@ func (manager *SNetworkManager) newFromCloudNetwork(ctx context.Context, userCre net.AllocTimoutSeconds = extNet.GetAllocTimeoutSeconds() + if createdAt := extNet.GetCreatedAt(); !createdAt.IsZero() { + net.CreatedAt = createdAt + } + var err = func() error { lockman.LockRawObject(ctx, manager.Keyword(), "name") defer lockman.ReleaseRawObject(ctx, manager.Keyword(), "name") diff --git a/pkg/compute/models/secgroupcache.go b/pkg/compute/models/secgroupcache.go index c1ef07f5d9..06d9673a75 100644 --- a/pkg/compute/models/secgroupcache.go +++ b/pkg/compute/models/secgroupcache.go @@ -513,6 +513,11 @@ func (manager *SSecurityGroupCacheManager) SyncSecurityGroupCaches(ctx context.C cache.ExternalId = added[i].GetGlobalId() references, _ := added[i].GetReferences() cache.ReferenceCount = len(references) + + if createdAt := added[i].GetCreatedAt(); !createdAt.IsZero() { + cache.CreatedAt = createdAt + } + return nil }) if err != nil { diff --git a/pkg/compute/models/secgroups.go b/pkg/compute/models/secgroups.go index cf17b8b934..b05bba77ef 100644 --- a/pkg/compute/models/secgroups.go +++ b/pkg/compute/models/secgroups.go @@ -1101,6 +1101,10 @@ func (manager *SSecurityGroupManager) newFromCloudSecgroup(ctx context.Context, secgroup.ProjectId = provider.ProjectId secgroup.DomainId = provider.DomainId + if createdAt := extSec.GetCreatedAt(); !createdAt.IsZero() { + secgroup.CreatedAt = createdAt + } + err = func() error { lockman.LockRawObject(ctx, manager.Keyword(), "name") defer lockman.ReleaseRawObject(ctx, manager.Keyword(), "name") diff --git a/pkg/compute/models/vpcs.go b/pkg/compute/models/vpcs.go index 3514dd042e..62cce6a975 100644 --- a/pkg/compute/models/vpcs.go +++ b/pkg/compute/models/vpcs.go @@ -533,6 +533,10 @@ func (self *SVpc) SyncWithCloudVpc(ctx context.Context, userCred mcclient.TokenC self.IsEmulated = extVPC.IsEmulated() self.ExternalAccessMode = extVPC.GetExternalAccessMode() + if createdAt := extVPC.GetCreatedAt(); !createdAt.IsZero() { + self.CreatedAt = createdAt + } + if gId := extVPC.GetGlobalVpcId(); len(gId) > 0 { gVpc, err := db.FetchByExternalIdAndManagerId(GlobalVpcManager, gId, func(q *sqlchemy.SQuery) *sqlchemy.SQuery { return q.Equals("manager_id", self.ManagerId) @@ -572,6 +576,9 @@ func (manager *SVpcManager) newFromCloudVpc(ctx context.Context, userCred mcclie vpc.ExternalAccessMode = extVPC.GetExternalAccessMode() vpc.CloudregionId = region.Id vpc.ManagerId = provider.Id + if createdAt := extVPC.GetCreatedAt(); !createdAt.IsZero() { + vpc.CreatedAt = createdAt + } if gId := extVPC.GetGlobalVpcId(); len(gId) > 0 { gVpc, err := db.FetchByExternalIdAndManagerId(GlobalVpcManager, gId, func(q *sqlchemy.SQuery) *sqlchemy.SQuery { return q.Equals("manager_id", provider.Id) diff --git a/pkg/multicloud/apsara/securitygroup.go b/pkg/multicloud/apsara/securitygroup.go index 4de761b1f9..61bfe65359 100644 --- a/pkg/multicloud/apsara/securitygroup.go +++ b/pkg/multicloud/apsara/securitygroup.go @@ -113,6 +113,10 @@ func (self *SSecurityGroup) GetDescription() string { return self.Description } +func (self *SSecurityGroup) GetCreatedAt() time.Time { + return self.CreationTime +} + func (self *SSecurityGroup) GetRules() ([]cloudprovider.SecurityRule, error) { rules := make([]cloudprovider.SecurityRule, 0) secgrp, err := self.vpc.region.GetSecurityGroupDetails(self.SecurityGroupId) diff --git a/pkg/multicloud/apsara/vpc.go b/pkg/multicloud/apsara/vpc.go index 86c70bcb1e..f99e4465bb 100644 --- a/pkg/multicloud/apsara/vpc.go +++ b/pkg/multicloud/apsara/vpc.go @@ -97,6 +97,10 @@ func (self *SVpc) GetStatus() string { return strings.ToLower(self.Status) } +func (self *SVpc) GetCreatedAt() time.Time { + return self.CreationTime +} + func (self *SVpc) Refresh() error { new, err := self.region.getVpc(self.VpcId) if err != nil { diff --git a/pkg/multicloud/apsara/vswitch.go b/pkg/multicloud/apsara/vswitch.go index 2710a1ccef..724afb0212 100644 --- a/pkg/multicloud/apsara/vswitch.go +++ b/pkg/multicloud/apsara/vswitch.go @@ -79,8 +79,8 @@ func (self *SVSwitch) GetGlobalId() string { return self.VSwitchId } -func (self *SVSwitch) IsEmulated() bool { - return false +func (self *SVSwitch) GetCreatedAt() time.Time { + return self.CreationTime } func (self *SVSwitch) GetStatus() string { diff --git a/pkg/multicloud/azure/loadbalancer.go b/pkg/multicloud/azure/loadbalancer.go index 43bcc6844a..c4734d8e98 100644 --- a/pkg/multicloud/azure/loadbalancer.go +++ b/pkg/multicloud/azure/loadbalancer.go @@ -27,9 +27,11 @@ import ( api "yunion.io/x/onecloud/pkg/apis/compute" "yunion.io/x/onecloud/pkg/cloudprovider" + "yunion.io/x/onecloud/pkg/multicloud" ) type SLoadbalancer struct { + multicloud.SResourceBase region *SRegion eips []cloudprovider.ICloudEIP lbbgs []cloudprovider.ICloudLoadbalancerBackendGroup diff --git a/pkg/multicloud/azure/loadbalancerbackendgroup.go b/pkg/multicloud/azure/loadbalancerbackendgroup.go index 4020f9555c..f298a60949 100644 --- a/pkg/multicloud/azure/loadbalancerbackendgroup.go +++ b/pkg/multicloud/azure/loadbalancerbackendgroup.go @@ -34,6 +34,7 @@ import ( // 应用型LB: HTTP 设置 + 后端池 = onecloud 后端服务器组 // 4层LB: loadBalancingRules(backendPort)+ 后端池 = onecloud 后端服务器组 type SLoadbalancerBackendGroup struct { + multicloud.SResourceBase lb *SLoadbalancer lbbs []cloudprovider.ICloudLoadbalancerBackend diff --git a/pkg/multicloud/azure/loadbalancercert.go b/pkg/multicloud/azure/loadbalancercert.go index 80cf3d3934..979d443728 100644 --- a/pkg/multicloud/azure/loadbalancercert.go +++ b/pkg/multicloud/azure/loadbalancercert.go @@ -29,9 +29,11 @@ import ( api "yunion.io/x/onecloud/pkg/apis/compute" "yunion.io/x/onecloud/pkg/cloudprovider" + "yunion.io/x/onecloud/pkg/multicloud" ) type SLoadbalancerCert struct { + multicloud.SResourceBase lb *SLoadbalancer cert *x509.Certificate Name string `json:"name"` diff --git a/pkg/multicloud/billing_base.go b/pkg/multicloud/billing_base.go index c9d0dcbeb8..8a0e4694c9 100644 --- a/pkg/multicloud/billing_base.go +++ b/pkg/multicloud/billing_base.go @@ -29,10 +29,6 @@ func (self *SBillingBase) GetBillingType() string { return "" } -func (self *SBillingBase) GetCreatedAt() time.Time { - return time.Time{} -} - func (self *SBillingBase) GetExpiredAt() time.Time { return time.Time{} } diff --git a/pkg/multicloud/google/globalnetwork.go b/pkg/multicloud/google/globalnetwork.go index 0613332fd1..0978d914a0 100644 --- a/pkg/multicloud/google/globalnetwork.go +++ b/pkg/multicloud/google/globalnetwork.go @@ -51,6 +51,10 @@ func (self *SGlobalNetwork) Delete() error { return self.client.ecsDelete(self.SelfLink, nil) } +func (self *SGlobalNetwork) GetCreatedAt() time.Time { + return self.CreationTimestamp +} + func (self *SGlobalNetwork) Refresh() error { gvpc, err := self.client.GetGlobalNetwork(self.Id) if err != nil { diff --git a/pkg/multicloud/google/loadbalancer.go b/pkg/multicloud/google/loadbalancer.go index 5953610f56..1d2257de29 100644 --- a/pkg/multicloud/google/loadbalancer.go +++ b/pkg/multicloud/google/loadbalancer.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "strings" + "time" "yunion.io/x/jsonutils" "yunion.io/x/log" @@ -91,6 +92,10 @@ func (self *SLoadbalancer) SetTags(tags map[string]string, replace bool) error { return cloudprovider.ErrNotSupported } +func (self *SLoadbalancer) GetCreatedAt() time.Time { + return time.Time{} +} + func (self *SLoadbalancer) GetProjectId() string { return self.region.GetProjectId() } diff --git a/pkg/multicloud/google/loadbalancer_backend.go b/pkg/multicloud/google/loadbalancer_backend.go index a43bd2a8f1..a479df625d 100644 --- a/pkg/multicloud/google/loadbalancer_backend.go +++ b/pkg/multicloud/google/loadbalancer_backend.go @@ -5,6 +5,7 @@ import ( "fmt" "strconv" "strings" + "time" "yunion.io/x/pkg/errors" @@ -75,6 +76,10 @@ func (self *SLoadbalancerBackend) GetPort() int { return self.Port } +func (self *SLoadbalancerBackend) GetCreatedAt() time.Time { + return time.Time{} +} + func (self *SLoadbalancerBackend) GetBackendType() string { return api.LB_BACKEND_GUEST } diff --git a/pkg/multicloud/google/loadbalancer_backendgroup.go b/pkg/multicloud/google/loadbalancer_backendgroup.go index c4015ae5be..cd962c2e7c 100644 --- a/pkg/multicloud/google/loadbalancer_backendgroup.go +++ b/pkg/multicloud/google/loadbalancer_backendgroup.go @@ -2,6 +2,7 @@ package google import ( "context" + "time" "yunion.io/x/pkg/errors" @@ -63,6 +64,10 @@ func (self *SLoadBalancerBackendGroup) IsDefault() bool { return false } +func (self *SLoadBalancerBackendGroup) GetCreatedAt() time.Time { + return time.Time{} +} + func (self *SLoadBalancerBackendGroup) GetType() string { return api.LB_BACKENDGROUP_TYPE_NORMAL } diff --git a/pkg/multicloud/google/loadbalancer_cert.go b/pkg/multicloud/google/loadbalancer_cert.go index 294fa13c4e..16c55ac7c2 100644 --- a/pkg/multicloud/google/loadbalancer_cert.go +++ b/pkg/multicloud/google/loadbalancer_cert.go @@ -46,6 +46,10 @@ func (self *SLoadbalancerCertificate) IsEmulated() bool { return false } +func (self *SLoadbalancerCertificate) GetCreatedAt() time.Time { + return time.Time{} +} + func (self *SLoadbalancerCertificate) GetSysTags() map[string]string { return nil } diff --git a/pkg/multicloud/google/loadbalancer_listener.go b/pkg/multicloud/google/loadbalancer_listener.go index 2dcb325f98..6b069d97d4 100644 --- a/pkg/multicloud/google/loadbalancer_listener.go +++ b/pkg/multicloud/google/loadbalancer_listener.go @@ -5,6 +5,7 @@ import ( "fmt" "strconv" "strings" + "time" "yunion.io/x/log" "yunion.io/x/pkg/errors" @@ -52,6 +53,10 @@ func (self *SLoadbalancerListener) IsEmulated() bool { return true } +func (self *SLoadbalancerListener) GetCreatedAt() time.Time { + return time.Time{} +} + func (self *SLoadbalancerListener) GetSysTags() map[string]string { return nil } diff --git a/pkg/multicloud/google/loadbalancer_listenerrule.go b/pkg/multicloud/google/loadbalancer_listenerrule.go index d872c64ffa..dfff92ec40 100644 --- a/pkg/multicloud/google/loadbalancer_listenerrule.go +++ b/pkg/multicloud/google/loadbalancer_listenerrule.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "strings" + "time" api "yunion.io/x/onecloud/pkg/apis/compute" "yunion.io/x/onecloud/pkg/cloudprovider" @@ -46,6 +47,10 @@ func (self *SLoadbalancerListenerRule) IsEmulated() bool { return true } +func (self *SLoadbalancerListenerRule) GetCreatedAt() time.Time { + return time.Time{} +} + func (self *SLoadbalancerListenerRule) GetSysTags() map[string]string { return nil } diff --git a/pkg/multicloud/google/network.go b/pkg/multicloud/google/network.go index ad6f9b34c6..bc1606b32f 100644 --- a/pkg/multicloud/google/network.go +++ b/pkg/multicloud/google/network.go @@ -15,6 +15,8 @@ package google import ( + "time" + "yunion.io/x/pkg/util/netutils" api "yunion.io/x/onecloud/pkg/apis/compute" @@ -56,6 +58,10 @@ func (network *SNetwork) GetStatus() string { return api.NETWORK_INTERFACE_STATUS_AVAILABLE } +func (network *SNetwork) GetCreatedAt() time.Time { + return time.Time{} +} + func (network *SNetwork) Delete() error { return network.wire.vpc.Delete() } diff --git a/pkg/multicloud/google/region.go b/pkg/multicloud/google/region.go index 5cd188b5cd..adddfc93ec 100644 --- a/pkg/multicloud/google/region.go +++ b/pkg/multicloud/google/region.go @@ -79,6 +79,10 @@ func (region *SRegion) GetGeographicInfo() cloudprovider.SGeographicInfo { return cloudprovider.SGeographicInfo{} } +func (self *SRegion) GetCreatedAt() time.Time { + return self.CreationTimestamp +} + func (region *SRegion) GetProvider() string { return CLOUD_PROVIDER_GOOGLE } diff --git a/pkg/multicloud/google/resourcepolicy.go b/pkg/multicloud/google/resourcepolicy.go index e97601f7ab..5dfe8c9a67 100644 --- a/pkg/multicloud/google/resourcepolicy.go +++ b/pkg/multicloud/google/resourcepolicy.go @@ -106,6 +106,10 @@ func (policy *SResourcePolicy) GetStatus() string { } } +func (policy *SResourcePolicy) GetCreatedAt() time.Time { + return policy.CreationTimestamp +} + func (policy *SResourcePolicy) Refresh() error { _policy, err := policy.region.GetResourcePolicy(policy.Id) if err != nil { diff --git a/pkg/multicloud/google/snapshot.go b/pkg/multicloud/google/snapshot.go index d6fbbada60..a55da17011 100644 --- a/pkg/multicloud/google/snapshot.go +++ b/pkg/multicloud/google/snapshot.go @@ -78,6 +78,10 @@ func (snapshot *SSnapshot) IsEmulated() bool { return false } +func (self *SSnapshot) GetCreatedAt() time.Time { + return self.CreationTimestamp +} + func (snapshot *SSnapshot) Refresh() error { _snapshot, err := snapshot.region.GetSnapshot(snapshot.Id) if err != nil { diff --git a/pkg/multicloud/google/storage.go b/pkg/multicloud/google/storage.go index 6a222ac16a..d058deeb41 100644 --- a/pkg/multicloud/google/storage.go +++ b/pkg/multicloud/google/storage.go @@ -65,6 +65,10 @@ func (storage *SStorage) IsEmulated() bool { return true } +func (self *SStorage) GetCreatedAt() time.Time { + return time.Time{} +} + func (storage *SStorage) Refresh() error { _storage, err := storage.zone.region.GetStorage(storage.SelfLink) if err != nil { diff --git a/pkg/multicloud/google/wire.go b/pkg/multicloud/google/wire.go index 8b6cde4b51..e314f563ff 100644 --- a/pkg/multicloud/google/wire.go +++ b/pkg/multicloud/google/wire.go @@ -16,6 +16,7 @@ package google import ( "fmt" + "time" "yunion.io/x/pkg/errors" @@ -42,6 +43,10 @@ func (wire *SWire) GetName() string { return wire.vpc.GetName() } +func (wire *SWire) GetCreatedAt() time.Time { + return time.Time{} +} + func (wire *SWire) CreateINetwork(opts *cloudprovider.SNetworkCreateOptions) (cloudprovider.ICloudNetwork, error) { return nil, cloudprovider.ErrNotSupported } diff --git a/pkg/multicloud/hcso/instancetype.go b/pkg/multicloud/hcso/instancetype.go index 0f19025928..46645fc635 100644 --- a/pkg/multicloud/hcso/instancetype.go +++ b/pkg/multicloud/hcso/instancetype.go @@ -19,10 +19,12 @@ import ( "strings" "yunion.io/x/onecloud/pkg/apis" + "yunion.io/x/onecloud/pkg/multicloud" ) // https://support.huaweicloud.com/api-ecs/zh-cn_topic_0020212656.html type SInstanceType struct { + multicloud.SResourceBase ID string `json:"id"` Name string `json:"name"` Vcpus string `json:"vcpus"` diff --git a/pkg/multicloud/resource_base.go b/pkg/multicloud/resource_base.go index 96b0adace1..06878f51c6 100644 --- a/pkg/multicloud/resource_base.go +++ b/pkg/multicloud/resource_base.go @@ -14,6 +14,8 @@ package multicloud +import "time" + type SResourceBase struct { } @@ -24,3 +26,7 @@ func (self *SResourceBase) IsEmulated() bool { func (self *SResourceBase) Refresh() error { return nil } + +func (self *SResourceBase) GetCreatedAt() time.Time { + return time.Time{} +}