diff --git a/pkg/core/ssl-deployer/providers/tencentcloud-clb/tencentcloud_clb.go b/pkg/core/ssl-deployer/providers/tencentcloud-clb/tencentcloud_clb.go index dbde47153..ef50c4582 100644 --- a/pkg/core/ssl-deployer/providers/tencentcloud-clb/tencentcloud_clb.go +++ b/pkg/core/ssl-deployer/providers/tencentcloud-clb/tencentcloud_clb.go @@ -300,6 +300,33 @@ func (d *SSLDeployerProvider) deployToRuleDomain(ctx context.Context, cloudCertI return fmt.Errorf("failed to execute sdk request 'clb.ModifyDomainAttributes': %w", err) } + // 循环查询异步任务状态,等待任务状态变更 + // REF: https://cloud.tencent.com/document/product/214/30683 + for { + select { + case <-ctx.Done(): + return ctx.Err() + default: + } + + describeTaskStatusReq := tcclb.NewDescribeTaskStatusRequest() + describeTaskStatusReq.TaskId = modifyDomainAttributesResp.Response.RequestId + describeTaskStatusResp, err := d.sdkClients.CLB.DescribeTaskStatus(describeTaskStatusReq) + d.logger.Debug("sdk request 'clb.DescribeTaskStatus'", slog.Any("request", describeTaskStatusReq), slog.Any("response", describeTaskStatusResp)) + if err != nil { + return fmt.Errorf("failed to execute sdk request 'clb.DescribeTaskStatus': %w", err) + } + + if describeTaskStatusResp.Response.Status == nil || *describeTaskStatusResp.Response.Status == 1 { + return errors.New("unexpected task status") + } else if *describeTaskStatusResp.Response.Status == 0 { + break + } + + d.logger.Info("waiting for task completion ...") + time.Sleep(time.Second * 5) + } + return nil } @@ -335,6 +362,33 @@ func (d *SSLDeployerProvider) modifyListenerCertificate(ctx context.Context, clo return fmt.Errorf("failed to execute sdk request 'clb.ModifyListener': %w", err) } + // 循环查询异步任务状态,等待任务状态变更 + // REF: https://cloud.tencent.com/document/product/214/30683 + for { + select { + case <-ctx.Done(): + return ctx.Err() + default: + } + + describeTaskStatusReq := tcclb.NewDescribeTaskStatusRequest() + describeTaskStatusReq.TaskId = modifyListenerResp.Response.RequestId + describeTaskStatusResp, err := d.sdkClients.CLB.DescribeTaskStatus(describeTaskStatusReq) + d.logger.Debug("sdk request 'clb.DescribeTaskStatus'", slog.Any("request", describeTaskStatusReq), slog.Any("response", describeTaskStatusResp)) + if err != nil { + return fmt.Errorf("failed to execute sdk request 'clb.DescribeTaskStatus': %w", err) + } + + if describeTaskStatusResp.Response.Status == nil || *describeTaskStatusResp.Response.Status == 1 { + return errors.New("unexpected task status") + } else if *describeTaskStatusResp.Response.Status == 0 { + break + } + + d.logger.Info("waiting for task completion ...") + time.Sleep(time.Second * 5) + } + return nil }