Skip to content

Commit 5d2768f

Browse files
committed
fix: #1161
1 parent f272605 commit 5d2768f

File tree

2 files changed

+12
-71
lines changed

2 files changed

+12
-71
lines changed

pkg/core/deployer/providers/huaweicloud-cdn/huaweicloud_cdn.go

Lines changed: 12 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -162,12 +162,14 @@ func (d *Deployer) Deploy(ctx context.Context, certPEM, privkeyPEM string) (*dep
162162
d.logger.Info("found cdn domains to deploy", slog.Any("domains", domains))
163163
var errs []error
164164

165-
for _, domain := range domains {
165+
const MAX_DOMAIN_PER_REQUEST = 50
166+
domainChunks := lo.Chunk(domains, MAX_DOMAIN_PER_REQUEST)
167+
for _, domains := range domainChunks {
166168
select {
167169
case <-ctx.Done():
168170
return nil, ctx.Err()
169171
default:
170-
if err := d.updateDomainCertificate(ctx, domain, upres.CertId, upres.CertName); err != nil {
172+
if err := d.updateDomainsCertificate(ctx, domains, upres.CertId, upres.CertName); err != nil {
171173
errs = append(errs, err)
172174
}
173175
}
@@ -229,33 +231,20 @@ func (d *Deployer) getAllDomains(ctx context.Context) ([]string, error) {
229231
return domains, nil
230232
}
231233

232-
func (d *Deployer) updateDomainCertificate(ctx context.Context, domain string, cloudCertId, cloudCertName string) error {
233-
// 查询加速域名配置
234-
// REF: https://support.huaweicloud.com/api-cdn/ShowDomainFullConfig.html
235-
showDomainFullConfigReq := &hccdnmodel.ShowDomainFullConfigRequest{
236-
EnterpriseProjectId: lo.EmptyableToPtr(d.config.EnterpriseProjectId),
237-
DomainName: domain,
238-
}
239-
showDomainFullConfigResp, err := d.sdkClient.ShowDomainFullConfig(showDomainFullConfigReq)
240-
d.logger.Debug("sdk request 'cdn.ShowDomainFullConfig'", slog.Any("request", showDomainFullConfigReq), slog.Any("response", showDomainFullConfigResp))
241-
if err != nil {
242-
return fmt.Errorf("failed to execute sdk request 'cdn.ShowDomainFullConfig': %w", err)
243-
}
244-
234+
func (d *Deployer) updateDomainsCertificate(ctx context.Context, domains []string, cloudCertId, cloudCertName string) error {
245235
// 更新加速域名配置
246236
// REF: https://support.huaweicloud.com/api-cdn/UpdateDomainMultiCertificates.html
247237
// REF: https://support.huaweicloud.com/usermanual-cdn/cdn_01_0306.html
248-
updateDomainMultiCertificatesReqBodyContent := &hccdnmodel.UpdateDomainMultiCertificatesRequestBodyContent{}
249-
updateDomainMultiCertificatesReqBodyContent.DomainName = domain
250-
updateDomainMultiCertificatesReqBodyContent.HttpsSwitch = 1
251-
updateDomainMultiCertificatesReqBodyContent.CertificateType = lo.ToPtr(int32(2))
252-
updateDomainMultiCertificatesReqBodyContent.ScmCertificateId = lo.ToPtr(cloudCertId)
253-
updateDomainMultiCertificatesReqBodyContent.CertName = lo.ToPtr(cloudCertName)
254-
updateDomainMultiCertificatesReqBodyContent = _assign(updateDomainMultiCertificatesReqBodyContent, showDomainFullConfigResp.Configs)
255238
updateDomainMultiCertificatesReq := &hccdnmodel.UpdateDomainMultiCertificatesRequest{
256239
EnterpriseProjectId: lo.EmptyableToPtr(d.config.EnterpriseProjectId),
257240
Body: &hccdnmodel.UpdateDomainMultiCertificatesRequestBody{
258-
Https: updateDomainMultiCertificatesReqBodyContent,
241+
Https: &hccdnmodel.UpdateDomainMultiCertificatesRequestBodyContent{
242+
DomainName: strings.Join(domains, ","),
243+
HttpsSwitch: 1,
244+
CertificateType: lo.ToPtr(int32(2)),
245+
ScmCertificateId: lo.ToPtr(cloudCertId),
246+
CertName: lo.ToPtr(cloudCertName),
247+
},
259248
},
260249
}
261250
updateDomainMultiCertificatesResp, err := d.sdkClient.UpdateDomainMultiCertificates(updateDomainMultiCertificatesReq)
@@ -296,41 +285,3 @@ func createSDKClient(accessKeyId, secretAccessKey, region string) (*internal.Cdn
296285
client := internal.NewCdnClient(hcClient)
297286
return client, nil
298287
}
299-
300-
func _assign(source *hccdnmodel.UpdateDomainMultiCertificatesRequestBodyContent, target *hccdnmodel.ConfigsGetBody) *hccdnmodel.UpdateDomainMultiCertificatesRequestBodyContent {
301-
// `UpdateDomainMultiCertificates` 中不传的字段表示使用默认值、而非保留原值,
302-
// 因此这里需要把原配置中的参数重新赋值回去。
303-
304-
if target == nil {
305-
return source
306-
}
307-
308-
if lo.FromPtr(target.OriginProtocol) == "follow" {
309-
source.AccessOriginWay = lo.ToPtr(int32(1))
310-
} else if lo.FromPtr(target.OriginProtocol) == "http" {
311-
source.AccessOriginWay = lo.ToPtr(int32(2))
312-
} else if lo.FromPtr(target.OriginProtocol) == "https" {
313-
source.AccessOriginWay = lo.ToPtr(int32(3))
314-
}
315-
316-
if target.ForceRedirect != nil {
317-
if source.ForceRedirectConfig == nil {
318-
source.ForceRedirectConfig = &hccdnmodel.ForceRedirect{}
319-
}
320-
321-
if target.ForceRedirect.Status == "on" {
322-
source.ForceRedirectConfig.Switch = 1
323-
source.ForceRedirectConfig.RedirectType = lo.FromPtr(target.ForceRedirect.Type)
324-
} else {
325-
source.ForceRedirectConfig.Switch = 0
326-
}
327-
}
328-
329-
if target.Https != nil {
330-
if lo.FromPtr(target.Https.Http2Status) == "on" {
331-
source.Http2 = lo.ToPtr(int32(1))
332-
}
333-
}
334-
335-
return source
336-
}

pkg/core/deployer/providers/huaweicloud-cdn/internal/client.go

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,16 +26,6 @@ func (c *CdnClient) ListDomains(request *model.ListDomainsRequest) (*model.ListD
2626
}
2727
}
2828

29-
func (c *CdnClient) ShowDomainFullConfig(request *model.ShowDomainFullConfigRequest) (*model.ShowDomainFullConfigResponse, error) {
30-
requestDef := hwcdn.GenReqDefForShowDomainFullConfig()
31-
32-
if resp, err := c.HcClient.Sync(request, requestDef); err != nil {
33-
return nil, err
34-
} else {
35-
return resp.(*model.ShowDomainFullConfigResponse), nil
36-
}
37-
}
38-
3929
func (c *CdnClient) UpdateDomainMultiCertificates(request *model.UpdateDomainMultiCertificatesRequest) (*model.UpdateDomainMultiCertificatesResponse, error) {
4030
requestDef := hwcdn.GenReqDefForUpdateDomainMultiCertificates()
4131

0 commit comments

Comments
 (0)