From daf496a5b656dffc828e88ba9a2b136cc4843d2f Mon Sep 17 00:00:00 2001 From: tb365 Date: Thu, 3 Jun 2021 16:13:30 +0800 Subject: [PATCH] fix(region): lb local cert sync fix --- .../models/loadbalancercachedcertificates.go | 23 +++++++++++++++---- .../models/loadbalancercertificates.go | 13 +++++++++++ 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/pkg/compute/models/loadbalancercachedcertificates.go b/pkg/compute/models/loadbalancercachedcertificates.go index bec6cc091c..b15dbfb084 100644 --- a/pkg/compute/models/loadbalancercachedcertificates.go +++ b/pkg/compute/models/loadbalancercachedcertificates.go @@ -312,11 +312,7 @@ func (man *SCachedLoadbalancerCertificateManager) newFromCloudLoadbalancerCertif lbcert.ManagerId = provider.Id lbcert.CloudregionId = region.Id - c := SLoadbalancerCertificate{} - q1 := LoadbalancerCertificateManager.Query().IsFalse("pending_deleted") - q1 = q1.Equals("fingerprint", extCertificate.GetFingerprint()) - q1 = q1.Equals("tenant_id", provider.ProjectId) - err := q1.First(&c) + c, err := LoadbalancerCertificateManager.GetLbCertByFingerprint(provider.ProjectId, extCertificate.GetFingerprint()) if err != nil { switch err { case sql.ErrNoRows: @@ -365,6 +361,23 @@ func (lbcert *SCachedLoadbalancerCertificate) SyncWithCloudLoadbalancerCertifica if err != nil { return err } + + // update local lb cert + localCert, err := LoadbalancerCertificateManager.GetLbCertByFingerprint(projectId.GetProjectId(), extCertificate.GetFingerprint()) + if err == nil && !localCert.IsComplete() { + pkey := extCertificate.GetPrivateKey() + cert := extCertificate.GetPublickKey() + if len(pkey) > 0 && len(cert) > 0 { + _, err = db.UpdateWithLock(ctx, localCert, func() error { + localCert.Certificate = cert + localCert.PrivateKey = pkey + return nil + }) + if err != nil { + log.Errorf("SyncWithCloudLoadbalancerCertificate.Update.localcert %s %s", localCert.Id, err) + } + } + } db.OpsLog.LogSyncUpdate(lbcert, diff, userCred) SyncCloudProject(userCred, lbcert, projectId, extCertificate, lbcert.ManagerId) diff --git a/pkg/compute/models/loadbalancercertificates.go b/pkg/compute/models/loadbalancercertificates.go index 63793b2896..05536e7c10 100644 --- a/pkg/compute/models/loadbalancercertificates.go +++ b/pkg/compute/models/loadbalancercertificates.go @@ -478,3 +478,16 @@ func (manager *SLoadbalancerCertificateManager) GetResourceCount() ([]db.SScopeR virts := manager.Query().IsFalse("pending_deleted") return db.CalculateResourceCount(virts, "tenant_id") } + +func (manager *SLoadbalancerCertificateManager) GetLbCertByFingerprint(tenantId, fingerprint string) (*SLoadbalancerCertificate, error) { + c := SLoadbalancerCertificate{} + c.SetModelManager(manager, &c) + q1 := LoadbalancerCertificateManager.Query().IsFalse("pending_deleted") + q1 = q1.Equals("fingerprint", fingerprint) + q1 = q1.Equals("tenant_id", tenantId) + if err := q1.First(&c); err != nil { + return nil, err + } + + return &c, nil +}