@@ -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- }
0 commit comments