From b620052b88fd91c0187a20898de31a46a281213a Mon Sep 17 00:00:00 2001 From: Fu Diwei Date: Mon, 17 Mar 2025 13:24:42 +0800 Subject: [PATCH] feat: adapt new logging to uploader, deployer and notifier providers --- internal/deployer/deployer.go | 6 +- internal/pkg/core/deployer/deployer.go | 7 +- .../1panel-console/1panel_console.go | 17 ++-- .../providers/1panel-site/1panel_site.go | 23 +++-- .../providers/aliyun-alb/aliyun_alb.go | 48 +++++----- .../aliyun-cas-deploy/aliyun_cas_deploy.go | 29 +++--- .../providers/aliyun-cdn/aliyun_cdn.go | 17 ++-- .../providers/aliyun-clb/aliyun_clb.go | 40 ++++---- .../providers/aliyun-dcdn/aliyun_dcdn.go | 17 ++-- .../providers/aliyun-esa/aliyun_esa.go | 22 +++-- .../providers/aliyun-esa/aliyun_esa_test.go | 2 +- .../deployer/providers/aliyun-fc/aliyun_fc.go | 26 ++--- .../providers/aliyun-fc/aliyun_fc_test.go | 10 +- .../providers/aliyun-live/aliyun_live.go | 17 ++-- .../providers/aliyun-nlb/aliyun_nlb.go | 34 +++---- .../providers/aliyun-oss/aliyun_oss.go | 20 ++-- .../providers/aliyun-vod/aliyun_vod.go | 17 ++-- .../providers/aliyun-waf/aliyun_waf.go | 39 +++++--- .../aws-cloudfront/aws_cloudfront.go | 25 ++--- .../baiducloud-cdn/baiducloud_cdn.go | 17 ++-- .../providers/baishan-cdn/baishan_cdn.go | 23 ++--- .../baotapanel-console/baotapanel_console.go | 20 ++-- .../baotapanel-site/baotapanel_site.go | 23 ++--- .../providers/byteplus-cdn/byteplus_cdn.go | 25 +++-- .../deployer/providers/cachefly/cachefly.go | 17 ++-- .../core/deployer/providers/cdnfly/cdnfly.go | 26 ++--- .../providers/dogecloud-cdn/dogecloud_cdn.go | 22 +++-- .../edgio-applications/edgio_applications.go | 17 ++-- .../deployer/providers/gcore-cdn/gcore_cdn.go | 23 +++-- .../huaweicloud-cdn/huaweicloud_cdn.go | 25 ++--- .../huaweicloud-elb/huaweicloud_elb.go | 47 +++++----- .../huaweicloud-waf/huaweicloud_waf.go | 35 +++---- .../providers/jdcloud-alb/jdcloud_alb.go | 34 +++---- .../providers/jdcloud-cdn/jdcloud_cdn.go | 23 +++-- .../providers/jdcloud-live/jdcloud_live.go | 17 ++-- .../providers/jdcloud-vod/jdcloud_vod.go | 21 +++-- .../providers/k8s-secret/k8s_secret.go | 23 +++-- .../core/deployer/providers/local/local.go | 40 ++++---- .../deployer/providers/qiniu-cdn/qiniu_cdn.go | 28 +++--- .../providers/qiniu-pili/qiniu_pili.go | 22 +++-- .../deployer/providers/safeline/safeline.go | 17 ++-- .../pkg/core/deployer/providers/ssh/ssh.go | 42 ++++----- .../tencentcloud-cdn/tencentcloud_cdn.go | 28 ++++-- .../tencentcloud-clb/tencentcloud_clb.go | 40 ++++---- .../tencentcloud-cos/tencentcloud_cos.go | 22 +++-- .../tencentcloud-css/tencentcloud_css.go | 22 +++-- .../tencentcloud-ecdn/tencentcloud_ecdn.go | 27 ++++-- .../tencentcloud-eo/tencentcloud_eo.go | 22 +++-- .../tencentcloud-scf/tencentcloud_scf.go | 23 +++-- .../tencentcloud_ssl_deploy.go | 28 +++--- .../tencentcloud-vod/tencentcloud_vod.go | 20 ++-- .../tencentcloud-waf/tencentcloud_waf.go | 23 +++-- .../providers/ucloud-ucdn/ucloud_ucdn.go | 25 ++--- .../providers/ucloud-us3/ucloud_us3.go | 24 +++-- .../volcengine-cdn/volcengine_cdn.go | 25 +++-- .../volcengine-clb/volcengine_clb.go | 22 +++-- .../volcengine-dcdn/volcengine_dcdn.go | 22 +++-- .../volcengine-imagex/volcengine_imagex.go | 23 +++-- .../volcengine-live/volcengine_live.go | 26 ++--- .../volcengine-tos/volcengine_tos.go | 22 +++-- .../deployer/providers/webhook/webhook.go | 20 ++-- internal/pkg/core/logger/builtin.go | 94 ------------------- internal/pkg/core/logger/logger.go | 27 ------ internal/pkg/core/logger/logger_test.go | 56 ----------- internal/pkg/core/notifier/notifier.go | 7 +- .../pkg/core/notifier/providers/bark/bark.go | 11 +++ .../notifier/providers/dingtalk/dingtalk.go | 11 +++ .../core/notifier/providers/email/email.go | 11 +++ .../pkg/core/notifier/providers/lark/lark.go | 11 +++ .../providers/serverchan/serverchan.go | 11 +++ .../notifier/providers/telegram/telegram.go | 11 +++ .../notifier/providers/webhook/webhook.go | 11 +++ .../core/notifier/providers/wecom/wecom.go | 11 +++ .../providers/1panel-ssl/1panel_ssl.go | 17 +++- .../providers/aliyun-cas/aliyun_cas.go | 42 ++++++--- .../providers/aliyun-slb/aliyun_slb.go | 39 +++++--- .../uploader/providers/aws-acm/aws_acm.go | 37 +++++--- .../azure-keyvault/azure_keyvault.go | 15 +++ .../providers/byteplus-cdn/byteplus_cdn.go | 37 +++++--- .../uploader/providers/dogecloud/dogecloud.go | 26 +++-- .../uploader/providers/gcore-cdn/gcore_cdn.go | 13 +++ .../huaweicloud-elb/huaweicloud_elb.go | 61 +++++++----- .../huaweicloud-scm/huaweicloud_scm.go | 48 ++++++---- .../huaweicloud-waf/huaweicloud_waf.go | 62 +++++++----- .../providers/jdcloud-ssl/jdcloud_ssl.go | 35 +++++-- .../providers/qiniu-sslcert/qiniu_sslcert.go | 26 +++-- .../tencentcloud-ssl/tencentcloud_ssl.go | 28 ++++-- .../providers/ucloud-ussl/ucloud_ussl.go | 61 +++++++----- .../volcengine-cdn/volcengine_cdn.go | 27 ++++-- .../volcengine_certcenter.go | 29 ++++-- .../volcengine-live/volcengine_live.go | 32 +++++-- internal/pkg/core/uploader/uploader.go | 7 +- 92 files changed, 1358 insertions(+), 1023 deletions(-) delete mode 100644 internal/pkg/core/logger/builtin.go delete mode 100644 internal/pkg/core/logger/logger.go delete mode 100644 internal/pkg/core/logger/logger_test.go diff --git a/internal/deployer/deployer.go b/internal/deployer/deployer.go index f95442a6..1fc1925f 100644 --- a/internal/deployer/deployer.go +++ b/internal/deployer/deployer.go @@ -3,10 +3,10 @@ package deployer import ( "context" "fmt" + "log/slog" "github.com/usual2970/certimate/internal/domain" "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/logger" "github.com/usual2970/certimate/internal/repository" ) @@ -52,7 +52,7 @@ func NewWithDeployNode(node *domain.WorkflowNode, certdata struct { } return &proxyDeployer{ - logger: logger.NewNilLogger(), + logger: slog.Default(), deployer: deployer, deployCertificate: certdata.Certificate, deployPrivateKey: certdata.PrivateKey, @@ -61,7 +61,7 @@ func NewWithDeployNode(node *domain.WorkflowNode, certdata struct { // TODO: 暂时使用代理模式以兼容之前版本代码,后续重新实现此处逻辑 type proxyDeployer struct { - logger logger.Logger + logger *slog.Logger deployer deployer.Deployer deployCertificate string deployPrivateKey string diff --git a/internal/pkg/core/deployer/deployer.go b/internal/pkg/core/deployer/deployer.go index 78d7c7de..54b206bd 100644 --- a/internal/pkg/core/deployer/deployer.go +++ b/internal/pkg/core/deployer/deployer.go @@ -1,10 +1,15 @@ package deployer -import "context" +import ( + "context" + "log/slog" +) // 表示定义证书部署器的抽象类型接口。 // 注意与 `Uploader` 区分,“部署”通常为“上传”的后置操作。 type Deployer interface { + WithLogger(logger *slog.Logger) Deployer + // 部署证书。 // // 入参: diff --git a/internal/pkg/core/deployer/providers/1panel-console/1panel_console.go b/internal/pkg/core/deployer/providers/1panel-console/1panel_console.go index 512b5296..91143aa6 100644 --- a/internal/pkg/core/deployer/providers/1panel-console/1panel_console.go +++ b/internal/pkg/core/deployer/providers/1panel-console/1panel_console.go @@ -4,12 +4,12 @@ import ( "context" "crypto/tls" "errors" + "log/slog" "net/url" xerrors "github.com/pkg/errors" "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/logger" opsdk "github.com/usual2970/certimate/internal/pkg/vendors/1panel-sdk" ) @@ -26,7 +26,7 @@ type DeployerConfig struct { type DeployerProvider struct { config *DeployerConfig - logger logger.Logger + logger *slog.Logger sdkClient *opsdk.Client } @@ -44,13 +44,17 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { return &DeployerProvider{ config: config, - logger: logger.NewNilLogger(), + logger: slog.Default(), sdkClient: client, }, nil } -func (d *DeployerProvider) WithLogger(logger logger.Logger) *DeployerProvider { - d.logger = logger +func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { + if logger == nil { + d.logger = slog.Default() + } else { + d.logger = logger + } return d } @@ -68,10 +72,9 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe updateSystemSSLReq.AutoRestart = "false" } updateSystemSSLResp, err := d.sdkClient.UpdateSystemSSL(updateSystemSSLReq) + d.logger.Debug("sdk request '1panel.UpdateSystemSSL'", slog.Any("request", updateSystemSSLReq), slog.Any("response", updateSystemSSLResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request '1panel.UpdateSystemSSL'") - } else { - d.logger.Logt("已设置面板 SSL 证书", updateSystemSSLResp) } return &deployer.DeployResult{}, nil diff --git a/internal/pkg/core/deployer/providers/1panel-site/1panel_site.go b/internal/pkg/core/deployer/providers/1panel-site/1panel_site.go index cdad354a..6aa34607 100644 --- a/internal/pkg/core/deployer/providers/1panel-site/1panel_site.go +++ b/internal/pkg/core/deployer/providers/1panel-site/1panel_site.go @@ -4,13 +4,13 @@ import ( "context" "crypto/tls" "errors" + "log/slog" "net/url" "strconv" xerrors "github.com/pkg/errors" "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/logger" "github.com/usual2970/certimate/internal/pkg/core/uploader" uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/1panel-ssl" opsdk "github.com/usual2970/certimate/internal/pkg/vendors/1panel-sdk" @@ -29,7 +29,7 @@ type DeployerConfig struct { type DeployerProvider struct { config *DeployerConfig - logger logger.Logger + logger *slog.Logger sdkClient *opsdk.Client sslUploader uploader.Uploader } @@ -56,14 +56,19 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { return &DeployerProvider{ config: config, - logger: logger.NewNilLogger(), + logger: slog.Default(), sdkClient: client, sslUploader: uploader, }, nil } -func (d *DeployerProvider) WithLogger(logger logger.Logger) *DeployerProvider { - d.logger = logger +func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { + if logger == nil { + d.logger = slog.Default() + } else { + d.logger = logger + } + d.sslUploader.WithLogger(logger) return d } @@ -73,10 +78,9 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe WebsiteID: d.config.WebsiteId, } getHttpsConfResp, err := d.sdkClient.GetHttpsConf(getHttpsConfReq) + d.logger.Debug("sdk request '1panel.GetHttpsConf'", slog.Any("request", getHttpsConfReq), slog.Any("response", getHttpsConfResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request '1panel.GetHttpsConf'") - } else { - d.logger.Logt("已获取网站 HTTPS 配置", getHttpsConfResp) } // 上传证书到面板 @@ -84,7 +88,7 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe if err != nil { return nil, xerrors.Wrap(err, "failed to upload certificate file") } else { - d.logger.Logt("certificate file uploaded", upres) + d.logger.Info("ssl certificate uploaded", slog.Any("result", upres)) } // 修改网站 HTTPS 配置 @@ -100,10 +104,9 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe Hsts: getHttpsConfResp.Data.Hsts, } updateHttpsConfResp, err := d.sdkClient.UpdateHttpsConf(updateHttpsConfReq) + d.logger.Debug("sdk request '1panel.UpdateHttpsConf'", slog.Any("request", updateHttpsConfReq), slog.Any("response", updateHttpsConfResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request '1panel.UpdateHttpsConf'") - } else { - d.logger.Logt("已获取网站 HTTPS 配置", updateHttpsConfResp) } return &deployer.DeployResult{}, nil diff --git a/internal/pkg/core/deployer/providers/aliyun-alb/aliyun_alb.go b/internal/pkg/core/deployer/providers/aliyun-alb/aliyun_alb.go index 8c25bc25..ae088602 100644 --- a/internal/pkg/core/deployer/providers/aliyun-alb/aliyun_alb.go +++ b/internal/pkg/core/deployer/providers/aliyun-alb/aliyun_alb.go @@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + "log/slog" "strconv" "strings" "time" @@ -16,7 +17,6 @@ import ( "golang.org/x/exp/slices" "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/logger" "github.com/usual2970/certimate/internal/pkg/core/uploader" uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/aliyun-cas" ) @@ -43,7 +43,7 @@ type DeployerConfig struct { type DeployerProvider struct { config *DeployerConfig - logger logger.Logger + logger *slog.Logger sdkClients *wSdkClients sslUploader uploader.Uploader } @@ -72,14 +72,19 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { return &DeployerProvider{ config: config, - logger: logger.NewNilLogger(), + logger: slog.Default(), sdkClients: clients, sslUploader: uploader, }, nil } -func (d *DeployerProvider) WithLogger(logger logger.Logger) *DeployerProvider { - d.logger = logger +func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { + if logger == nil { + d.logger = slog.Default() + } else { + d.logger = logger + } + d.sslUploader.WithLogger(logger) return d } @@ -88,10 +93,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe upres, err := d.sslUploader.Upload(ctx, certPem, privkeyPem) if err != nil { return nil, xerrors.Wrap(err, "failed to upload certificate file") + } else { + d.logger.Info("ssl certificate uploaded", slog.Any("result", upres)) } - d.logger.Logt("certificate file uploaded", upres) - // 根据部署资源类型决定部署方式 switch d.config.ResourceType { case RESOURCE_TYPE_LOADBALANCER: @@ -122,12 +127,11 @@ func (d *DeployerProvider) deployToLoadbalancer(ctx context.Context, cloudCertId LoadBalancerId: tea.String(d.config.LoadbalancerId), } getLoadBalancerAttributeResp, err := d.sdkClients.alb.GetLoadBalancerAttribute(getLoadBalancerAttributeReq) + d.logger.Debug("sdk request 'alb.GetLoadBalancerAttribute'", slog.Any("request", getLoadBalancerAttributeReq), slog.Any("response", getLoadBalancerAttributeResp)) if err != nil { return xerrors.Wrap(err, "failed to execute sdk request 'alb.GetLoadBalancerAttribute'") } - d.logger.Logt("已查询到 ALB 负载均衡实例", getLoadBalancerAttributeResp) - // 查询 HTTPS 监听列表 // REF: https://help.aliyun.com/zh/slb/application-load-balancer/developer-reference/api-alb-2020-06-16-listlisteners listenerIds := make([]string, 0) @@ -141,6 +145,7 @@ func (d *DeployerProvider) deployToLoadbalancer(ctx context.Context, cloudCertId ListenerProtocol: tea.String("HTTPS"), } listListenersResp, err := d.sdkClients.alb.ListListeners(listListenersReq) + d.logger.Debug("sdk request 'alb.ListListeners'", slog.Any("request", listListenersReq), slog.Any("response", listListenersResp)) if err != nil { return xerrors.Wrap(err, "failed to execute sdk request 'alb.ListListeners'") } @@ -158,8 +163,6 @@ func (d *DeployerProvider) deployToLoadbalancer(ctx context.Context, cloudCertId } } - d.logger.Logt("已查询到 ALB 负载均衡实例下的全部 HTTPS 监听", listenerIds) - // 查询 QUIC 监听列表 // REF: https://help.aliyun.com/zh/slb/application-load-balancer/developer-reference/api-alb-2020-06-16-listlisteners listListenersToken = nil @@ -171,6 +174,7 @@ func (d *DeployerProvider) deployToLoadbalancer(ctx context.Context, cloudCertId ListenerProtocol: tea.String("QUIC"), } listListenersResp, err := d.sdkClients.alb.ListListeners(listListenersReq) + d.logger.Debug("sdk request 'alb.ListListeners'", slog.Any("request", listListenersReq), slog.Any("response", listListenersResp)) if err != nil { return xerrors.Wrap(err, "failed to execute sdk request 'alb.ListListeners'") } @@ -188,13 +192,12 @@ func (d *DeployerProvider) deployToLoadbalancer(ctx context.Context, cloudCertId } } - d.logger.Logt("已查询到 ALB 负载均衡实例下的全部 QUIC 监听", listenerIds) - // 遍历更新监听证书 if len(listenerIds) == 0 { - return errors.New("listener not found") + d.logger.Info("no alb listeners to deploy") } else { var errs []error + d.logger.Info("found https/quic listeners to deploy", slog.Any("listenerIds", listenerIds)) for _, listenerId := range listenerIds { if err := d.updateListenerCertificate(ctx, listenerId, cloudCertId); err != nil { @@ -230,12 +233,11 @@ func (d *DeployerProvider) updateListenerCertificate(ctx context.Context, cloudL ListenerId: tea.String(cloudListenerId), } getListenerAttributeResp, err := d.sdkClients.alb.GetListenerAttribute(getListenerAttributeReq) + d.logger.Debug("sdk request 'alb.GetListenerAttribute'", slog.Any("request", getListenerAttributeReq), slog.Any("response", getListenerAttributeResp)) if err != nil { return xerrors.Wrap(err, "failed to execute sdk request 'alb.GetListenerAttribute'") } - d.logger.Logt("已查询到 ALB 监听配置", getListenerAttributeResp) - if d.config.Domain == "" { // 未指定 SNI,只需部署到监听器 @@ -248,11 +250,10 @@ func (d *DeployerProvider) updateListenerCertificate(ctx context.Context, cloudL }}, } updateListenerAttributeResp, err := d.sdkClients.alb.UpdateListenerAttribute(updateListenerAttributeReq) + d.logger.Debug("sdk request 'alb.UpdateListenerAttribute'", slog.Any("request", updateListenerAttributeReq), slog.Any("response", updateListenerAttributeResp)) if err != nil { return xerrors.Wrap(err, "failed to execute sdk request 'alb.UpdateListenerAttribute'") } - - d.logger.Logt("已更新 ALB 监听配置", updateListenerAttributeResp) } else { // 指定 SNI,需部署到扩展域名 @@ -269,6 +270,7 @@ func (d *DeployerProvider) updateListenerCertificate(ctx context.Context, cloudL CertificateType: tea.String("Server"), } listListenerCertificatesResp, err := d.sdkClients.alb.ListListenerCertificates(listListenerCertificatesReq) + d.logger.Debug("sdk request 'alb.ListListenerCertificates'", slog.Any("request", listListenerCertificatesReq), slog.Any("response", listListenerCertificatesResp)) if err != nil { return xerrors.Wrap(err, "failed to execute sdk request 'alb.ListListenerCertificates'") } @@ -286,14 +288,13 @@ func (d *DeployerProvider) updateListenerCertificate(ctx context.Context, cloudL } } - d.logger.Logt("已查询到 ALB 监听下全部证书", listenerCertificates) - // 遍历查询监听证书,并找出需要解除关联的证书 // REF: https://help.aliyun.com/zh/slb/application-load-balancer/developer-reference/api-alb-2020-06-16-listlistenercertificates // REF: https://help.aliyun.com/zh/ssl-certificate/developer-reference/api-cas-2020-04-07-getusercertificatedetail certificateIsAssociated := false certificateIdsExpired := make([]string, 0) if len(listenerCertificates) > 0 { + d.logger.Info("found listener certificates to deploy", slog.Any("listenerCertificates", listenerCertificates)) var errs []error for _, listenerCertificate := range listenerCertificates { @@ -318,6 +319,7 @@ func (d *DeployerProvider) updateListenerCertificate(ctx context.Context, cloudL CertId: tea.Int64(certificateIdAsInt64), } getUserCertificateDetailResp, err := d.sdkClients.cas.GetUserCertificateDetail(getUserCertificateDetailReq) + d.logger.Debug("sdk request 'cas.GetUserCertificateDetail'", slog.Any("request", getUserCertificateDetailReq), slog.Any("response", getUserCertificateDetailResp)) if err != nil { errs = append(errs, xerrors.Wrap(err, "failed to execute sdk request 'cas.GetUserCertificateDetail'")) continue @@ -354,11 +356,10 @@ func (d *DeployerProvider) updateListenerCertificate(ctx context.Context, cloudL }, } associateAdditionalCertificatesFromListenerResp, err := d.sdkClients.alb.AssociateAdditionalCertificatesWithListener(associateAdditionalCertificatesFromListenerReq) + d.logger.Debug("sdk request 'alb.AssociateAdditionalCertificatesWithListener'", slog.Any("request", associateAdditionalCertificatesFromListenerReq), slog.Any("response", associateAdditionalCertificatesFromListenerResp)) if err != nil { return xerrors.Wrap(err, "failed to execute sdk request 'alb.AssociateAdditionalCertificatesWithListener'") } - - d.logger.Logt("已关联 ALB 监听和扩展证书", associateAdditionalCertificatesFromListenerResp) } // 解除关联监听和扩展证书 @@ -376,11 +377,10 @@ func (d *DeployerProvider) updateListenerCertificate(ctx context.Context, cloudL Certificates: dissociateAdditionalCertificates, } dissociateAdditionalCertificatesFromListenerResp, err := d.sdkClients.alb.DissociateAdditionalCertificatesFromListener(dissociateAdditionalCertificatesFromListenerReq) + d.logger.Debug("sdk request 'alb.DissociateAdditionalCertificatesFromListener'", slog.Any("request", dissociateAdditionalCertificatesFromListenerReq), slog.Any("response", dissociateAdditionalCertificatesFromListenerResp)) if err != nil { return xerrors.Wrap(err, "failed to execute sdk request 'alb.DissociateAdditionalCertificatesFromListener'") } - - d.logger.Logt("已解除关联 ALB 监听和扩展证书", dissociateAdditionalCertificatesFromListenerResp) } } diff --git a/internal/pkg/core/deployer/providers/aliyun-cas-deploy/aliyun_cas_deploy.go b/internal/pkg/core/deployer/providers/aliyun-cas-deploy/aliyun_cas_deploy.go index fa045521..4a95e5ad 100644 --- a/internal/pkg/core/deployer/providers/aliyun-cas-deploy/aliyun_cas_deploy.go +++ b/internal/pkg/core/deployer/providers/aliyun-cas-deploy/aliyun_cas_deploy.go @@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + "log/slog" "strings" "time" @@ -13,7 +14,6 @@ import ( xerrors "github.com/pkg/errors" "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/logger" "github.com/usual2970/certimate/internal/pkg/core/uploader" uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/aliyun-cas" ) @@ -34,7 +34,7 @@ type DeployerConfig struct { type DeployerProvider struct { config *DeployerConfig - logger logger.Logger + logger *slog.Logger sdkClient *aliyunCas.Client sslUploader uploader.Uploader } @@ -58,14 +58,19 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { return &DeployerProvider{ config: config, - logger: logger.NewNilLogger(), + logger: slog.Default(), sdkClient: client, sslUploader: uploader, }, nil } -func (d *DeployerProvider) WithLogger(logger logger.Logger) *DeployerProvider { - d.logger = logger +func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { + if logger == nil { + d.logger = slog.Default() + } else { + d.logger = logger + } + d.sslUploader.WithLogger(logger) return d } @@ -78,10 +83,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe upres, err := d.sslUploader.Upload(ctx, certPem, privkeyPem) if err != nil { return nil, xerrors.Wrap(err, "failed to upload certificate file") + } else { + d.logger.Info("ssl certificate uploaded", slog.Any("result", upres)) } - d.logger.Logt("certificate file uploaded", upres) - contactIds := d.config.ContactIds if len(contactIds) == 0 { // 获取联系人列表 @@ -90,6 +95,7 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe listContactReq.ShowSize = tea.Int32(1) listContactReq.CurrentPage = tea.Int32(1) listContactResp, err := d.sdkClient.ListContact(listContactReq) + d.logger.Debug("sdk request 'cas.ListContact'", slog.Any("request", listContactReq), slog.Any("response", listContactResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'cas.ListContact'") } @@ -109,12 +115,11 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe ContactIds: tea.String(strings.Join(contactIds, ",")), } createDeploymentJobResp, err := d.sdkClient.CreateDeploymentJob(createDeploymentJobReq) + d.logger.Debug("sdk request 'cas.CreateDeploymentJob'", slog.Any("request", createDeploymentJobReq), slog.Any("response", createDeploymentJobResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'cas.CreateDeploymentJob'") } - d.logger.Logt("已创建部署任务", createDeploymentJobResp) - // 循环获取部署任务详情,等待任务状态变更 // REF: https://help.aliyun.com/zh/ssl-certificate/developer-reference/api-cas-2020-04-07-describedeploymentjob for { @@ -126,20 +131,20 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe JobId: createDeploymentJobResp.Body.JobId, } describeDeploymentJobResp, err := d.sdkClient.DescribeDeploymentJob(describeDeploymentJobReq) + d.logger.Debug("sdk request 'cas.DescribeDeploymentJob'", slog.Any("request", describeDeploymentJobReq), slog.Any("response", describeDeploymentJobResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'cas.DescribeDeploymentJob'") } if describeDeploymentJobResp.Body.Status == nil || *describeDeploymentJobResp.Body.Status == "editing" { - return nil, errors.New("部署任务状态异常") + return nil, errors.New("unexpected deployment job status") } if *describeDeploymentJobResp.Body.Status == "success" || *describeDeploymentJobResp.Body.Status == "error" { - d.logger.Logt("已获取部署任务详情", describeDeploymentJobResp) break } - d.logger.Logt("部署任务未完成 ...") + d.logger.Info("waiting for deployment job completion ...") time.Sleep(time.Second * 5) } diff --git a/internal/pkg/core/deployer/providers/aliyun-cdn/aliyun_cdn.go b/internal/pkg/core/deployer/providers/aliyun-cdn/aliyun_cdn.go index b0edd415..8f61837f 100644 --- a/internal/pkg/core/deployer/providers/aliyun-cdn/aliyun_cdn.go +++ b/internal/pkg/core/deployer/providers/aliyun-cdn/aliyun_cdn.go @@ -3,6 +3,7 @@ import ( "context" "fmt" + "log/slog" "strings" "time" @@ -12,7 +13,6 @@ import ( xerrors "github.com/pkg/errors" "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/logger" ) type DeployerConfig struct { @@ -26,7 +26,7 @@ type DeployerConfig struct { type DeployerProvider struct { config *DeployerConfig - logger logger.Logger + logger *slog.Logger sdkClient *aliyunCdn.Client } @@ -44,13 +44,17 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { return &DeployerProvider{ config: config, - logger: logger.NewNilLogger(), + logger: slog.Default(), sdkClient: client, }, nil } -func (d *DeployerProvider) WithLogger(logger logger.Logger) *DeployerProvider { - d.logger = logger +func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { + if logger == nil { + d.logger = slog.Default() + } else { + d.logger = logger + } return d } @@ -69,12 +73,11 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe SSLPri: tea.String(privkeyPem), } setCdnDomainSSLCertificateResp, err := d.sdkClient.SetCdnDomainSSLCertificate(setCdnDomainSSLCertificateReq) + d.logger.Debug("sdk request 'cdn.SetCdnDomainSSLCertificate'", slog.Any("request", setCdnDomainSSLCertificateReq), slog.Any("response", setCdnDomainSSLCertificateResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'cdn.SetCdnDomainSSLCertificate'") } - d.logger.Logt("已设置 CDN 域名证书", setCdnDomainSSLCertificateResp) - return &deployer.DeployResult{}, nil } diff --git a/internal/pkg/core/deployer/providers/aliyun-clb/aliyun_clb.go b/internal/pkg/core/deployer/providers/aliyun-clb/aliyun_clb.go index 304a7131..fe0d3a44 100644 --- a/internal/pkg/core/deployer/providers/aliyun-clb/aliyun_clb.go +++ b/internal/pkg/core/deployer/providers/aliyun-clb/aliyun_clb.go @@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + "log/slog" aliyunOpen "github.com/alibabacloud-go/darabonba-openapi/v2/client" aliyunSlb "github.com/alibabacloud-go/slb-20140515/v4/client" @@ -11,7 +12,6 @@ import ( xerrors "github.com/pkg/errors" "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/logger" "github.com/usual2970/certimate/internal/pkg/core/uploader" uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/aliyun-slb" ) @@ -38,7 +38,7 @@ type DeployerConfig struct { type DeployerProvider struct { config *DeployerConfig - logger logger.Logger + logger *slog.Logger sdkClient *aliyunSlb.Client sslUploader uploader.Uploader } @@ -66,14 +66,19 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { return &DeployerProvider{ config: config, - logger: logger.NewNilLogger(), + logger: slog.Default(), sdkClient: client, sslUploader: uploader, }, nil } -func (d *DeployerProvider) WithLogger(logger logger.Logger) *DeployerProvider { - d.logger = logger +func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { + if logger == nil { + d.logger = slog.Default() + } else { + d.logger = logger + } + d.sslUploader.WithLogger(logger) return d } @@ -82,10 +87,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe upres, err := d.sslUploader.Upload(ctx, certPem, privkeyPem) if err != nil { return nil, xerrors.Wrap(err, "failed to upload certificate file") + } else { + d.logger.Info("ssl certificate uploaded", slog.Any("result", upres)) } - d.logger.Logt("certificate file uploaded", upres) - // 根据部署资源类型决定部署方式 switch d.config.ResourceType { case RESOURCE_TYPE_LOADBALANCER: @@ -117,12 +122,11 @@ func (d *DeployerProvider) deployToLoadbalancer(ctx context.Context, cloudCertId LoadBalancerId: tea.String(d.config.LoadbalancerId), } describeLoadBalancerAttributeResp, err := d.sdkClient.DescribeLoadBalancerAttribute(describeLoadBalancerAttributeReq) + d.logger.Debug("sdk request 'slb.DescribeLoadBalancerAttribute'", slog.Any("request", describeLoadBalancerAttributeReq), slog.Any("response", describeLoadBalancerAttributeResp)) if err != nil { return xerrors.Wrap(err, "failed to execute sdk request 'slb.DescribeLoadBalancerAttribute'") } - d.logger.Logt("已查询到 CLB 负载均衡实例", describeLoadBalancerAttributeResp) - // 查询 HTTPS 监听列表 // REF: https://help.aliyun.com/zh/slb/classic-load-balancer/developer-reference/api-slb-2014-05-15-describeloadbalancerlisteners listenerPorts := make([]int32, 0) @@ -137,6 +141,7 @@ func (d *DeployerProvider) deployToLoadbalancer(ctx context.Context, cloudCertId ListenerProtocol: tea.String("https"), } describeLoadBalancerListenersResp, err := d.sdkClient.DescribeLoadBalancerListeners(describeLoadBalancerListenersReq) + d.logger.Debug("sdk request 'slb.DescribeLoadBalancerListeners'", slog.Any("request", describeLoadBalancerListenersReq), slog.Any("response", describeLoadBalancerListenersResp)) if err != nil { return xerrors.Wrap(err, "failed to execute sdk request 'slb.DescribeLoadBalancerListeners'") } @@ -154,12 +159,11 @@ func (d *DeployerProvider) deployToLoadbalancer(ctx context.Context, cloudCertId } } - d.logger.Logt("已查询到 CLB 负载均衡实例下的全部 HTTPS 监听", listenerPorts) - // 遍历更新监听证书 if len(listenerPorts) == 0 { - return errors.New("listener not found") + d.logger.Info("no clb listeners to deploy") } else { + d.logger.Info("found https listeners to deploy", slog.Any("listenerPorts", listenerPorts)) var errs []error for _, listenerPort := range listenerPorts { @@ -200,12 +204,11 @@ func (d *DeployerProvider) updateListenerCertificate(ctx context.Context, cloudL ListenerPort: tea.Int32(cloudListenerPort), } describeLoadBalancerHTTPSListenerAttributeResp, err := d.sdkClient.DescribeLoadBalancerHTTPSListenerAttribute(describeLoadBalancerHTTPSListenerAttributeReq) + d.logger.Debug("sdk request 'slb.DescribeLoadBalancerHTTPSListenerAttribute'", slog.Any("request", describeLoadBalancerHTTPSListenerAttributeReq), slog.Any("response", describeLoadBalancerHTTPSListenerAttributeResp)) if err != nil { return xerrors.Wrap(err, "failed to execute sdk request 'slb.DescribeLoadBalancerHTTPSListenerAttribute'") } - d.logger.Logt("已查询到 CLB HTTPS 监听配置", describeLoadBalancerHTTPSListenerAttributeResp) - if d.config.Domain == "" { // 未指定 SNI,只需部署到监听器 @@ -218,11 +221,10 @@ func (d *DeployerProvider) updateListenerCertificate(ctx context.Context, cloudL ServerCertificateId: tea.String(cloudCertId), } setLoadBalancerHTTPSListenerAttributeResp, err := d.sdkClient.SetLoadBalancerHTTPSListenerAttribute(setLoadBalancerHTTPSListenerAttributeReq) + d.logger.Debug("sdk request 'slb.SetLoadBalancerHTTPSListenerAttribute'", slog.Any("request", setLoadBalancerHTTPSListenerAttributeReq), slog.Any("response", setLoadBalancerHTTPSListenerAttributeResp)) if err != nil { return xerrors.Wrap(err, "failed to execute sdk request 'slb.SetLoadBalancerHTTPSListenerAttribute'") } - - d.logger.Logt("已更新 CLB HTTPS 监听配置", setLoadBalancerHTTPSListenerAttributeResp) } else { // 指定 SNI,需部署到扩展域名 @@ -234,12 +236,11 @@ func (d *DeployerProvider) updateListenerCertificate(ctx context.Context, cloudL ListenerPort: tea.Int32(cloudListenerPort), } describeDomainExtensionsResp, err := d.sdkClient.DescribeDomainExtensions(describeDomainExtensionsReq) + d.logger.Debug("sdk request 'slb.DescribeDomainExtensions'", slog.Any("request", describeDomainExtensionsReq), slog.Any("response", describeDomainExtensionsResp)) if err != nil { return xerrors.Wrap(err, "failed to execute sdk request 'slb.DescribeDomainExtensions'") } - d.logger.Logt("已查询到 CLB 扩展域名", describeDomainExtensionsResp) - // 遍历修改扩展域名 // REF: https://help.aliyun.com/zh/slb/classic-load-balancer/developer-reference/api-slb-2014-05-15-setdomainextensionattribute if describeDomainExtensionsResp.Body.DomainExtensions != nil && describeDomainExtensionsResp.Body.DomainExtensions.DomainExtension != nil { @@ -256,12 +257,11 @@ func (d *DeployerProvider) updateListenerCertificate(ctx context.Context, cloudL ServerCertificateId: tea.String(cloudCertId), } setDomainExtensionAttributeResp, err := d.sdkClient.SetDomainExtensionAttribute(setDomainExtensionAttributeReq) + d.logger.Debug("sdk request 'slb.SetDomainExtensionAttribute'", slog.Any("request", setDomainExtensionAttributeReq), slog.Any("response", setDomainExtensionAttributeResp)) if err != nil { errs = append(errs, xerrors.Wrap(err, "failed to execute sdk request 'slb.SetDomainExtensionAttribute'")) continue } - - d.logger.Logt("已修改 CLB 扩展域名", setDomainExtensionAttributeResp) } if len(errs) > 0 { diff --git a/internal/pkg/core/deployer/providers/aliyun-dcdn/aliyun_dcdn.go b/internal/pkg/core/deployer/providers/aliyun-dcdn/aliyun_dcdn.go index bfa28e7b..0ca22a6e 100644 --- a/internal/pkg/core/deployer/providers/aliyun-dcdn/aliyun_dcdn.go +++ b/internal/pkg/core/deployer/providers/aliyun-dcdn/aliyun_dcdn.go @@ -3,6 +3,7 @@ import ( "context" "fmt" + "log/slog" "strings" "time" @@ -12,7 +13,6 @@ import ( xerrors "github.com/pkg/errors" "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/logger" ) type DeployerConfig struct { @@ -26,7 +26,7 @@ type DeployerConfig struct { type DeployerProvider struct { config *DeployerConfig - logger logger.Logger + logger *slog.Logger sdkClient *aliyunDcdn.Client } @@ -44,13 +44,17 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { return &DeployerProvider{ config: config, - logger: logger.NewNilLogger(), + logger: slog.Default(), sdkClient: client, }, nil } -func (d *DeployerProvider) WithLogger(logger logger.Logger) *DeployerProvider { - d.logger = logger +func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { + if logger == nil { + d.logger = slog.Default() + } else { + d.logger = logger + } return d } @@ -69,12 +73,11 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe SSLPri: tea.String(privkeyPem), } setDcdnDomainSSLCertificateResp, err := d.sdkClient.SetDcdnDomainSSLCertificate(setDcdnDomainSSLCertificateReq) + d.logger.Debug("sdk request 'dcdn.SetDcdnDomainSSLCertificate'", slog.Any("request", setDcdnDomainSSLCertificateReq), slog.Any("response", setDcdnDomainSSLCertificateResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'dcdn.SetDcdnDomainSSLCertificate'") } - d.logger.Logt("已配置 DCDN 域名证书", setDcdnDomainSSLCertificateResp) - return &deployer.DeployResult{}, nil } diff --git a/internal/pkg/core/deployer/providers/aliyun-esa/aliyun_esa.go b/internal/pkg/core/deployer/providers/aliyun-esa/aliyun_esa.go index 5134d115..aa7e60c1 100644 --- a/internal/pkg/core/deployer/providers/aliyun-esa/aliyun_esa.go +++ b/internal/pkg/core/deployer/providers/aliyun-esa/aliyun_esa.go @@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + "log/slog" "strconv" "strings" @@ -13,7 +14,6 @@ import ( xerrors "github.com/pkg/errors" "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/logger" "github.com/usual2970/certimate/internal/pkg/core/uploader" uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/aliyun-cas" ) @@ -31,7 +31,7 @@ type DeployerConfig struct { type DeployerProvider struct { config *DeployerConfig - logger logger.Logger + logger *slog.Logger sdkClient *aliyunEsa.Client sslUploader uploader.Uploader } @@ -55,14 +55,19 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { return &DeployerProvider{ config: config, - logger: logger.NewNilLogger(), + logger: slog.Default(), sdkClient: client, sslUploader: uploader, }, nil } -func (d *DeployerProvider) WithLogger(logger logger.Logger) *DeployerProvider { - d.logger = logger +func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { + if logger == nil { + d.logger = slog.Default() + } else { + d.logger = logger + } + d.sslUploader.WithLogger(logger) return d } @@ -75,10 +80,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe upres, err := d.sslUploader.Upload(ctx, certPem, privkeyPem) if err != nil { return nil, xerrors.Wrap(err, "failed to upload certificate file") + } else { + d.logger.Info("ssl certificate uploaded", slog.Any("result", upres)) } - d.logger.Logt("certificate file uploaded", upres) - // 配置站点证书 // REF: https://help.aliyun.com/zh/edge-security-acceleration/esa/api-esa-2024-09-10-setcertificate certId, _ := strconv.ParseInt(upres.CertId, 10, 64) @@ -88,12 +93,11 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe CasId: tea.Int64(certId), } setCertificateResp, err := d.sdkClient.SetCertificate(setCertificateReq) + d.logger.Debug("sdk request 'esa.SetCertificate'", slog.Any("request", setCertificateReq), slog.Any("response", setCertificateResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'esa.SetCertificate'") } - d.logger.Logt("已配置站点证书", setCertificateResp) - return &deployer.DeployResult{}, nil } diff --git a/internal/pkg/core/deployer/providers/aliyun-esa/aliyun_esa_test.go b/internal/pkg/core/deployer/providers/aliyun-esa/aliyun_esa_test.go index 9a2c4ca0..0877d561 100644 --- a/internal/pkg/core/deployer/providers/aliyun-esa/aliyun_esa_test.go +++ b/internal/pkg/core/deployer/providers/aliyun-esa/aliyun_esa_test.go @@ -28,7 +28,7 @@ func init() { flag.StringVar(&fAccessKeyId, argsPrefix+"ACCESSKEYID", "", "") flag.StringVar(&fAccessKeySecret, argsPrefix+"ACCESSKEYSECRET", "", "") flag.StringVar(&fRegion, argsPrefix+"REGION", "", "") - flag.Int64Var(&fSiteId, argsPrefix+"SITEID", "", "") + flag.Int64Var(&fSiteId, argsPrefix+"SITEID", 0, "") } /* diff --git a/internal/pkg/core/deployer/providers/aliyun-fc/aliyun_fc.go b/internal/pkg/core/deployer/providers/aliyun-fc/aliyun_fc.go index e70931f8..d3f17965 100644 --- a/internal/pkg/core/deployer/providers/aliyun-fc/aliyun_fc.go +++ b/internal/pkg/core/deployer/providers/aliyun-fc/aliyun_fc.go @@ -3,6 +3,7 @@ import ( "context" "fmt" + "log/slog" "time" aliyunOpen "github.com/alibabacloud-go/darabonba-openapi/v2/client" @@ -12,7 +13,6 @@ import ( xerrors "github.com/pkg/errors" "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/logger" ) type DeployerConfig struct { @@ -31,7 +31,7 @@ type DeployerConfig struct { type DeployerProvider struct { config *DeployerConfig - logger logger.Logger + logger *slog.Logger sdkClients *wSdkClients } @@ -54,13 +54,17 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { return &DeployerProvider{ config: config, - logger: logger.NewNilLogger(), + logger: slog.Default(), sdkClients: clients, }, nil } -func (d *DeployerProvider) WithLogger(logger logger.Logger) *DeployerProvider { - d.logger = logger +func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { + if logger == nil { + d.logger = slog.Default() + } else { + d.logger = logger + } return d } @@ -87,10 +91,9 @@ func (d *DeployerProvider) deployToFC3(ctx context.Context, certPem string, priv // 获取自定义域名 // REF: https://help.aliyun.com/zh/functioncompute/fc-3-0/developer-reference/api-fc-2023-03-30-getcustomdomain getCustomDomainResp, err := d.sdkClients.fc3.GetCustomDomain(tea.String(d.config.Domain)) + d.logger.Debug("sdk request 'fc.GetCustomDomain'", slog.Any("response", getCustomDomainResp)) if err != nil { return xerrors.Wrap(err, "failed to execute sdk request 'fc.GetCustomDomain'") - } else { - d.logger.Logt("已获取自定义域名", getCustomDomainResp) } // 更新自定义域名 @@ -107,10 +110,9 @@ func (d *DeployerProvider) deployToFC3(ctx context.Context, certPem string, priv }, } updateCustomDomainResp, err := d.sdkClients.fc3.UpdateCustomDomain(tea.String(d.config.Domain), updateCustomDomainReq) + d.logger.Debug("sdk request 'fc.UpdateCustomDomain'", slog.Any("request", updateCustomDomainReq), slog.Any("response", updateCustomDomainResp)) if err != nil { return xerrors.Wrap(err, "failed to execute sdk request 'fc.UpdateCustomDomain'") - } else { - d.logger.Logt("已更新自定义域名", updateCustomDomainResp) } return nil @@ -120,10 +122,9 @@ func (d *DeployerProvider) deployToFC2(ctx context.Context, certPem string, priv // 获取自定义域名 // REF: https://help.aliyun.com/zh/functioncompute/fc-2-0/developer-reference/api-fc-open-2021-04-06-getcustomdomain getCustomDomainResp, err := d.sdkClients.fc2.GetCustomDomain(tea.String(d.config.Domain)) + d.logger.Debug("sdk request 'fc.GetCustomDomain'", slog.Any("response", getCustomDomainResp)) if err != nil { return xerrors.Wrap(err, "failed to execute sdk request 'fc.GetCustomDomain'") - } else { - d.logger.Logt("已获取自定义域名", getCustomDomainResp) } // 更新自定义域名 @@ -138,10 +139,9 @@ func (d *DeployerProvider) deployToFC2(ctx context.Context, certPem string, priv TlsConfig: getCustomDomainResp.Body.TlsConfig, } updateCustomDomainResp, err := d.sdkClients.fc2.UpdateCustomDomain(tea.String(d.config.Domain), updateCustomDomainReq) + d.logger.Debug("sdk request 'fc.UpdateCustomDomain'", slog.Any("request", updateCustomDomainReq), slog.Any("response", updateCustomDomainResp)) if err != nil { return xerrors.Wrap(err, "failed to execute sdk request 'fc.UpdateCustomDomain'") - } else { - d.logger.Logt("已更新自定义域名", updateCustomDomainResp) } return nil diff --git a/internal/pkg/core/deployer/providers/aliyun-fc/aliyun_fc_test.go b/internal/pkg/core/deployer/providers/aliyun-fc/aliyun_fc_test.go index a8780285..d83f2591 100644 --- a/internal/pkg/core/deployer/providers/aliyun-fc/aliyun_fc_test.go +++ b/internal/pkg/core/deployer/providers/aliyun-fc/aliyun_fc_test.go @@ -17,7 +17,7 @@ var ( fAccessKeyId string fAccessKeySecret string fRegion string - fSiteId int64 + fDomain string ) func init() { @@ -28,7 +28,7 @@ func init() { flag.StringVar(&fAccessKeyId, argsPrefix+"ACCESSKEYID", "", "") flag.StringVar(&fAccessKeySecret, argsPrefix+"ACCESSKEYSECRET", "", "") flag.StringVar(&fRegion, argsPrefix+"REGION", "", "") - flag.Int64Var(&fSiteId, argsPrefix+"SITEID", "", "") + flag.StringVar(&fDomain, argsPrefix+"DOMAIN", "", "") } /* @@ -40,7 +40,7 @@ Shell command to run this test: --CERTIMATE_DEPLOYER_ALIYUNFC_ACCESSKEYID="your-access-key-id" \ --CERTIMATE_DEPLOYER_ALIYUNFC_ACCESSKEYSECRET="your-access-key-secret" \ --CERTIMATE_DEPLOYER_ALIYUNFC_REGION="cn-hangzhou" \ - --CERTIMATE_DEPLOYER_ALIYUNFC_SITEID="your-fc-site-id" + --CERTIMATE_DEPLOYER_ALIYUNFC_DOMAIN="example.com" */ func TestDeploy(t *testing.T) { flag.Parse() @@ -53,14 +53,14 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("ACCESSKEYID: %v", fAccessKeyId), fmt.Sprintf("ACCESSKEYSECRET: %v", fAccessKeySecret), fmt.Sprintf("REGION: %v", fRegion), - fmt.Sprintf("SITEID: %v", fSiteId), + fmt.Sprintf("DOMAIN: %v", fDomain), }, "\n")) deployer, err := provider.NewDeployer(&provider.DeployerConfig{ AccessKeyId: fAccessKeyId, AccessKeySecret: fAccessKeySecret, Region: fRegion, - SiteId: fSiteId, + Domain: fDomain, }) if err != nil { t.Errorf("err: %+v", err) diff --git a/internal/pkg/core/deployer/providers/aliyun-live/aliyun_live.go b/internal/pkg/core/deployer/providers/aliyun-live/aliyun_live.go index 99b06aca..4eacd077 100644 --- a/internal/pkg/core/deployer/providers/aliyun-live/aliyun_live.go +++ b/internal/pkg/core/deployer/providers/aliyun-live/aliyun_live.go @@ -3,6 +3,7 @@ import ( "context" "fmt" + "log/slog" "strings" "time" @@ -12,7 +13,6 @@ import ( xerrors "github.com/pkg/errors" "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/logger" ) type DeployerConfig struct { @@ -28,7 +28,7 @@ type DeployerConfig struct { type DeployerProvider struct { config *DeployerConfig - logger logger.Logger + logger *slog.Logger sdkClient *aliyunLive.Client } @@ -46,13 +46,17 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { return &DeployerProvider{ config: config, - logger: logger.NewNilLogger(), + logger: slog.Default(), sdkClient: client, }, nil } -func (d *DeployerProvider) WithLogger(logger logger.Logger) *DeployerProvider { - d.logger = logger +func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { + if logger == nil { + d.logger = slog.Default() + } else { + d.logger = logger + } return d } @@ -71,12 +75,11 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe SSLPri: tea.String(privkeyPem), } setLiveDomainSSLCertificateResp, err := d.sdkClient.SetLiveDomainCertificate(setLiveDomainSSLCertificateReq) + d.logger.Debug("sdk request 'live.SetLiveDomainCertificate'", slog.Any("request", setLiveDomainSSLCertificateReq), slog.Any("response", setLiveDomainSSLCertificateResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'live.SetLiveDomainCertificate'") } - d.logger.Logt("已设置域名证书", setLiveDomainSSLCertificateResp) - return &deployer.DeployResult{}, nil } diff --git a/internal/pkg/core/deployer/providers/aliyun-nlb/aliyun_nlb.go b/internal/pkg/core/deployer/providers/aliyun-nlb/aliyun_nlb.go index 8dc1b2e3..98885d7d 100644 --- a/internal/pkg/core/deployer/providers/aliyun-nlb/aliyun_nlb.go +++ b/internal/pkg/core/deployer/providers/aliyun-nlb/aliyun_nlb.go @@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + "log/slog" "strings" aliyunOpen "github.com/alibabacloud-go/darabonba-openapi/v2/client" @@ -12,7 +13,6 @@ import ( xerrors "github.com/pkg/errors" "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/logger" "github.com/usual2970/certimate/internal/pkg/core/uploader" uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/aliyun-cas" ) @@ -36,7 +36,7 @@ type DeployerConfig struct { type DeployerProvider struct { config *DeployerConfig - logger logger.Logger + logger *slog.Logger sdkClient *aliyunNlb.Client sslUploader uploader.Uploader } @@ -60,14 +60,19 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { return &DeployerProvider{ config: config, - logger: logger.NewNilLogger(), + logger: slog.Default(), sdkClient: client, sslUploader: uploader, }, nil } -func (d *DeployerProvider) WithLogger(logger logger.Logger) *DeployerProvider { - d.logger = logger +func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { + if logger == nil { + d.logger = slog.Default() + } else { + d.logger = logger + } + d.sslUploader.WithLogger(logger) return d } @@ -76,10 +81,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe upres, err := d.sslUploader.Upload(ctx, certPem, privkeyPem) if err != nil { return nil, xerrors.Wrap(err, "failed to upload certificate file") + } else { + d.logger.Info("ssl certificate uploaded", slog.Any("result", upres)) } - d.logger.Logt("certificate file uploaded", upres) - // 根据部署资源类型决定部署方式 switch d.config.ResourceType { case RESOURCE_TYPE_LOADBALANCER: @@ -110,12 +115,11 @@ func (d *DeployerProvider) deployToLoadbalancer(ctx context.Context, cloudCertId LoadBalancerId: tea.String(d.config.LoadbalancerId), } getLoadBalancerAttributeResp, err := d.sdkClient.GetLoadBalancerAttribute(getLoadBalancerAttributeReq) + d.logger.Debug("sdk request 'nlb.GetLoadBalancerAttribute'", slog.Any("request", getLoadBalancerAttributeReq), slog.Any("response", getLoadBalancerAttributeResp)) if err != nil { return xerrors.Wrap(err, "failed to execute sdk request 'nlb.GetLoadBalancerAttribute'") } - d.logger.Logt("已查询到 NLB 负载均衡实例", getLoadBalancerAttributeResp) - // 查询 TCPSSL 监听列表 // REF: https://help.aliyun.com/zh/slb/network-load-balancer/developer-reference/api-nlb-2022-04-30-listlisteners listenerIds := make([]string, 0) @@ -129,6 +133,7 @@ func (d *DeployerProvider) deployToLoadbalancer(ctx context.Context, cloudCertId ListenerProtocol: tea.String("TCPSSL"), } listListenersResp, err := d.sdkClient.ListListeners(listListenersReq) + d.logger.Debug("sdk request 'nlb.ListListeners'", slog.Any("request", listListenersReq), slog.Any("response", listListenersResp)) if err != nil { return xerrors.Wrap(err, "failed to execute sdk request 'nlb.ListListeners'") } @@ -146,12 +151,11 @@ func (d *DeployerProvider) deployToLoadbalancer(ctx context.Context, cloudCertId } } - d.logger.Logt("已查询到 NLB 负载均衡实例下的全部 TCPSSL 监听", listenerIds) - // 遍历更新监听证书 if len(listenerIds) == 0 { - return errors.New("listener not found") + d.logger.Info("no nlb listeners to deploy") } else { + d.logger.Info("found tcpssl listeners to deploy", slog.Any("listenerIds", listenerIds)) var errs []error for _, listenerId := range listenerIds { @@ -188,12 +192,11 @@ func (d *DeployerProvider) updateListenerCertificate(ctx context.Context, cloudL ListenerId: tea.String(cloudListenerId), } getListenerAttributeResp, err := d.sdkClient.GetListenerAttribute(getListenerAttributeReq) + d.logger.Debug("sdk request 'nlb.GetListenerAttribute'", slog.Any("request", getListenerAttributeReq), slog.Any("response", getListenerAttributeResp)) if err != nil { return xerrors.Wrap(err, "failed to execute sdk request 'nlb.GetListenerAttribute'") } - d.logger.Logt("已查询到 NLB 监听配置", getListenerAttributeResp) - // 修改监听的属性 // REF: https://help.aliyun.com/zh/slb/network-load-balancer/developer-reference/api-nlb-2022-04-30-updatelistenerattribute updateListenerAttributeReq := &aliyunNlb.UpdateListenerAttributeRequest{ @@ -201,12 +204,11 @@ func (d *DeployerProvider) updateListenerCertificate(ctx context.Context, cloudL CertificateIds: []*string{tea.String(cloudCertId)}, } updateListenerAttributeResp, err := d.sdkClient.UpdateListenerAttribute(updateListenerAttributeReq) + d.logger.Debug("sdk request 'nlb.UpdateListenerAttribute'", slog.Any("request", updateListenerAttributeReq), slog.Any("response", updateListenerAttributeResp)) if err != nil { return xerrors.Wrap(err, "failed to execute sdk request 'nlb.UpdateListenerAttribute'") } - d.logger.Logt("已更新 NLB 监听配置", updateListenerAttributeResp) - return nil } diff --git a/internal/pkg/core/deployer/providers/aliyun-oss/aliyun_oss.go b/internal/pkg/core/deployer/providers/aliyun-oss/aliyun_oss.go index 3eba5c55..2f16b09d 100644 --- a/internal/pkg/core/deployer/providers/aliyun-oss/aliyun_oss.go +++ b/internal/pkg/core/deployer/providers/aliyun-oss/aliyun_oss.go @@ -4,12 +4,12 @@ import ( "context" "errors" "fmt" + "log/slog" "github.com/aliyun/aliyun-oss-go-sdk/oss" xerrors "github.com/pkg/errors" "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/logger" ) type DeployerConfig struct { @@ -27,7 +27,7 @@ type DeployerConfig struct { type DeployerProvider struct { config *DeployerConfig - logger logger.Logger + logger *slog.Logger sdkClient *oss.Client } @@ -45,13 +45,17 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { return &DeployerProvider{ config: config, - logger: logger.NewNilLogger(), + logger: slog.Default(), sdkClient: client, }, nil } -func (d *DeployerProvider) WithLogger(logger logger.Logger) *DeployerProvider { - d.logger = logger +func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { + if logger == nil { + d.logger = slog.Default() + } else { + d.logger = logger + } return d } @@ -65,14 +69,16 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe // 为存储空间绑定自定义域名 // REF: https://help.aliyun.com/zh/oss/developer-reference/putcname - err := d.sdkClient.PutBucketCnameWithCertificate(d.config.Bucket, oss.PutBucketCname{ + putBucketCnameWithCertificateReq := oss.PutBucketCname{ Cname: d.config.Domain, CertificateConfiguration: &oss.CertificateConfiguration{ Certificate: certPem, PrivateKey: privkeyPem, Force: true, }, - }) + } + err := d.sdkClient.PutBucketCnameWithCertificate(d.config.Bucket, putBucketCnameWithCertificateReq) + d.logger.Debug("sdk request 'oss.PutBucketCnameWithCertificate'", slog.Any("bucket", d.config.Bucket), slog.Any("request", putBucketCnameWithCertificateReq)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'oss.PutBucketCnameWithCertificate'") } diff --git a/internal/pkg/core/deployer/providers/aliyun-vod/aliyun_vod.go b/internal/pkg/core/deployer/providers/aliyun-vod/aliyun_vod.go index 77c2ebf0..66dc188c 100644 --- a/internal/pkg/core/deployer/providers/aliyun-vod/aliyun_vod.go +++ b/internal/pkg/core/deployer/providers/aliyun-vod/aliyun_vod.go @@ -3,6 +3,7 @@ import ( "context" "fmt" + "log/slog" "time" aliyunOpen "github.com/alibabacloud-go/darabonba-openapi/v2/client" @@ -11,7 +12,6 @@ import ( xerrors "github.com/pkg/errors" "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/logger" ) type DeployerConfig struct { @@ -27,7 +27,7 @@ type DeployerConfig struct { type DeployerProvider struct { config *DeployerConfig - logger logger.Logger + logger *slog.Logger sdkClient *aliyunVod.Client } @@ -45,13 +45,17 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { return &DeployerProvider{ config: config, - logger: logger.NewNilLogger(), + logger: slog.Default(), sdkClient: client, }, nil } -func (d *DeployerProvider) WithLogger(logger logger.Logger) *DeployerProvider { - d.logger = logger +func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { + if logger == nil { + d.logger = slog.Default() + } else { + d.logger = logger + } return d } @@ -67,10 +71,9 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe SSLPri: tea.String(privkeyPem), } setVodDomainSSLCertificateResp, err := d.sdkClient.SetVodDomainSSLCertificate(setVodDomainSSLCertificateReq) + d.logger.Debug("sdk request 'live.SetVodDomainSSLCertificate'", slog.Any("request", setVodDomainSSLCertificateReq), slog.Any("response", setVodDomainSSLCertificateResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'live.SetVodDomainSSLCertificate'") - } else { - d.logger.Logt("已设置域名证书", setVodDomainSSLCertificateResp) } return &deployer.DeployResult{}, nil diff --git a/internal/pkg/core/deployer/providers/aliyun-waf/aliyun_waf.go b/internal/pkg/core/deployer/providers/aliyun-waf/aliyun_waf.go index 928a0d56..dd9248b6 100644 --- a/internal/pkg/core/deployer/providers/aliyun-waf/aliyun_waf.go +++ b/internal/pkg/core/deployer/providers/aliyun-waf/aliyun_waf.go @@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + "log/slog" "strings" aliyunOpen "github.com/alibabacloud-go/darabonba-openapi/v2/client" @@ -12,7 +13,6 @@ import ( xerrors "github.com/pkg/errors" "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/logger" "github.com/usual2970/certimate/internal/pkg/core/uploader" uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/aliyun-cas" ) @@ -32,7 +32,7 @@ type DeployerConfig struct { type DeployerProvider struct { config *DeployerConfig - logger logger.Logger + logger *slog.Logger sdkClient *aliyunWaf.Client sslUploader uploader.Uploader } @@ -56,14 +56,19 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { return &DeployerProvider{ config: config, - logger: logger.NewNilLogger(), + logger: slog.Default(), sdkClient: client, sslUploader: uploader, }, nil } -func (d *DeployerProvider) WithLogger(logger logger.Logger) *DeployerProvider { - d.logger = logger +func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { + if logger == nil { + d.logger = slog.Default() + } else { + d.logger = logger + } + d.sslUploader.WithLogger(logger) return d } @@ -77,7 +82,7 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe if err != nil { return nil, xerrors.Wrap(err, "failed to upload certificate file") } else { - d.logger.Logt("certificate file uploaded", upres) + d.logger.Info("ssl certificate uploaded", slog.Any("result", upres)) } if d.config.Domain == "" { @@ -90,10 +95,9 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe RegionId: tea.String(d.config.Region), } describeDefaultHttpsResp, err := d.sdkClient.DescribeDefaultHttps(describeDefaultHttpsReq) + d.logger.Debug("sdk request 'waf.DescribeDefaultHttps'", slog.Any("request", describeDefaultHttpsReq), slog.Any("response", describeDefaultHttpsResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'waf.DescribeDefaultHttps'") - } else { - d.logger.Logt("已查询到默认 SSL/TLS 设置", describeDefaultHttpsResp) } // 修改默认 SSL/TLS 设置 @@ -110,10 +114,9 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe modifyDefaultHttpsReq.EnableTLSv3 = describeDefaultHttpsResp.Body.DefaultHttps.EnableTLSv3 } modifyDefaultHttpsResp, err := d.sdkClient.ModifyDefaultHttps(modifyDefaultHttpsReq) + d.logger.Debug("sdk request 'waf.ModifyDefaultHttps'", slog.Any("request", modifyDefaultHttpsReq), slog.Any("response", modifyDefaultHttpsResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'waf.ModifyDefaultHttps'") - } else { - d.logger.Logt("已修改默认 SSL/TLS 设置", modifyDefaultHttpsResp) } } else { // 指定接入域名 @@ -126,10 +129,9 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe Domain: tea.String(d.config.Domain), } describeDomainDetailResp, err := d.sdkClient.DescribeDomainDetail(describeDomainDetailReq) + d.logger.Debug("sdk request 'waf.DescribeDomainDetail'", slog.Any("request", describeDomainDetailReq), slog.Any("response", describeDomainDetailResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'waf.DescribeDomainDetail'") - } else { - d.logger.Logt("已查询到 CNAME 接入详情", describeDomainDetailResp) } // 修改 CNAME 接入资源 @@ -143,18 +145,25 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe TLSVersion: tea.String("tlsv1"), EnableTLSv3: tea.Bool(false), }, - Redirect: &aliyunWaf.ModifyDomainRequestRedirect{}, + Redirect: &aliyunWaf.ModifyDomainRequestRedirect{ + Loadbalance: tea.String("iphash"), + }, } if describeDomainDetailResp.Body != nil && describeDomainDetailResp.Body.Listen != nil { modifyDomainReq.Listen.TLSVersion = describeDomainDetailResp.Body.Listen.TLSVersion modifyDomainReq.Listen.EnableTLSv3 = describeDomainDetailResp.Body.Listen.EnableTLSv3 modifyDomainReq.Listen.FocusHttps = describeDomainDetailResp.Body.Listen.FocusHttps } + if describeDomainDetailResp.Body != nil && describeDomainDetailResp.Body.Redirect != nil { + modifyDomainReq.Redirect.Loadbalance = describeDomainDetailResp.Body.Redirect.Loadbalance + modifyDomainReq.Redirect.FocusHttpBackend = describeDomainDetailResp.Body.Redirect.FocusHttpBackend + modifyDomainReq.Redirect.SniEnabled = describeDomainDetailResp.Body.Redirect.SniEnabled + modifyDomainReq.Redirect.SniHost = describeDomainDetailResp.Body.Redirect.SniHost + } modifyDomainResp, err := d.sdkClient.ModifyDomain(modifyDomainReq) + d.logger.Debug("sdk request 'waf.ModifyDomain'", slog.Any("request", modifyDomainReq), slog.Any("response", modifyDomainResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'waf.ModifyDomain'") - } else { - d.logger.Logt("已修改 CNAME 接入资源", modifyDomainResp) } } diff --git a/internal/pkg/core/deployer/providers/aws-cloudfront/aws_cloudfront.go b/internal/pkg/core/deployer/providers/aws-cloudfront/aws_cloudfront.go index 2e8e09ee..456799bd 100644 --- a/internal/pkg/core/deployer/providers/aws-cloudfront/aws_cloudfront.go +++ b/internal/pkg/core/deployer/providers/aws-cloudfront/aws_cloudfront.go @@ -3,6 +3,7 @@ import ( "context" "errors" + "log/slog" aws "github.com/aws/aws-sdk-go-v2/aws" awsCfg "github.com/aws/aws-sdk-go-v2/config" @@ -12,7 +13,6 @@ import ( xerrors "github.com/pkg/errors" "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/logger" "github.com/usual2970/certimate/internal/pkg/core/uploader" uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/aws-acm" ) @@ -30,7 +30,7 @@ type DeployerConfig struct { type DeployerProvider struct { config *DeployerConfig - logger logger.Logger + logger *slog.Logger sdkClient *awsCf.Client sslUploader uploader.Uploader } @@ -58,14 +58,19 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { return &DeployerProvider{ config: config, - logger: logger.NewNilLogger(), + logger: slog.Default(), sdkClient: client, sslUploader: uploader, }, nil } -func (d *DeployerProvider) WithLogger(logger logger.Logger) *DeployerProvider { - d.logger = logger +func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { + if logger == nil { + d.logger = slog.Default() + } else { + d.logger = logger + } + d.sslUploader.WithLogger(logger) return d } @@ -78,22 +83,21 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe upres, err := d.sslUploader.Upload(ctx, certPem, privkeyPem) if err != nil { return nil, xerrors.Wrap(err, "failed to upload certificate file") + } else { + d.logger.Info("ssl certificate uploaded", slog.Any("result", upres)) } - d.logger.Logt("certificate file uploaded", upres) - // 获取分配配置 // REF: https://docs.aws.amazon.com/en_us/cloudfront/latest/APIReference/API_GetDistributionConfig.html getDistributionConfigReq := &awsCf.GetDistributionConfigInput{ Id: aws.String(d.config.DistributionId), } getDistributionConfigResp, err := d.sdkClient.GetDistributionConfig(context.TODO(), getDistributionConfigReq) + d.logger.Debug("sdk request 'cloudfront.GetDistributionConfig'", slog.Any("request", getDistributionConfigReq), slog.Any("response", getDistributionConfigResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'cloudfront.GetDistributionConfig'") } - d.logger.Logt("已获取分配配置", getDistributionConfigResp) - // 更新分配配置 // REF: https://docs.aws.amazon.com/zh_cn/cloudfront/latest/APIReference/API_UpdateDistribution.html updateDistributionReq := &awsCf.UpdateDistributionInput{ @@ -107,12 +111,11 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe updateDistributionReq.DistributionConfig.ViewerCertificate.CloudFrontDefaultCertificate = aws.Bool(false) updateDistributionReq.DistributionConfig.ViewerCertificate.ACMCertificateArn = aws.String(upres.CertId) updateDistributionResp, err := d.sdkClient.UpdateDistribution(context.TODO(), updateDistributionReq) + d.logger.Debug("sdk request 'cloudfront.UpdateDistribution'", slog.Any("request", updateDistributionReq), slog.Any("response", updateDistributionResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'cloudfront.UpdateDistribution'") } - d.logger.Logt("已更新分配配置", updateDistributionResp) - return &deployer.DeployResult{}, nil } diff --git a/internal/pkg/core/deployer/providers/baiducloud-cdn/baiducloud_cdn.go b/internal/pkg/core/deployer/providers/baiducloud-cdn/baiducloud_cdn.go index df57ea1d..a31a21ec 100644 --- a/internal/pkg/core/deployer/providers/baiducloud-cdn/baiducloud_cdn.go +++ b/internal/pkg/core/deployer/providers/baiducloud-cdn/baiducloud_cdn.go @@ -3,6 +3,7 @@ import ( "context" "fmt" + "log/slog" "time" bceCdn "github.com/baidubce/bce-sdk-go/services/cdn" @@ -10,7 +11,6 @@ import ( xerrors "github.com/pkg/errors" "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/logger" ) type DeployerConfig struct { @@ -24,7 +24,7 @@ type DeployerConfig struct { type DeployerProvider struct { config *DeployerConfig - logger logger.Logger + logger *slog.Logger sdkClient *bceCdn.Client } @@ -42,13 +42,17 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { return &DeployerProvider{ config: config, - logger: logger.NewNilLogger(), + logger: slog.Default(), sdkClient: client, }, nil } -func (d *DeployerProvider) WithLogger(logger logger.Logger) *DeployerProvider { - d.logger = logger +func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { + if logger == nil { + d.logger = slog.Default() + } else { + d.logger = logger + } return d } @@ -64,12 +68,11 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe }, "ON", ) + d.logger.Debug("sdk request 'cdn.PutCert'", slog.String("request.domain", d.config.Domain), slog.Any("response", putCertResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'cdn.PutCert'") } - d.logger.Logt("已修改域名证书", putCertResp) - return &deployer.DeployResult{}, nil } diff --git a/internal/pkg/core/deployer/providers/baishan-cdn/baishan_cdn.go b/internal/pkg/core/deployer/providers/baishan-cdn/baishan_cdn.go index efb3353e..17d6d4d0 100644 --- a/internal/pkg/core/deployer/providers/baishan-cdn/baishan_cdn.go +++ b/internal/pkg/core/deployer/providers/baishan-cdn/baishan_cdn.go @@ -4,12 +4,12 @@ import ( "context" "errors" "fmt" + "log/slog" "time" xerrors "github.com/pkg/errors" "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/logger" bssdk "github.com/usual2970/certimate/internal/pkg/vendors/baishan-sdk" ) @@ -22,7 +22,7 @@ type DeployerConfig struct { type DeployerProvider struct { config *DeployerConfig - logger logger.Logger + logger *slog.Logger sdkClient *bssdk.Client } @@ -40,13 +40,17 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { return &DeployerProvider{ config: config, - logger: logger.NewNilLogger(), + logger: slog.Default(), sdkClient: client, }, nil } -func (d *DeployerProvider) WithLogger(logger logger.Logger) *DeployerProvider { - d.logger = logger +func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { + if logger == nil { + d.logger = slog.Default() + } else { + d.logger = logger + } return d } @@ -62,12 +66,11 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe Config: "https", } getDomainConfigResp, err := d.sdkClient.GetDomainConfig(getDomainConfigReq) + d.logger.Debug("sdk request 'baishan.GetDomainConfig'", slog.Any("request", getDomainConfigReq), slog.Any("response", getDomainConfigResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'baishan.GetDomainConfig'") } else if len(getDomainConfigResp.Data) == 0 { return nil, errors.New("domain config not found") - } else { - d.logger.Logt("已查询到域名配置", getDomainConfigResp) } // 新增证书 @@ -78,10 +81,9 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe Name: fmt.Sprintf("certimate_%d", time.Now().UnixMilli()), } createCertificateResp, err := d.sdkClient.CreateCertificate(createCertificateReq) + d.logger.Debug("sdk request 'baishan.CreateCertificate'", slog.Any("request", createCertificateReq), slog.Any("response", createCertificateResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'baishan.CreateCertificate'") - } else { - d.logger.Logt("已新增证书", createCertificateResp) } // 设置域名配置 @@ -98,10 +100,9 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe }, } setDomainConfigResp, err := d.sdkClient.SetDomainConfig(setDomainConfigReq) + d.logger.Debug("sdk request 'baishan.SetDomainConfig'", slog.Any("request", setDomainConfigReq), slog.Any("response", setDomainConfigResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'baishan.SetDomainConfig'") - } else { - d.logger.Logt("已设置域名配置", setDomainConfigResp) } return &deployer.DeployResult{}, nil diff --git a/internal/pkg/core/deployer/providers/baotapanel-console/baotapanel_console.go b/internal/pkg/core/deployer/providers/baotapanel-console/baotapanel_console.go index ff09dc26..57e37f05 100644 --- a/internal/pkg/core/deployer/providers/baotapanel-console/baotapanel_console.go +++ b/internal/pkg/core/deployer/providers/baotapanel-console/baotapanel_console.go @@ -4,12 +4,12 @@ import ( "context" "crypto/tls" "errors" + "log/slog" "net/url" xerrors "github.com/pkg/errors" "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/logger" btsdk "github.com/usual2970/certimate/internal/pkg/vendors/btpanel-sdk" ) @@ -26,7 +26,7 @@ type DeployerConfig struct { type DeployerProvider struct { config *DeployerConfig - logger logger.Logger + logger *slog.Logger sdkClient *btsdk.Client } @@ -44,13 +44,17 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { return &DeployerProvider{ config: config, - logger: logger.NewNilLogger(), + logger: slog.Default(), sdkClient: client, }, nil } -func (d *DeployerProvider) WithLogger(logger logger.Logger) *DeployerProvider { - d.logger = logger +func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { + if logger == nil { + d.logger = slog.Default() + } else { + d.logger = logger + } return d } @@ -61,10 +65,9 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe Certificate: certPem, } configSavePanelSSLResp, err := d.sdkClient.ConfigSavePanelSSL(configSavePanelSSLReq) + d.logger.Debug("sdk request 'bt.ConfigSavePanelSSL'", slog.Any("request", configSavePanelSSLReq), slog.Any("response", configSavePanelSSLResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'bt.ConfigSavePanelSSL'") - } else { - d.logger.Logt("已设置面板 SSL 证书", configSavePanelSSLResp) } if d.config.AutoRestart { @@ -73,7 +76,8 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe Name: "nginx", Type: "restart", } - d.sdkClient.SystemServiceAdmin(systemServiceAdminReq) + systemServiceAdminResp, _ := d.sdkClient.SystemServiceAdmin(systemServiceAdminReq) + d.logger.Debug("sdk request 'bt.SystemServiceAdmin'", slog.Any("request", systemServiceAdminReq), slog.Any("response", systemServiceAdminResp)) } return &deployer.DeployResult{}, nil diff --git a/internal/pkg/core/deployer/providers/baotapanel-site/baotapanel_site.go b/internal/pkg/core/deployer/providers/baotapanel-site/baotapanel_site.go index c6bf4966..75d57b1a 100644 --- a/internal/pkg/core/deployer/providers/baotapanel-site/baotapanel_site.go +++ b/internal/pkg/core/deployer/providers/baotapanel-site/baotapanel_site.go @@ -5,12 +5,12 @@ import ( "crypto/tls" "errors" "fmt" + "log/slog" "net/url" xerrors "github.com/pkg/errors" "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/logger" "github.com/usual2970/certimate/internal/pkg/utils/slices" btsdk "github.com/usual2970/certimate/internal/pkg/vendors/btpanel-sdk" ) @@ -32,7 +32,7 @@ type DeployerConfig struct { type DeployerProvider struct { config *DeployerConfig - logger logger.Logger + logger *slog.Logger sdkClient *btsdk.Client } @@ -50,13 +50,17 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { return &DeployerProvider{ config: config, - logger: logger.NewNilLogger(), + logger: slog.Default(), sdkClient: client, }, nil } -func (d *DeployerProvider) WithLogger(logger logger.Logger) *DeployerProvider { - d.logger = logger +func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { + if logger == nil { + d.logger = slog.Default() + } else { + d.logger = logger + } return d } @@ -76,10 +80,9 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe PrivateKey: privkeyPem, } siteSetSSLResp, err := d.sdkClient.SiteSetSSL(siteSetSSLReq) + d.logger.Debug("sdk request 'bt.SiteSetSSL'", slog.Any("request", siteSetSSLReq), slog.Any("response", siteSetSSLResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'bt.SiteSetSSL'") - } else { - d.logger.Logt("已设置站点证书", siteSetSSLResp) } } @@ -95,10 +98,9 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe PrivateKey: privkeyPem, } sslCertSaveCertResp, err := d.sdkClient.SSLCertSaveCert(sslCertSaveCertReq) + d.logger.Debug("sdk request 'bt.SSLCertSaveCert'", slog.Any("request", sslCertSaveCertReq), slog.Any("response", sslCertSaveCertResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'bt.SSLCertSaveCert'") - } else { - d.logger.Logt("已上传证书", sslCertSaveCertResp) } // 设置站点证书 @@ -111,10 +113,9 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe }), } sslSetBatchCertToSiteResp, err := d.sdkClient.SSLSetBatchCertToSite(sslSetBatchCertToSiteReq) + d.logger.Debug("sdk request 'bt.SSLSetBatchCertToSite'", slog.Any("request", sslSetBatchCertToSiteReq), slog.Any("response", sslSetBatchCertToSiteResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'bt.SSLSetBatchCertToSite'") - } else { - d.logger.Logt("已设置站点证书", sslSetBatchCertToSiteResp) } } diff --git a/internal/pkg/core/deployer/providers/byteplus-cdn/byteplus_cdn.go b/internal/pkg/core/deployer/providers/byteplus-cdn/byteplus_cdn.go index 909a2e7d..b8bd8856 100644 --- a/internal/pkg/core/deployer/providers/byteplus-cdn/byteplus_cdn.go +++ b/internal/pkg/core/deployer/providers/byteplus-cdn/byteplus_cdn.go @@ -3,14 +3,13 @@ import ( "context" "errors" - "fmt" + "log/slog" "strings" bpCdn "github.com/byteplus-sdk/byteplus-sdk-golang/service/cdn" xerrors "github.com/pkg/errors" "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/logger" "github.com/usual2970/certimate/internal/pkg/core/uploader" uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/byteplus-cdn" ) @@ -26,7 +25,7 @@ type DeployerConfig struct { type DeployerProvider struct { config *DeployerConfig - logger logger.Logger + logger *slog.Logger sdkClient *bpCdn.CDN sslUploader uploader.Uploader } @@ -52,14 +51,19 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { return &DeployerProvider{ config: config, - logger: logger.NewNilLogger(), + logger: slog.Default(), sdkClient: client, sslUploader: uploader, }, nil } -func (d *DeployerProvider) WithLogger(logger logger.Logger) *DeployerProvider { - d.logger = logger +func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { + if logger == nil { + d.logger = slog.Default() + } else { + d.logger = logger + } + d.sslUploader.WithLogger(logger) return d } @@ -68,10 +72,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe upres, err := d.sslUploader.Upload(ctx, certPem, privkeyPem) if err != nil { return nil, xerrors.Wrap(err, "failed to upload certificate file") + } else { + d.logger.Info("ssl certificate uploaded", slog.Any("result", upres)) } - d.logger.Logt("certificate file uploaded", upres) - domains := make([]string, 0) if strings.HasPrefix(d.config.Domain, "*.") { // 获取指定证书可关联的域名 @@ -80,6 +84,7 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe CertId: upres.CertId, } describeCertConfigResp, err := d.sdkClient.DescribeCertConfig(describeCertConfigReq) + d.logger.Debug("sdk request 'cdn.DescribeCertConfig'", slog.Any("request", describeCertConfigReq), slog.Any("response", describeCertConfigResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'cdn.DescribeCertConfig'") } @@ -99,6 +104,7 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe if len(domains) == 0 { if len(describeCertConfigResp.Result.SpecifiedCertConfig) > 0 { // 所有可关联的域名都配置了该证书,跳过部署 + d.logger.Info("no domains to deploy") } else { return nil, errors.New("domain not found") } @@ -118,10 +124,9 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe Domain: domain, } batchDeployCertResp, err := d.sdkClient.BatchDeployCert(batchDeployCertReq) + d.logger.Debug("sdk request 'cdn.BatchDeployCert'", slog.Any("request", batchDeployCertReq), slog.Any("response", batchDeployCertResp)) if err != nil { errs = append(errs, err) - } else { - d.logger.Logt(fmt.Sprintf("已关联证书到域名 %s", domain), batchDeployCertResp) } } diff --git a/internal/pkg/core/deployer/providers/cachefly/cachefly.go b/internal/pkg/core/deployer/providers/cachefly/cachefly.go index 8c6f129d..63bb4e95 100644 --- a/internal/pkg/core/deployer/providers/cachefly/cachefly.go +++ b/internal/pkg/core/deployer/providers/cachefly/cachefly.go @@ -3,11 +3,11 @@ import ( "context" "errors" + "log/slog" xerrors "github.com/pkg/errors" "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/logger" cfsdk "github.com/usual2970/certimate/internal/pkg/vendors/cachefly-sdk" ) @@ -18,7 +18,7 @@ type DeployerConfig struct { type DeployerProvider struct { config *DeployerConfig - logger logger.Logger + logger *slog.Logger sdkClient *cfsdk.Client } @@ -36,13 +36,17 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { return &DeployerProvider{ config: config, - logger: logger.NewNilLogger(), + logger: slog.Default(), sdkClient: client, }, nil } -func (d *DeployerProvider) WithLogger(logger logger.Logger) *DeployerProvider { - d.logger = logger +func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { + if logger == nil { + d.logger = slog.Default() + } else { + d.logger = logger + } return d } @@ -53,10 +57,9 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe CertificateKey: privkeyPem, } createCertificateResp, err := d.sdkClient.CreateCertificate(createCertificateReq) + d.logger.Debug("sdk request 'cachefly.CreateCertificate'", slog.Any("request", createCertificateReq), slog.Any("response", createCertificateResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'cachefly.CreateCertificate'") - } else { - d.logger.Logt("已上传证书", createCertificateResp) } return &deployer.DeployResult{}, nil diff --git a/internal/pkg/core/deployer/providers/cdnfly/cdnfly.go b/internal/pkg/core/deployer/providers/cdnfly/cdnfly.go index c98d9ae4..ec2c1883 100644 --- a/internal/pkg/core/deployer/providers/cdnfly/cdnfly.go +++ b/internal/pkg/core/deployer/providers/cdnfly/cdnfly.go @@ -5,13 +5,13 @@ import ( "encoding/json" "errors" "fmt" + "log/slog" "net/url" "time" xerrors "github.com/pkg/errors" "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/logger" cfsdk "github.com/usual2970/certimate/internal/pkg/vendors/cdnfly-sdk" ) @@ -34,7 +34,7 @@ type DeployerConfig struct { type DeployerProvider struct { config *DeployerConfig - logger logger.Logger + logger *slog.Logger sdkClient *cfsdk.Client } @@ -52,13 +52,17 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { return &DeployerProvider{ config: config, - logger: logger.NewNilLogger(), + logger: slog.Default(), sdkClient: client, }, nil } -func (d *DeployerProvider) WithLogger(logger logger.Logger) *DeployerProvider { - d.logger = logger +func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { + if logger == nil { + d.logger = slog.Default() + } else { + d.logger = logger + } return d } @@ -93,10 +97,9 @@ func (d *DeployerProvider) deployToSite(ctx context.Context, certPem string, pri Id: d.config.SiteId, } getSiteResp, err := d.sdkClient.GetSite(getSiteReq) + d.logger.Debug("sdk request 'cdnfly.GetSite'", slog.Any("request", getSiteReq), slog.Any("response", getSiteResp)) if err != nil { return xerrors.Wrap(err, "failed to execute sdk request 'cdnfly.GetSite'") - } else { - d.logger.Logt("已获取网站详情", getSiteResp) } // 添加单个证书 @@ -108,10 +111,9 @@ func (d *DeployerProvider) deployToSite(ctx context.Context, certPem string, pri Key: privkeyPem, } createCertificateResp, err := d.sdkClient.CreateCertificate(createCertificateReq) + d.logger.Debug("sdk request 'cdnfly.CreateCertificate'", slog.Any("request", createCertificateReq), slog.Any("response", createCertificateResp)) if err != nil { return xerrors.Wrap(err, "failed to execute sdk request 'cdnfly.CreateCertificate'") - } else { - d.logger.Logt("已添加证书", createCertificateResp) } // 修改单个网站 @@ -126,10 +128,9 @@ func (d *DeployerProvider) deployToSite(ctx context.Context, certPem string, pri HttpsListen: &updateSiteHttpsListen, } updateSiteResp, err := d.sdkClient.UpdateSite(updateSiteReq) + d.logger.Debug("sdk request 'cdnfly.UpdateSite'", slog.Any("request", updateSiteReq), slog.Any("response", updateSiteResp)) if err != nil { return xerrors.Wrap(err, "failed to execute sdk request 'cdnfly.UpdateSite'") - } else { - d.logger.Logt("已修改网站", updateSiteResp) } return nil @@ -150,10 +151,9 @@ func (d *DeployerProvider) deployToCertificate(ctx context.Context, certPem stri Key: &privkeyPem, } updateCertificateResp, err := d.sdkClient.UpdateCertificate(updateCertificateReq) + d.logger.Debug("sdk request 'cdnfly.UpdateCertificate'", slog.Any("request", updateCertificateReq), slog.Any("response", updateCertificateResp)) if err != nil { return xerrors.Wrap(err, "failed to execute sdk request 'cdnfly.UpdateCertificate'") - } else { - d.logger.Logt("已修改证书", updateCertificateResp) } return nil diff --git a/internal/pkg/core/deployer/providers/dogecloud-cdn/dogecloud_cdn.go b/internal/pkg/core/deployer/providers/dogecloud-cdn/dogecloud_cdn.go index 4743b7cd..94368998 100644 --- a/internal/pkg/core/deployer/providers/dogecloud-cdn/dogecloud_cdn.go +++ b/internal/pkg/core/deployer/providers/dogecloud-cdn/dogecloud_cdn.go @@ -2,12 +2,12 @@ import ( "context" + "log/slog" "strconv" xerrors "github.com/pkg/errors" "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/logger" "github.com/usual2970/certimate/internal/pkg/core/uploader" uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/dogecloud" dogesdk "github.com/usual2970/certimate/internal/pkg/vendors/dogecloud-sdk" @@ -24,7 +24,7 @@ type DeployerConfig struct { type DeployerProvider struct { config *DeployerConfig - logger logger.Logger + logger *slog.Logger sdkClient *dogesdk.Client sslUploader uploader.Uploader } @@ -48,14 +48,19 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { return &DeployerProvider{ config: config, - logger: logger.NewNilLogger(), + logger: slog.Default(), sdkClient: client, sslUploader: uploader, }, nil } -func (d *DeployerProvider) WithLogger(logger logger.Logger) *DeployerProvider { - d.logger = logger +func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { + if logger == nil { + d.logger = slog.Default() + } else { + d.logger = logger + } + d.sslUploader.WithLogger(logger) return d } @@ -64,19 +69,18 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe upres, err := d.sslUploader.Upload(ctx, certPem, privkeyPem) if err != nil { return nil, xerrors.Wrap(err, "failed to upload certificate file") + } else { + d.logger.Info("ssl certificate uploaded", slog.Any("result", upres)) } - d.logger.Logt("certificate file uploaded", upres) - // 绑定证书 // REF: https://docs.dogecloud.com/cdn/api-cert-bind bindCdnCertId, _ := strconv.ParseInt(upres.CertId, 10, 64) bindCdnCertResp, err := d.sdkClient.BindCdnCertWithDomain(bindCdnCertId, d.config.Domain) + d.logger.Debug("sdk request 'cdn.BindCdnCert'", slog.Int64("request.certId", bindCdnCertId), slog.String("request.domain", d.config.Domain), slog.Any("response", bindCdnCertResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'cdn.BindCdnCert'") } - d.logger.Logt("已绑定证书", bindCdnCertResp) - return &deployer.DeployResult{}, nil } diff --git a/internal/pkg/core/deployer/providers/edgio-applications/edgio_applications.go b/internal/pkg/core/deployer/providers/edgio-applications/edgio_applications.go index 890cfdf3..572ee4af 100644 --- a/internal/pkg/core/deployer/providers/edgio-applications/edgio_applications.go +++ b/internal/pkg/core/deployer/providers/edgio-applications/edgio_applications.go @@ -2,11 +2,11 @@ import ( "context" + "log/slog" xerrors "github.com/pkg/errors" "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/logger" "github.com/usual2970/certimate/internal/pkg/utils/certs" edgsdk "github.com/usual2970/certimate/internal/pkg/vendors/edgio-sdk/applications/v7" edgsdkDtos "github.com/usual2970/certimate/internal/pkg/vendors/edgio-sdk/applications/v7/dtos" @@ -23,7 +23,7 @@ type DeployerConfig struct { type DeployerProvider struct { config *DeployerConfig - logger logger.Logger + logger *slog.Logger sdkClient *edgsdk.EdgioClient } @@ -41,13 +41,17 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { return &DeployerProvider{ config: config, - logger: logger.NewNilLogger(), + logger: slog.Default(), sdkClient: client, }, nil } -func (d *DeployerProvider) WithLogger(logger logger.Logger) *DeployerProvider { - d.logger = logger +func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { + if logger == nil { + d.logger = slog.Default() + } else { + d.logger = logger + } return d } @@ -67,12 +71,11 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe PrivateKey: privkeyPem, } uploadTlsCertResp, err := d.sdkClient.UploadTlsCert(uploadTlsCertReq) + d.logger.Debug("sdk request 'edgio.UploadTlsCert'", slog.Any("request", uploadTlsCertReq), slog.Any("response", uploadTlsCertResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'edgio.UploadTlsCert'") } - d.logger.Logt("已上传 TLS 证书", uploadTlsCertResp) - return &deployer.DeployResult{}, nil } diff --git a/internal/pkg/core/deployer/providers/gcore-cdn/gcore_cdn.go b/internal/pkg/core/deployer/providers/gcore-cdn/gcore_cdn.go index e1598a5d..a4d1c33e 100644 --- a/internal/pkg/core/deployer/providers/gcore-cdn/gcore_cdn.go +++ b/internal/pkg/core/deployer/providers/gcore-cdn/gcore_cdn.go @@ -3,6 +3,7 @@ import ( "context" "errors" + "log/slog" "strconv" gprovider "github.com/G-Core/gcorelabscdn-go/gcore/provider" @@ -10,7 +11,6 @@ import ( xerrors "github.com/pkg/errors" "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/logger" "github.com/usual2970/certimate/internal/pkg/core/uploader" uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/gcore-cdn" gcoresdk "github.com/usual2970/certimate/internal/pkg/vendors/gcore-sdk/common" @@ -25,7 +25,7 @@ type DeployerConfig struct { type DeployerProvider struct { config *DeployerConfig - logger logger.Logger + logger *slog.Logger sdkClient *gresources.Service sslUploader uploader.Uploader } @@ -51,14 +51,19 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { return &DeployerProvider{ config: config, - logger: logger.NewNilLogger(), + logger: slog.Default(), sdkClient: client, sslUploader: uploader, }, nil } -func (d *DeployerProvider) WithLogger(logger logger.Logger) *DeployerProvider { - d.logger = logger +func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { + if logger == nil { + d.logger = slog.Default() + } else { + d.logger = logger + } + d.sslUploader.WithLogger(logger) return d } @@ -72,16 +77,15 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe if err != nil { return nil, xerrors.Wrap(err, "failed to upload certificate file") } else { - d.logger.Logt("certificate file uploaded", upres) + d.logger.Info("ssl certificate uploaded", slog.Any("result", upres)) } // 获取 CDN 资源详情 // REF: https://api.gcore.com/docs/cdn#tag/CDN-resources/paths/~1cdn~1resources~1%7Bresource_id%7D/get getResourceResp, err := d.sdkClient.Get(context.TODO(), d.config.ResourceId) + d.logger.Debug("sdk request 'resources.Get'", slog.Any("resourceId", d.config.ResourceId), slog.Any("response", getResourceResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'resources.Get'") - } else { - d.logger.Logt("已获取 CDN 资源详情", getResourceResp) } // 更新 CDN 资源详情 @@ -101,10 +105,9 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe Options: getResourceResp.Options, } updateResourceResp, err := d.sdkClient.Update(context.TODO(), d.config.ResourceId, updateResourceReq) + d.logger.Debug("sdk request 'resources.Update'", slog.Int64("resourceId", d.config.ResourceId), slog.Any("request", updateResourceReq), slog.Any("response", updateResourceResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'resources.Update'") - } else { - d.logger.Logt("已更新 CDN 资源详情", updateResourceResp) } return &deployer.DeployResult{}, nil diff --git a/internal/pkg/core/deployer/providers/huaweicloud-cdn/huaweicloud_cdn.go b/internal/pkg/core/deployer/providers/huaweicloud-cdn/huaweicloud_cdn.go index 4a40fbc1..d05d6503 100644 --- a/internal/pkg/core/deployer/providers/huaweicloud-cdn/huaweicloud_cdn.go +++ b/internal/pkg/core/deployer/providers/huaweicloud-cdn/huaweicloud_cdn.go @@ -2,6 +2,7 @@ import ( "context" + "log/slog" "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/global" hcCdn "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/cdn/v2" @@ -10,7 +11,6 @@ import ( xerrors "github.com/pkg/errors" "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/logger" "github.com/usual2970/certimate/internal/pkg/core/uploader" uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/huaweicloud-scm" hwsdk "github.com/usual2970/certimate/internal/pkg/vendors/huaweicloud-sdk" @@ -29,7 +29,7 @@ type DeployerConfig struct { type DeployerProvider struct { config *DeployerConfig - logger logger.Logger + logger *slog.Logger sdkClient *hcCdn.CdnClient sslUploader uploader.Uploader } @@ -60,14 +60,19 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { return &DeployerProvider{ config: config, - logger: logger.NewNilLogger(), + logger: slog.Default(), sdkClient: client, sslUploader: uploader, }, nil } -func (d *DeployerProvider) WithLogger(logger logger.Logger) *DeployerProvider { - d.logger = logger +func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { + if logger == nil { + d.logger = slog.Default() + } else { + d.logger = logger + } + d.sslUploader.WithLogger(logger) return d } @@ -76,22 +81,21 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe upres, err := d.sslUploader.Upload(ctx, certPem, privkeyPem) if err != nil { return nil, xerrors.Wrap(err, "failed to upload certificate file") + } else { + d.logger.Info("ssl certificate uploaded", slog.Any("result", upres)) } - d.logger.Logt("certificate file uploaded", upres) - // 查询加速域名配置 // REF: https://support.huaweicloud.com/api-cdn/ShowDomainFullConfig.html showDomainFullConfigReq := &hcCdnModel.ShowDomainFullConfigRequest{ DomainName: d.config.Domain, } showDomainFullConfigResp, err := d.sdkClient.ShowDomainFullConfig(showDomainFullConfigReq) + d.logger.Debug("sdk request 'cdn.ShowDomainFullConfig'", slog.Any("request", showDomainFullConfigReq), slog.Any("response", showDomainFullConfigResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'cdn.ShowDomainFullConfig'") } - d.logger.Logt("已查询到加速域名配置", showDomainFullConfigResp) - // 更新加速域名配置 // REF: https://support.huaweicloud.com/api-cdn/UpdateDomainMultiCertificates.html // REF: https://support.huaweicloud.com/usermanual-cdn/cdn_01_0306.html @@ -108,12 +112,11 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe }, } updateDomainMultiCertificatesResp, err := d.sdkClient.UpdateDomainMultiCertificates(updateDomainMultiCertificatesReq) + d.logger.Debug("sdk request 'cdn.UploadDomainMultiCertificates'", slog.Any("request", updateDomainMultiCertificatesReq), slog.Any("response", updateDomainMultiCertificatesResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'cdn.UploadDomainMultiCertificates'") } - d.logger.Logt("已更新加速域名配置", updateDomainMultiCertificatesResp) - return &deployer.DeployResult{}, nil } diff --git a/internal/pkg/core/deployer/providers/huaweicloud-elb/huaweicloud_elb.go b/internal/pkg/core/deployer/providers/huaweicloud-elb/huaweicloud_elb.go index 17bc178b..8783c053 100644 --- a/internal/pkg/core/deployer/providers/huaweicloud-elb/huaweicloud_elb.go +++ b/internal/pkg/core/deployer/providers/huaweicloud-elb/huaweicloud_elb.go @@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + "log/slog" "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic" "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/global" @@ -17,7 +18,6 @@ import ( "golang.org/x/exp/slices" "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/logger" "github.com/usual2970/certimate/internal/pkg/core/uploader" uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/huaweicloud-elb" hwsdk "github.com/usual2970/certimate/internal/pkg/vendors/huaweicloud-sdk" @@ -45,7 +45,7 @@ type DeployerConfig struct { type DeployerProvider struct { config *DeployerConfig - logger logger.Logger + logger *slog.Logger sdkClient *hcElb.ElbClient sslUploader uploader.Uploader } @@ -73,14 +73,19 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { return &DeployerProvider{ config: config, - logger: logger.NewNilLogger(), + logger: slog.Default(), sdkClient: client, sslUploader: uploader, }, nil } -func (d *DeployerProvider) WithLogger(logger logger.Logger) *DeployerProvider { - d.logger = logger +func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { + if logger == nil { + d.logger = slog.Default() + } else { + d.logger = logger + } + d.sslUploader.WithLogger(logger) return d } @@ -89,10 +94,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe upres, err := d.sslUploader.Upload(ctx, certPem, privkeyPem) if err != nil { return nil, xerrors.Wrap(err, "failed to upload certificate file") + } else { + d.logger.Info("ssl certificate uploaded", slog.Any("result", upres)) } - d.logger.Logt("certificate file uploaded", upres) - // 根据部署资源类型决定部署方式 switch d.config.ResourceType { case RESOURCE_TYPE_CERTIFICATE: @@ -134,12 +139,11 @@ func (d *DeployerProvider) deployToCertificate(ctx context.Context, certPem stri }, } updateCertificateResp, err := d.sdkClient.UpdateCertificate(updateCertificateReq) + d.logger.Debug("sdk request 'elb.UpdateCertificate'", slog.Any("request", updateCertificateReq), slog.Any("response", updateCertificateResp)) if err != nil { return xerrors.Wrap(err, "failed to execute sdk request 'elb.UpdateCertificate'") } - d.logger.Logt("已更新 ELB 证书", updateCertificateResp) - return nil } @@ -154,12 +158,11 @@ func (d *DeployerProvider) deployToLoadbalancer(ctx context.Context, certPem str LoadbalancerId: d.config.LoadbalancerId, } showLoadBalancerResp, err := d.sdkClient.ShowLoadBalancer(showLoadBalancerReq) + d.logger.Debug("sdk request 'elb.ShowLoadBalancer'", slog.Any("request", showLoadBalancerReq), slog.Any("response", showLoadBalancerResp)) if err != nil { return xerrors.Wrap(err, "failed to execute sdk request 'elb.ShowLoadBalancer'") } - d.logger.Logt("已查询到 ELB 负载均衡器", showLoadBalancerResp) - // 查询监听器列表 // REF: https://support.huaweicloud.com/api-elb/ListListeners.html listenerIds := make([]string, 0) @@ -173,6 +176,7 @@ func (d *DeployerProvider) deployToLoadbalancer(ctx context.Context, certPem str LoadbalancerId: &[]string{showLoadBalancerResp.Loadbalancer.Id}, } listListenersResp, err := d.sdkClient.ListListeners(listListenersReq) + d.logger.Debug("sdk request 'elb.ListListeners'", slog.Any("request", listListenersReq), slog.Any("response", listListenersResp)) if err != nil { return xerrors.Wrap(err, "failed to execute sdk request 'elb.ListListeners'") } @@ -190,20 +194,19 @@ func (d *DeployerProvider) deployToLoadbalancer(ctx context.Context, certPem str } } - d.logger.Logt("已查询到 ELB 负载均衡器下的监听器", listenerIds) - // 上传证书到 SCM upres, err := d.sslUploader.Upload(ctx, certPem, privkeyPem) if err != nil { return xerrors.Wrap(err, "failed to upload certificate file") + } else { + d.logger.Info("ssl certificate uploaded", slog.Any("result", upres)) } - d.logger.Logt("certificate file uploaded", upres) - // 遍历更新监听器证书 if len(listenerIds) == 0 { - return errors.New("listener not found") + d.logger.Info("no listeners to deploy") } else { + d.logger.Info("found https listeners to deploy", slog.Any("listenerIds", listenerIds)) var errs []error for _, listenerId := range listenerIds { @@ -229,10 +232,10 @@ func (d *DeployerProvider) deployToListener(ctx context.Context, certPem string, upres, err := d.sslUploader.Upload(ctx, certPem, privkeyPem) if err != nil { return xerrors.Wrap(err, "failed to upload certificate file") + } else { + d.logger.Info("ssl certificate uploaded", slog.Any("result", upres)) } - d.logger.Logt("certificate file uploaded", upres) - // 更新监听器证书 if err := d.modifyListenerCertificate(ctx, d.config.ListenerId, upres.CertId); err != nil { return err @@ -248,12 +251,11 @@ func (d *DeployerProvider) modifyListenerCertificate(ctx context.Context, cloudL ListenerId: cloudListenerId, } showListenerResp, err := d.sdkClient.ShowListener(showListenerReq) + d.logger.Debug("sdk request 'elb.ShowListener'", slog.Any("request", showListenerReq), slog.Any("response", showListenerResp)) if err != nil { return xerrors.Wrap(err, "failed to execute sdk request 'elb.ShowListener'") } - d.logger.Logt("已查询到 ELB 监听器", showListenerResp) - // 更新监听器 // REF: https://support.huaweicloud.com/api-elb/UpdateListener.html updateListenerReq := &hcElbModel.UpdateListenerRequest{ @@ -274,6 +276,7 @@ func (d *DeployerProvider) modifyListenerCertificate(ctx context.Context, cloudL Id: &showListenerResp.Listener.SniContainerRefs, } listOldCertificateResp, err := d.sdkClient.ListCertificates(listOldCertificateReq) + d.logger.Debug("sdk request 'elb.ListCertificates'", slog.Any("request", listOldCertificateReq), slog.Any("response", listOldCertificateResp)) if err != nil { return xerrors.Wrap(err, "failed to execute sdk request 'elb.ListCertificates'") } @@ -282,6 +285,7 @@ func (d *DeployerProvider) modifyListenerCertificate(ctx context.Context, cloudL CertificateId: cloudCertId, } showNewCertificateResp, err := d.sdkClient.ShowCertificate(showNewCertificateReq) + d.logger.Debug("sdk request 'elb.ShowCertificate'", slog.Any("request", showNewCertificateReq), slog.Any("response", showNewCertificateResp)) if err != nil { return xerrors.Wrap(err, "failed to execute sdk request 'elb.ShowCertificate'") } @@ -311,12 +315,11 @@ func (d *DeployerProvider) modifyListenerCertificate(ctx context.Context, cloudL } } updateListenerResp, err := d.sdkClient.UpdateListener(updateListenerReq) + d.logger.Debug("sdk request 'elb.UpdateListener'", slog.Any("request", updateListenerReq), slog.Any("response", updateListenerResp)) if err != nil { return xerrors.Wrap(err, "failed to execute sdk request 'elb.UpdateListener'") } - d.logger.Logt("已更新 ELB 监听器", updateListenerResp) - return nil } diff --git a/internal/pkg/core/deployer/providers/huaweicloud-waf/huaweicloud_waf.go b/internal/pkg/core/deployer/providers/huaweicloud-waf/huaweicloud_waf.go index 2342edfa..9d124191 100644 --- a/internal/pkg/core/deployer/providers/huaweicloud-waf/huaweicloud_waf.go +++ b/internal/pkg/core/deployer/providers/huaweicloud-waf/huaweicloud_waf.go @@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + "log/slog" "strings" "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic" @@ -17,7 +18,6 @@ import ( xerrors "github.com/pkg/errors" "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/logger" "github.com/usual2970/certimate/internal/pkg/core/uploader" uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/huaweicloud-waf" hwsdk "github.com/usual2970/certimate/internal/pkg/vendors/huaweicloud-sdk" @@ -42,7 +42,7 @@ type DeployerConfig struct { type DeployerProvider struct { config *DeployerConfig - logger logger.Logger + logger *slog.Logger sdkClient *hcWaf.WafClient sslUploader uploader.Uploader } @@ -70,14 +70,19 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { return &DeployerProvider{ config: config, - logger: logger.NewNilLogger(), + logger: slog.Default(), sdkClient: client, sslUploader: uploader, }, nil } -func (d *DeployerProvider) WithLogger(logger logger.Logger) *DeployerProvider { - d.logger = logger +func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { + if logger == nil { + d.logger = slog.Default() + } else { + d.logger = logger + } + d.sslUploader.WithLogger(logger) return d } @@ -87,7 +92,7 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe if err != nil { return nil, xerrors.Wrap(err, "failed to upload certificate file") } else { - d.logger.Logt("certificate file uploaded", upres) + d.logger.Info("ssl certificate uploaded", slog.Any("result", upres)) } // 根据部署资源类型决定部署方式 @@ -125,10 +130,9 @@ func (d *DeployerProvider) deployToCertificate(ctx context.Context, certPem stri CertificateId: d.config.CertificateId, } showCertificateResp, err := d.sdkClient.ShowCertificate(showCertificateReq) + d.logger.Debug("sdk request 'waf.ShowCertificate'", slog.Any("request", showCertificateReq), slog.Any("response", showCertificateResp)) if err != nil { return xerrors.Wrap(err, "failed to execute sdk request 'waf.ShowCertificate'") - } else { - d.logger.Logt("已获取 WAF 证书", showCertificateResp) } // 更新证书 @@ -142,10 +146,9 @@ func (d *DeployerProvider) deployToCertificate(ctx context.Context, certPem stri }, } updateCertificateResp, err := d.sdkClient.UpdateCertificate(updateCertificateReq) + d.logger.Debug("sdk request 'waf.UpdateCertificate'", slog.Any("request", updateCertificateReq), slog.Any("response", updateCertificateResp)) if err != nil { return xerrors.Wrap(err, "failed to execute sdk request 'waf.UpdateCertificate'") - } else { - d.logger.Logt("已更新 WAF 证书", updateCertificateResp) } return nil @@ -161,7 +164,7 @@ func (d *DeployerProvider) deployToCloudServer(ctx context.Context, certPem stri if err != nil { return xerrors.Wrap(err, "failed to upload certificate file") } else { - d.logger.Logt("certificate file uploaded", upres) + d.logger.Info("ssl certificate uploaded", slog.Any("result", upres)) } // 遍历查询云模式防护域名列表,获取防护域名 ID @@ -176,6 +179,7 @@ func (d *DeployerProvider) deployToCloudServer(ctx context.Context, certPem stri Pagesize: hwsdk.Int32Ptr(listHostPageSize), } listHostResp, err := d.sdkClient.ListHost(listHostReq) + d.logger.Debug("sdk request 'waf.ListHost'", slog.Any("request", listHostReq), slog.Any("response", listHostResp)) if err != nil { return xerrors.Wrap(err, "failed to execute sdk request 'waf.ListHost'") } @@ -209,10 +213,9 @@ func (d *DeployerProvider) deployToCloudServer(ctx context.Context, certPem stri }, } updateHostResp, err := d.sdkClient.UpdateHost(updateHostReq) + d.logger.Debug("sdk request 'waf.UpdateHost'", slog.Any("request", updateHostReq), slog.Any("response", updateHostResp)) if err != nil { return xerrors.Wrap(err, "failed to execute sdk request 'waf.UpdateHost'") - } else { - d.logger.Logt("已更新云模式防护域名的配置", updateHostResp) } return nil @@ -228,7 +231,7 @@ func (d *DeployerProvider) deployToPremiumHost(ctx context.Context, certPem stri if err != nil { return xerrors.Wrap(err, "failed to upload certificate file") } else { - d.logger.Logt("certificate file uploaded", upres) + d.logger.Info("ssl certificate uploaded", slog.Any("result", upres)) } // 遍历查询独享模式域名列表,获取防护域名 ID @@ -243,6 +246,7 @@ func (d *DeployerProvider) deployToPremiumHost(ctx context.Context, certPem stri Pagesize: hwsdk.StringPtr(fmt.Sprintf("%d", listPremiumHostPageSize)), } listPremiumHostResp, err := d.sdkClient.ListPremiumHost(listPremiumHostReq) + d.logger.Debug("sdk request 'waf.ListPremiumHost'", slog.Any("request", listPremiumHostReq), slog.Any("response", listPremiumHostResp)) if err != nil { return xerrors.Wrap(err, "failed to execute sdk request 'waf.ListPremiumHost'") } @@ -276,10 +280,9 @@ func (d *DeployerProvider) deployToPremiumHost(ctx context.Context, certPem stri }, } updatePremiumHostResp, err := d.sdkClient.UpdatePremiumHost(updatePremiumHostReq) + d.logger.Debug("sdk request 'waf.UpdatePremiumHost'", slog.Any("request", updatePremiumHostReq), slog.Any("response", updatePremiumHostResp)) if err != nil { return xerrors.Wrap(err, "failed to execute sdk request 'waf.UpdatePremiumHost'") - } else { - d.logger.Logt("已修改独享模式域名配置", updatePremiumHostResp) } return nil diff --git a/internal/pkg/core/deployer/providers/jdcloud-alb/jdcloud_alb.go b/internal/pkg/core/deployer/providers/jdcloud-alb/jdcloud_alb.go index 41625b64..30d93457 100644 --- a/internal/pkg/core/deployer/providers/jdcloud-alb/jdcloud_alb.go +++ b/internal/pkg/core/deployer/providers/jdcloud-alb/jdcloud_alb.go @@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + "log/slog" "strings" jdCore "github.com/jdcloud-api/jdcloud-sdk-go/core" @@ -14,7 +15,6 @@ import ( xerrors "github.com/pkg/errors" "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/logger" "github.com/usual2970/certimate/internal/pkg/core/uploader" uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/jdcloud-ssl" "github.com/usual2970/certimate/internal/pkg/utils/slices" @@ -42,7 +42,7 @@ type DeployerConfig struct { type DeployerProvider struct { config *DeployerConfig - logger logger.Logger + logger *slog.Logger sdkClient *jdLbClient.LbClient sslUploader uploader.Uploader } @@ -69,14 +69,19 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { return &DeployerProvider{ config: config, - logger: logger.NewNilLogger(), + logger: slog.Default(), sdkClient: client, sslUploader: uploader, }, nil } -func (d *DeployerProvider) WithLogger(logger logger.Logger) *DeployerProvider { - d.logger = logger +func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { + if logger == nil { + d.logger = slog.Default() + } else { + d.logger = logger + } + d.sslUploader.WithLogger(logger) return d } @@ -86,7 +91,7 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe if err != nil { return nil, xerrors.Wrap(err, "failed to upload certificate file") } else { - d.logger.Logt("certificate file uploaded", upres) + d.logger.Info("ssl certificate uploaded", slog.Any("result", upres)) } // 根据部署资源类型决定部署方式 @@ -117,10 +122,9 @@ func (d *DeployerProvider) deployToLoadbalancer(ctx context.Context, cloudCertId // REF: https://docs.jdcloud.com/cn/load-balancer/api/describeloadbalancer describeLoadBalancerReq := jdLbApi.NewDescribeLoadBalancerRequest(d.config.RegionId, d.config.LoadbalancerId) describeLoadBalancerResp, err := d.sdkClient.DescribeLoadBalancer(describeLoadBalancerReq) + d.logger.Debug("sdk request 'lb.DescribeLoadBalancer'", slog.Any("request", describeLoadBalancerReq), slog.Any("response", describeLoadBalancerResp)) if err != nil { return xerrors.Wrap(err, "failed to execute sdk request 'lb.DescribeLoadBalancer'") - } else { - d.logger.Logt("已查询到负载均衡器详情", describeLoadBalancerResp) } // 查询监听器列表 @@ -134,6 +138,7 @@ func (d *DeployerProvider) deployToLoadbalancer(ctx context.Context, cloudCertId describeListenersReq.SetPageSize(describeListenersPageNumber) describeListenersReq.SetPageSize(describeListenersPageSize) describeListenersResp, err := d.sdkClient.DescribeListeners(describeListenersReq) + d.logger.Debug("sdk request 'lb.DescribeListeners'", slog.Any("request", describeListenersReq), slog.Any("response", describeListenersResp)) if err != nil { return xerrors.Wrap(err, "failed to execute sdk request 'lb.DescribeListeners'") } @@ -153,9 +158,9 @@ func (d *DeployerProvider) deployToLoadbalancer(ctx context.Context, cloudCertId // 遍历更新监听器证书 if len(listenerIds) == 0 { - return errors.New("listener not found") + d.logger.Info("no listeners to deploy") } else { - d.logger.Logt("已查询到负载均衡器下的全部 HTTPS/TLS 监听器", listenerIds) + d.logger.Info("found https/tls listeners to deploy", slog.Any("listenerIds", listenerIds)) var errs []error @@ -191,10 +196,9 @@ func (d *DeployerProvider) updateListenerCertificate(ctx context.Context, cloudL // REF: https://docs.jdcloud.com/cn/load-balancer/api/describelistener describeListenerReq := jdLbApi.NewDescribeListenerRequest(d.config.RegionId, cloudListenerId) describeListenerResp, err := d.sdkClient.DescribeListener(describeListenerReq) + d.logger.Debug("sdk request 'lb.DescribeListener'", slog.Any("request", describeListenerReq), slog.Any("response", describeListenerResp)) if err != nil { return xerrors.Wrap(err, "failed to execute sdk request 'lb.DescribeListener'") - } else { - d.logger.Logt("已查询到监听器详情", describeListenerResp) } if d.config.Domain == "" { @@ -205,10 +209,9 @@ func (d *DeployerProvider) updateListenerCertificate(ctx context.Context, cloudL updateListenerReq := jdLbApi.NewUpdateListenerRequest(d.config.RegionId, cloudListenerId) updateListenerReq.SetCertificateSpecs([]jdLbModel.CertificateSpec{{CertificateId: cloudCertId}}) updateListenerResp, err := d.sdkClient.UpdateListener(updateListenerReq) + d.logger.Debug("sdk request 'lb.UpdateListener'", slog.Any("request", updateListenerReq), slog.Any("response", updateListenerResp)) if err != nil { return xerrors.Wrap(err, "failed to execute sdk request 'lb.UpdateListener'") - } else { - d.logger.Logt("已修改监听器信息", updateListenerResp) } } else { // 指定 SNI,需部署到扩展证书 @@ -234,10 +237,9 @@ func (d *DeployerProvider) updateListenerCertificate(ctx context.Context, cloudL }), ) updateListenerCertificatesResp, err := d.sdkClient.UpdateListenerCertificates(updateListenerCertificatesReq) + d.logger.Debug("sdk request 'lb.UpdateListenerCertificates'", slog.Any("request", updateListenerCertificatesReq), slog.Any("response", updateListenerCertificatesResp)) if err != nil { return xerrors.Wrap(err, "failed to execute sdk request 'lb.UpdateListenerCertificates'") - } else { - d.logger.Logt("已批量修改扩展证书", updateListenerCertificatesResp) } } diff --git a/internal/pkg/core/deployer/providers/jdcloud-cdn/jdcloud_cdn.go b/internal/pkg/core/deployer/providers/jdcloud-cdn/jdcloud_cdn.go index d5bdae4f..3c473961 100644 --- a/internal/pkg/core/deployer/providers/jdcloud-cdn/jdcloud_cdn.go +++ b/internal/pkg/core/deployer/providers/jdcloud-cdn/jdcloud_cdn.go @@ -2,6 +2,7 @@ import ( "context" + "log/slog" jdCore "github.com/jdcloud-api/jdcloud-sdk-go/core" jdCdnApi "github.com/jdcloud-api/jdcloud-sdk-go/services/cdn/apis" @@ -9,7 +10,6 @@ import ( xerrors "github.com/pkg/errors" "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/logger" "github.com/usual2970/certimate/internal/pkg/core/uploader" uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/jdcloud-ssl" ) @@ -25,7 +25,7 @@ type DeployerConfig struct { type DeployerProvider struct { config *DeployerConfig - logger logger.Logger + logger *slog.Logger sdkClient *jdCdnClient.CdnClient sslUploader uploader.Uploader } @@ -52,14 +52,19 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { return &DeployerProvider{ config: config, - logger: logger.NewNilLogger(), + logger: slog.Default(), sdkClient: client, sslUploader: uploader, }, nil } -func (d *DeployerProvider) WithLogger(logger logger.Logger) *DeployerProvider { - d.logger = logger +func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { + if logger == nil { + d.logger = slog.Default() + } else { + d.logger = logger + } + d.sslUploader.WithLogger(logger) return d } @@ -68,10 +73,9 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe // REF: https://docs.jdcloud.com/cn/cdn/api/querydomainconfig queryDomainConfigReq := jdCdnApi.NewQueryDomainConfigRequest(d.config.Domain) queryDomainConfigResp, err := d.sdkClient.QueryDomainConfig(queryDomainConfigReq) + d.logger.Debug("sdk request 'cdn.QueryDomainConfig'", slog.Any("request", queryDomainConfigReq), slog.Any("response", queryDomainConfigResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'cdn.QueryDomainConfig'") - } else { - d.logger.Logt("已查询到域名配置信息", queryDomainConfigResp) } // 上传证书到 SSL @@ -79,7 +83,7 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe if err != nil { return nil, xerrors.Wrap(err, "failed to upload certificate file") } else { - d.logger.Logt("certificate file uploaded", upres) + d.logger.Info("ssl certificate uploaded", slog.Any("result", upres)) } // 设置通讯协议 @@ -92,10 +96,9 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe setHttpTypeReq.SetSslCertId(upres.CertId) setHttpTypeReq.SetJumpType(queryDomainConfigResp.Result.HttpsJumpType) setHttpTypeResp, err := d.sdkClient.SetHttpType(setHttpTypeReq) + d.logger.Debug("sdk request 'cdn.QueryDomainConfig'", slog.Any("request", setHttpTypeReq), slog.Any("response", setHttpTypeResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'cdn.SetHttpType'") - } else { - d.logger.Logt("已设置通讯协议", setHttpTypeResp) } return &deployer.DeployResult{}, nil diff --git a/internal/pkg/core/deployer/providers/jdcloud-live/jdcloud_live.go b/internal/pkg/core/deployer/providers/jdcloud-live/jdcloud_live.go index 7998fb16..ea125408 100644 --- a/internal/pkg/core/deployer/providers/jdcloud-live/jdcloud_live.go +++ b/internal/pkg/core/deployer/providers/jdcloud-live/jdcloud_live.go @@ -2,6 +2,7 @@ import ( "context" + "log/slog" jdCore "github.com/jdcloud-api/jdcloud-sdk-go/core" jdLiveApi "github.com/jdcloud-api/jdcloud-sdk-go/services/live/apis" @@ -9,7 +10,6 @@ import ( xerrors "github.com/pkg/errors" "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/logger" ) type DeployerConfig struct { @@ -23,7 +23,7 @@ type DeployerConfig struct { type DeployerProvider struct { config *DeployerConfig - logger logger.Logger + logger *slog.Logger sdkClient *jdLiveClient.LiveClient } @@ -41,13 +41,17 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { return &DeployerProvider{ config: config, - logger: logger.NewNilLogger(), + logger: slog.Default(), sdkClient: client, }, nil } -func (d *DeployerProvider) WithLogger(logger logger.Logger) *DeployerProvider { - d.logger = logger +func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { + if logger == nil { + d.logger = slog.Default() + } else { + d.logger = logger + } return d } @@ -58,10 +62,9 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe setLiveDomainCertificateReq.SetCert(certPem) setLiveDomainCertificateReq.SetKey(privkeyPem) setLiveDomainCertificateResp, err := d.sdkClient.SetLiveDomainCertificate(setLiveDomainCertificateReq) + d.logger.Debug("sdk request 'live.SetLiveDomainCertificate'", slog.Any("request", setLiveDomainCertificateReq), slog.Any("response", setLiveDomainCertificateResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'live.SetLiveDomainCertificate'") - } else { - d.logger.Logt("已设置直播证书", setLiveDomainCertificateResp) } return &deployer.DeployResult{}, nil diff --git a/internal/pkg/core/deployer/providers/jdcloud-vod/jdcloud_vod.go b/internal/pkg/core/deployer/providers/jdcloud-vod/jdcloud_vod.go index b83fd430..69410c78 100644 --- a/internal/pkg/core/deployer/providers/jdcloud-vod/jdcloud_vod.go +++ b/internal/pkg/core/deployer/providers/jdcloud-vod/jdcloud_vod.go @@ -3,6 +3,7 @@ import ( "context" "fmt" + "log/slog" "strconv" "time" @@ -12,7 +13,6 @@ import ( xerrors "github.com/pkg/errors" "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/logger" ) type DeployerConfig struct { @@ -26,7 +26,7 @@ type DeployerConfig struct { type DeployerProvider struct { config *DeployerConfig - logger logger.Logger + logger *slog.Logger sdkClient *jdVodClient.VodClient } @@ -44,13 +44,17 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { return &DeployerProvider{ config: config, - logger: logger.NewNilLogger(), + logger: slog.Default(), sdkClient: client, }, nil } -func (d *DeployerProvider) WithLogger(logger logger.Logger) *DeployerProvider { - d.logger = logger +func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { + if logger == nil { + d.logger = slog.Default() + } else { + d.logger = logger + } return d } @@ -65,6 +69,7 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe listDomainsReq.SetPageNumber(1) listDomainsReq.SetPageSize(100) listDomainsResp, err := d.sdkClient.ListDomains(listDomainsReq) + d.logger.Debug("sdk request 'vod.ListDomains'", slog.Any("request", listDomainsReq), slog.Any("response", listDomainsResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'vod.ListDomains'") } @@ -90,10 +95,9 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe // REF: https://docs.jdcloud.com/cn/video-on-demand/api/gethttpssl getHttpSslReq := jdVodApi.NewGetHttpSslRequest(domainId) getHttpSslResp, err := d.sdkClient.GetHttpSsl(getHttpSslReq) + d.logger.Debug("sdk request 'vod.GetHttpSsl'", slog.Any("request", getHttpSslReq), slog.Any("response", getHttpSslResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'vod.GetHttpSsl'") - } else { - d.logger.Logt("已查询到域名 SSL 配置", getHttpSslResp) } // 设置域名 SSL 配置 @@ -106,10 +110,9 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe setHttpSslReq.SetJumpType(getHttpSslResp.Result.JumpType) setHttpSslReq.SetEnabled(true) setHttpSslResp, err := d.sdkClient.SetHttpSsl(setHttpSslReq) + d.logger.Debug("sdk request 'vod.SetHttpSsl'", slog.Any("request", setHttpSslReq), slog.Any("response", setHttpSslResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'vod.SetHttpSsl'") - } else { - d.logger.Logt("已设置域名 SSL 配置", setHttpSslResp) } return &deployer.DeployResult{}, nil diff --git a/internal/pkg/core/deployer/providers/k8s-secret/k8s_secret.go b/internal/pkg/core/deployer/providers/k8s-secret/k8s_secret.go index c97e4386..e27070c8 100644 --- a/internal/pkg/core/deployer/providers/k8s-secret/k8s_secret.go +++ b/internal/pkg/core/deployer/providers/k8s-secret/k8s_secret.go @@ -1,8 +1,9 @@ -package k8ssecret +package k8ssecret import ( "context" "errors" + "log/slog" "strings" xerrors "github.com/pkg/errors" @@ -13,7 +14,6 @@ import ( "k8s.io/client-go/tools/clientcmd" "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/logger" "github.com/usual2970/certimate/internal/pkg/utils/certs" ) @@ -34,7 +34,7 @@ type DeployerConfig struct { type DeployerProvider struct { config *DeployerConfig - logger logger.Logger + logger *slog.Logger } var _ deployer.Deployer = (*DeployerProvider)(nil) @@ -45,13 +45,17 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { } return &DeployerProvider{ - logger: logger.NewNilLogger(), + logger: slog.Default(), config: config, }, nil } -func (d *DeployerProvider) WithLogger(logger logger.Logger) *DeployerProvider { - d.logger = logger +func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { + if logger == nil { + d.logger = slog.Default() + } else { + d.logger = logger + } return d } @@ -110,11 +114,11 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe secretPayload.Data[d.config.SecretDataKeyForCrt] = []byte(certPem) secretPayload.Data[d.config.SecretDataKeyForKey] = []byte(privkeyPem) - _, err = client.CoreV1().Secrets(d.config.Namespace).Create(context.TODO(), secretPayload, k8sMeta.CreateOptions{}) + secretPayload, err = client.CoreV1().Secrets(d.config.Namespace).Create(context.TODO(), secretPayload, k8sMeta.CreateOptions{}) + d.logger.Debug("k8s operate 'Secrets.Create'", slog.String("namespace", d.config.Namespace), slog.Any("secret", secretPayload)) if err != nil { return nil, xerrors.Wrap(err, "failed to create k8s secret") } else { - d.logger.Logf("k8s secret created", secretPayload) return &deployer.DeployResult{}, nil } } @@ -134,12 +138,11 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe secretPayload.Data[d.config.SecretDataKeyForCrt] = []byte(certPem) secretPayload.Data[d.config.SecretDataKeyForKey] = []byte(privkeyPem) secretPayload, err = client.CoreV1().Secrets(d.config.Namespace).Update(context.TODO(), secretPayload, k8sMeta.UpdateOptions{}) + d.logger.Debug("k8s operate 'Secrets.Update'", slog.String("namespace", d.config.Namespace), slog.Any("secret", secretPayload)) if err != nil { return nil, xerrors.Wrap(err, "failed to update k8s secret") } - d.logger.Logf("k8s secret updated", secretPayload) - return &deployer.DeployResult{}, nil } diff --git a/internal/pkg/core/deployer/providers/local/local.go b/internal/pkg/core/deployer/providers/local/local.go index 7952f63c..1f28df33 100644 --- a/internal/pkg/core/deployer/providers/local/local.go +++ b/internal/pkg/core/deployer/providers/local/local.go @@ -1,16 +1,16 @@ -package local +package local import ( "bytes" "context" "fmt" + "log/slog" "os/exec" "runtime" xerrors "github.com/pkg/errors" "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/logger" "github.com/usual2970/certimate/internal/pkg/utils/certs" "github.com/usual2970/certimate/internal/pkg/utils/files" ) @@ -45,7 +45,7 @@ type DeployerConfig struct { type DeployerProvider struct { config *DeployerConfig - logger logger.Logger + logger *slog.Logger } var _ deployer.Deployer = (*DeployerProvider)(nil) @@ -57,12 +57,16 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { return &DeployerProvider{ config: config, - logger: logger.NewNilLogger(), + logger: slog.Default(), }, nil } -func (d *DeployerProvider) WithLogger(logger logger.Logger) *DeployerProvider { - d.logger = logger +func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { + if logger == nil { + d.logger = slog.Default() + } else { + d.logger = logger + } return d } @@ -70,11 +74,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe // 执行前置命令 if d.config.PreCommand != "" { stdout, stderr, err := execCommand(d.config.ShellEnv, d.config.PreCommand) + d.logger.Debug("run pre-command", slog.String("stdout", stdout), slog.String("stderr", stderr)) if err != nil { return nil, xerrors.Wrapf(err, "failed to execute pre-command, stdout: %s, stderr: %s", stdout, stderr) } - - d.logger.Logt("pre-command executed", stdout) } // 写入证书和私钥文件 @@ -83,42 +86,36 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe if err := files.WriteString(d.config.OutputCertPath, certPem); err != nil { return nil, xerrors.Wrap(err, "failed to save certificate file") } - - d.logger.Logt("certificate file saved") + d.logger.Info("ssl certificate file saved", slog.String("path", d.config.OutputCertPath)) if err := files.WriteString(d.config.OutputKeyPath, privkeyPem); err != nil { return nil, xerrors.Wrap(err, "failed to save private key file") } - - d.logger.Logt("private key file saved") + d.logger.Info("ssl private key file saved", slog.String("path", d.config.OutputKeyPath)) case OUTPUT_FORMAT_PFX: pfxData, err := certs.TransformCertificateFromPEMToPFX(certPem, privkeyPem, d.config.PfxPassword) if err != nil { return nil, xerrors.Wrap(err, "failed to transform certificate to PFX") } - - d.logger.Logt("certificate transformed to PFX") + d.logger.Info("ssl certificate transformed to pfx") if err := files.Write(d.config.OutputCertPath, pfxData); err != nil { return nil, xerrors.Wrap(err, "failed to save certificate file") } - - d.logger.Logt("certificate file saved") + d.logger.Info("ssl certificate file saved", slog.String("path", d.config.OutputCertPath)) case OUTPUT_FORMAT_JKS: jksData, err := certs.TransformCertificateFromPEMToJKS(certPem, privkeyPem, d.config.JksAlias, d.config.JksKeypass, d.config.JksStorepass) if err != nil { return nil, xerrors.Wrap(err, "failed to transform certificate to JKS") } - - d.logger.Logt("certificate transformed to JKS") + d.logger.Info("ssl certificate transformed to jks") if err := files.Write(d.config.OutputCertPath, jksData); err != nil { return nil, xerrors.Wrap(err, "failed to save certificate file") } - - d.logger.Logt("certificate file uploaded") + d.logger.Info("ssl certificate file saved", slog.String("path", d.config.OutputCertPath)) default: return nil, fmt.Errorf("unsupported output format: %s", d.config.OutputFormat) @@ -127,11 +124,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe // 执行后置命令 if d.config.PostCommand != "" { stdout, stderr, err := execCommand(d.config.ShellEnv, d.config.PostCommand) + d.logger.Debug("run post-command", slog.String("stdout", stdout), slog.String("stderr", stderr)) if err != nil { return nil, xerrors.Wrapf(err, "failed to execute post-command, stdout: %s, stderr: %s", stdout, stderr) } - - d.logger.Logt("post-command executed", stdout) } return &deployer.DeployResult{}, nil diff --git a/internal/pkg/core/deployer/providers/qiniu-cdn/qiniu_cdn.go b/internal/pkg/core/deployer/providers/qiniu-cdn/qiniu_cdn.go index cdb62b8c..02dac427 100644 --- a/internal/pkg/core/deployer/providers/qiniu-cdn/qiniu_cdn.go +++ b/internal/pkg/core/deployer/providers/qiniu-cdn/qiniu_cdn.go @@ -2,13 +2,13 @@ import ( "context" + "log/slog" "strings" xerrors "github.com/pkg/errors" "github.com/qiniu/go-sdk/v7/auth" "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/logger" "github.com/usual2970/certimate/internal/pkg/core/uploader" uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/qiniu-sslcert" qiniusdk "github.com/usual2970/certimate/internal/pkg/vendors/qiniu-sdk" @@ -25,7 +25,7 @@ type DeployerConfig struct { type DeployerProvider struct { config *DeployerConfig - logger logger.Logger + logger *slog.Logger sdkClient *qiniusdk.Client sslUploader uploader.Uploader } @@ -49,14 +49,19 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { return &DeployerProvider{ config: config, - logger: logger.NewNilLogger(), + logger: slog.Default(), sdkClient: client, sslUploader: uploader, }, nil } -func (d *DeployerProvider) WithLogger(logger logger.Logger) *DeployerProvider { - d.logger = logger +func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { + if logger == nil { + d.logger = slog.Default() + } else { + d.logger = logger + } + d.sslUploader.WithLogger(logger) return d } @@ -65,38 +70,35 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe upres, err := d.sslUploader.Upload(ctx, certPem, privkeyPem) if err != nil { return nil, xerrors.Wrap(err, "failed to upload certificate file") + } else { + d.logger.Info("ssl certificate uploaded", slog.Any("result", upres)) } - d.logger.Logt("certificate file uploaded", upres) - // "*.example.com" → ".example.com",适配七牛云 CDN 要求的泛域名格式 domain := strings.TrimPrefix(d.config.Domain, "*") // 获取域名信息 // REF: https://developer.qiniu.com/fusion/4246/the-domain-name getDomainInfoResp, err := d.sdkClient.GetDomainInfo(context.TODO(), domain) + d.logger.Debug("sdk request 'cdn.GetDomainInfo'", slog.String("request.domain", domain), slog.Any("response", getDomainInfoResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'cdn.GetDomainInfo'") } - d.logger.Logt("已获取域名信息", getDomainInfoResp) - // 判断域名是否已启用 HTTPS。如果已启用,修改域名证书;否则,启用 HTTPS // REF: https://developer.qiniu.com/fusion/4246/the-domain-name if getDomainInfoResp.Https != nil && getDomainInfoResp.Https.CertID != "" { modifyDomainHttpsConfResp, err := d.sdkClient.ModifyDomainHttpsConf(context.TODO(), domain, upres.CertId, getDomainInfoResp.Https.ForceHttps, getDomainInfoResp.Https.Http2Enable) + d.logger.Debug("sdk request 'cdn.ModifyDomainHttpsConf'", slog.String("request.domain", domain), slog.String("request.certId", upres.CertId), slog.Any("response", modifyDomainHttpsConfResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'cdn.ModifyDomainHttpsConf'") } - - d.logger.Logt("已修改域名证书", modifyDomainHttpsConfResp) } else { enableDomainHttpsResp, err := d.sdkClient.EnableDomainHttps(context.TODO(), domain, upres.CertId, true, true) + d.logger.Debug("sdk request 'cdn.EnableDomainHttps'", slog.String("request.domain", domain), slog.String("request.certId", upres.CertId), slog.Any("response", enableDomainHttpsResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'cdn.EnableDomainHttps'") } - - d.logger.Logt("已将域名升级为 HTTPS", enableDomainHttpsResp) } return &deployer.DeployResult{}, nil diff --git a/internal/pkg/core/deployer/providers/qiniu-pili/qiniu_pili.go b/internal/pkg/core/deployer/providers/qiniu-pili/qiniu_pili.go index b9121694..f684253b 100644 --- a/internal/pkg/core/deployer/providers/qiniu-pili/qiniu_pili.go +++ b/internal/pkg/core/deployer/providers/qiniu-pili/qiniu_pili.go @@ -2,12 +2,12 @@ import ( "context" + "log/slog" xerrors "github.com/pkg/errors" "github.com/qiniu/go-sdk/v7/pili" "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/logger" "github.com/usual2970/certimate/internal/pkg/core/uploader" uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/qiniu-sslcert" ) @@ -25,7 +25,7 @@ type DeployerConfig struct { type DeployerProvider struct { config *DeployerConfig - logger logger.Logger + logger *slog.Logger sdkClient *pili.Manager sslUploader uploader.Uploader } @@ -49,14 +49,19 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { return &DeployerProvider{ config: config, - logger: logger.NewNilLogger(), + logger: slog.Default(), sdkClient: manager, sslUploader: uploader, }, nil } -func (d *DeployerProvider) WithLogger(logger logger.Logger) *DeployerProvider { - d.logger = logger +func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { + if logger == nil { + d.logger = slog.Default() + } else { + d.logger = logger + } + d.sslUploader.WithLogger(logger) return d } @@ -65,10 +70,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe upres, err := d.sslUploader.Upload(ctx, certPem, privkeyPem) if err != nil { return nil, xerrors.Wrap(err, "failed to upload certificate file") + } else { + d.logger.Info("ssl certificate uploaded", slog.Any("result", upres)) } - d.logger.Logt("certificate file uploaded", upres) - // 修改域名证书配置 // REF: https://developer.qiniu.com/pili/9910/pili-service-sdk#66 setDomainCertReq := pili.SetDomainCertRequest{ @@ -77,11 +82,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe CertName: upres.CertName, } err = d.sdkClient.SetDomainCert(context.TODO(), setDomainCertReq) + d.logger.Debug("sdk request 'pili.SetDomainCert'", slog.Any("request", setDomainCertReq)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'pili.SetDomainCert'") } - d.logger.Logt("已修改域名证书配置") - return &deployer.DeployResult{}, nil } diff --git a/internal/pkg/core/deployer/providers/safeline/safeline.go b/internal/pkg/core/deployer/providers/safeline/safeline.go index d0186100..8079027f 100644 --- a/internal/pkg/core/deployer/providers/safeline/safeline.go +++ b/internal/pkg/core/deployer/providers/safeline/safeline.go @@ -5,12 +5,12 @@ import ( "crypto/tls" "errors" "fmt" + "log/slog" "net/url" xerrors "github.com/pkg/errors" "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/logger" safelinesdk "github.com/usual2970/certimate/internal/pkg/vendors/safeline-sdk" ) @@ -30,7 +30,7 @@ type DeployerConfig struct { type DeployerProvider struct { config *DeployerConfig - logger logger.Logger + logger *slog.Logger sdkClient *safelinesdk.Client } @@ -48,13 +48,17 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { return &DeployerProvider{ config: config, - logger: logger.NewNilLogger(), + logger: slog.Default(), sdkClient: client, }, nil } -func (d *DeployerProvider) WithLogger(logger logger.Logger) *DeployerProvider { - d.logger = logger +func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { + if logger == nil { + d.logger = slog.Default() + } else { + d.logger = logger + } return d } @@ -88,10 +92,9 @@ func (d *DeployerProvider) deployToCertificate(ctx context.Context, certPem stri }, } updateCertificateResp, err := d.sdkClient.UpdateCertificate(updateCertificateReq) + d.logger.Debug("sdk request 'safeline.UpdateCertificate'", slog.Any("request", updateCertificateReq), slog.Any("response", updateCertificateResp)) if err != nil { return xerrors.Wrap(err, "failed to execute sdk request 'safeline.UpdateCertificate'") - } else { - d.logger.Logt("已更新证书", updateCertificateResp) } return nil diff --git a/internal/pkg/core/deployer/providers/ssh/ssh.go b/internal/pkg/core/deployer/providers/ssh/ssh.go index a1617327..1a9c0841 100644 --- a/internal/pkg/core/deployer/providers/ssh/ssh.go +++ b/internal/pkg/core/deployer/providers/ssh/ssh.go @@ -1,9 +1,10 @@ -package ssh +package ssh import ( "bytes" "context" "fmt" + "log/slog" "os" "path/filepath" @@ -13,7 +14,6 @@ import ( "golang.org/x/crypto/ssh" "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/logger" "github.com/usual2970/certimate/internal/pkg/utils/certs" ) @@ -60,7 +60,7 @@ type DeployerConfig struct { type DeployerProvider struct { config *DeployerConfig - logger logger.Logger + logger *slog.Logger } var _ deployer.Deployer = (*DeployerProvider)(nil) @@ -72,12 +72,16 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { return &DeployerProvider{ config: config, - logger: logger.NewNilLogger(), + logger: slog.Default(), }, nil } -func (d *DeployerProvider) WithLogger(logger logger.Logger) *DeployerProvider { - d.logger = logger +func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { + if logger == nil { + d.logger = slog.Default() + } else { + d.logger = logger + } return d } @@ -96,16 +100,15 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe } defer client.Close() - d.logger.Logt("SSH connected") + d.logger.Info("ssh connected") // 执行前置命令 if d.config.PreCommand != "" { stdout, stderr, err := execSshCommand(client, d.config.PreCommand) + d.logger.Debug("run pre-command", slog.String("stdout", stdout), slog.String("stderr", stderr)) if err != nil { return nil, xerrors.Wrapf(err, "failed to execute pre-command: stdout: %s, stderr: %s", stdout, stderr) } - - d.logger.Logt("SSH pre-command executed", stdout) } // 上传证书和私钥文件 @@ -114,42 +117,36 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe if err := writeFileString(client, d.config.UseSCP, d.config.OutputCertPath, certPem); err != nil { return nil, xerrors.Wrap(err, "failed to upload certificate file") } - - d.logger.Logt("certificate file uploaded") + d.logger.Info("ssl certificate file uploaded", slog.String("path", d.config.OutputCertPath)) if err := writeFileString(client, d.config.UseSCP, d.config.OutputKeyPath, privkeyPem); err != nil { return nil, xerrors.Wrap(err, "failed to upload private key file") } - - d.logger.Logt("private key file uploaded") + d.logger.Info("ssl private key file uploaded", slog.String("path", d.config.OutputKeyPath)) case OUTPUT_FORMAT_PFX: pfxData, err := certs.TransformCertificateFromPEMToPFX(certPem, privkeyPem, d.config.PfxPassword) if err != nil { return nil, xerrors.Wrap(err, "failed to transform certificate to PFX") } - - d.logger.Logt("certificate transformed to PFX") + d.logger.Info("ssl certificate transformed to pfx") if err := writeFile(client, d.config.UseSCP, d.config.OutputCertPath, pfxData); err != nil { return nil, xerrors.Wrap(err, "failed to upload certificate file") } - - d.logger.Logt("certificate file uploaded") + d.logger.Info("ssl certificate file uploaded", slog.String("path", d.config.OutputCertPath)) case OUTPUT_FORMAT_JKS: jksData, err := certs.TransformCertificateFromPEMToJKS(certPem, privkeyPem, d.config.JksAlias, d.config.JksKeypass, d.config.JksStorepass) if err != nil { return nil, xerrors.Wrap(err, "failed to transform certificate to JKS") } - - d.logger.Logt("certificate transformed to JKS") + d.logger.Info("ssl certificate transformed to jks") if err := writeFile(client, d.config.UseSCP, d.config.OutputCertPath, jksData); err != nil { return nil, xerrors.Wrap(err, "failed to upload certificate file") } - - d.logger.Logt("certificate file uploaded") + d.logger.Info("ssl certificate file uploaded", slog.String("path", d.config.OutputCertPath)) default: return nil, fmt.Errorf("unsupported output format: %s", d.config.OutputFormat) @@ -158,11 +155,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe // 执行后置命令 if d.config.PostCommand != "" { stdout, stderr, err := execSshCommand(client, d.config.PostCommand) + d.logger.Debug("run post-command", slog.String("stdout", stdout), slog.String("stderr", stderr)) if err != nil { return nil, xerrors.Wrapf(err, "failed to execute post-command, stdout: %s, stderr: %s", stdout, stderr) } - - d.logger.Logt("SSH post-command executed", stdout) } return &deployer.DeployResult{}, nil diff --git a/internal/pkg/core/deployer/providers/tencentcloud-cdn/tencentcloud_cdn.go b/internal/pkg/core/deployer/providers/tencentcloud-cdn/tencentcloud_cdn.go index 1784354d..da76c955 100644 --- a/internal/pkg/core/deployer/providers/tencentcloud-cdn/tencentcloud_cdn.go +++ b/internal/pkg/core/deployer/providers/tencentcloud-cdn/tencentcloud_cdn.go @@ -2,6 +2,7 @@ import ( "context" + "log/slog" "strings" xerrors "github.com/pkg/errors" @@ -12,7 +13,6 @@ import ( "golang.org/x/exp/slices" "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/logger" "github.com/usual2970/certimate/internal/pkg/core/uploader" uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/tencentcloud-ssl" ) @@ -28,7 +28,7 @@ type DeployerConfig struct { type DeployerProvider struct { config *DeployerConfig - logger logger.Logger + logger *slog.Logger sdkClients *wSdkClients sslUploader uploader.Uploader } @@ -60,14 +60,19 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { return &DeployerProvider{ config: config, - logger: logger.NewNilLogger(), + logger: slog.Default(), sdkClients: clients, sslUploader: uploader, }, nil } -func (d *DeployerProvider) WithLogger(logger logger.Logger) *DeployerProvider { - d.logger = logger +func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { + if logger == nil { + d.logger = slog.Default() + } else { + d.logger = logger + } + d.sslUploader.WithLogger(logger) return d } @@ -76,10 +81,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe upres, err := d.sslUploader.Upload(ctx, certPem, privkeyPem) if err != nil { return nil, xerrors.Wrap(err, "failed to upload certificate file") + } else { + d.logger.Info("ssl certificate uploaded", slog.Any("result", upres)) } - d.logger.Logt("certificate file uploaded", upres) - // 获取待部署的 CDN 实例 // 如果是泛域名,根据证书匹配 CDN 实例 instanceIds := make([]string, 0) @@ -111,8 +116,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe } if len(instanceIds) == 0 { - d.logger.Logt("已部署过或没有要部署的 CDN 实例") + d.logger.Info("no cdn instances to deploy") } else { + d.logger.Info("found cdn instances to deploy", slog.Any("instanceIds", instanceIds)) + // 证书部署到 CDN 实例 // REF: https://cloud.tencent.com/document/product/400/91667 deployCertificateInstanceReq := tcSsl.NewDeployCertificateInstanceRequest() @@ -121,11 +128,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe deployCertificateInstanceReq.Status = common.Int64Ptr(1) deployCertificateInstanceReq.InstanceIdList = common.StringPtrs(instanceIds) deployCertificateInstanceResp, err := d.sdkClients.ssl.DeployCertificateInstance(deployCertificateInstanceReq) + d.logger.Debug("sdk request 'ssl.DeployCertificateInstance'", slog.Any("request", deployCertificateInstanceReq), slog.Any("response", deployCertificateInstanceResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'ssl.DeployCertificateInstance'") } - - d.logger.Logt("已部署证书到云资源实例", deployCertificateInstanceResp.Response) } return &deployer.DeployResult{}, nil @@ -138,6 +144,7 @@ func (d *DeployerProvider) getDomainsByCertificateId(cloudCertId string) ([]stri describeCertDomainsReq.CertId = common.StringPtr(cloudCertId) describeCertDomainsReq.Product = common.StringPtr("cdn") describeCertDomainsResp, err := d.sdkClients.cdn.DescribeCertDomains(describeCertDomainsReq) + d.logger.Debug("sdk request 'cdn.DescribeCertDomains'", slog.Any("request", describeCertDomainsReq), slog.Any("response", describeCertDomainsResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'cdn.DescribeCertDomains'") } @@ -159,6 +166,7 @@ func (d *DeployerProvider) getDeployedDomainsByCertificateId(cloudCertId string) describeDeployedResourcesReq.CertificateIds = common.StringPtrs([]string{cloudCertId}) describeDeployedResourcesReq.ResourceType = common.StringPtr("cdn") describeDeployedResourcesResp, err := d.sdkClients.ssl.DescribeDeployedResources(describeDeployedResourcesReq) + d.logger.Debug("sdk request 'cdn.DescribeDeployedResources'", slog.Any("request", describeDeployedResourcesReq), slog.Any("response", describeDeployedResourcesResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'cdn.DescribeDeployedResources'") } diff --git a/internal/pkg/core/deployer/providers/tencentcloud-clb/tencentcloud_clb.go b/internal/pkg/core/deployer/providers/tencentcloud-clb/tencentcloud_clb.go index 521f3e34..3f4e6600 100644 --- a/internal/pkg/core/deployer/providers/tencentcloud-clb/tencentcloud_clb.go +++ b/internal/pkg/core/deployer/providers/tencentcloud-clb/tencentcloud_clb.go @@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + "log/slog" xerrors "github.com/pkg/errors" tcClb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb/v20180317" @@ -12,7 +13,6 @@ import ( tcSsl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/logger" "github.com/usual2970/certimate/internal/pkg/core/uploader" uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/tencentcloud-ssl" ) @@ -39,7 +39,7 @@ type DeployerConfig struct { type DeployerProvider struct { config *DeployerConfig - logger logger.Logger + logger *slog.Logger sdkClients *wSdkClients sslUploader uploader.Uploader } @@ -71,14 +71,19 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { return &DeployerProvider{ config: config, - logger: logger.NewNilLogger(), + logger: slog.Default(), sdkClients: clients, sslUploader: uploader, }, nil } -func (d *DeployerProvider) WithLogger(logger logger.Logger) *DeployerProvider { - d.logger = logger +func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { + if logger == nil { + d.logger = slog.Default() + } else { + d.logger = logger + } + d.sslUploader.WithLogger(logger) return d } @@ -87,10 +92,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe upres, err := d.sslUploader.Upload(ctx, certPem, privkeyPem) if err != nil { return nil, xerrors.Wrap(err, "failed to upload certificate file") + } else { + d.logger.Info("ssl certificate uploaded", slog.Any("result", upres)) } - d.logger.Logt("certificate file uploaded", upres) - // 根据部署资源类型决定部署方式 switch d.config.ResourceType { case RESOURCE_TYPE_VIA_SSLDEPLOY: @@ -142,12 +147,11 @@ func (d *DeployerProvider) deployViaSslService(ctx context.Context, cloudCertId deployCertificateInstanceReq.InstanceIdList = common.StringPtrs([]string{fmt.Sprintf("%s|%s|%s", d.config.LoadbalancerId, d.config.ListenerId, d.config.Domain)}) } deployCertificateInstanceResp, err := d.sdkClients.ssl.DeployCertificateInstance(deployCertificateInstanceReq) + d.logger.Debug("sdk request 'ssl.DeployCertificateInstance'", slog.Any("request", deployCertificateInstanceReq), slog.Any("response", deployCertificateInstanceResp)) if err != nil { return xerrors.Wrap(err, "failed to execute sdk request 'ssl.DeployCertificateInstance'") } - d.logger.Logt("已部署证书到云资源实例", deployCertificateInstanceResp.Response) - return nil } @@ -162,6 +166,7 @@ func (d *DeployerProvider) deployToLoadbalancer(ctx context.Context, cloudCertId describeListenersReq := tcClb.NewDescribeListenersRequest() describeListenersReq.LoadBalancerId = common.StringPtr(d.config.LoadbalancerId) describeListenersResp, err := d.sdkClients.clb.DescribeListeners(describeListenersReq) + d.logger.Debug("sdk request 'clb.DescribeListeners'", slog.Any("request", describeListenersReq), slog.Any("response", describeListenersResp)) if err != nil { return xerrors.Wrap(err, "failed to execute sdk request 'clb.DescribeListeners'") } else { @@ -176,12 +181,11 @@ func (d *DeployerProvider) deployToLoadbalancer(ctx context.Context, cloudCertId } } - d.logger.Logt("已查询到负载均衡器下的监听器", listenerIds) - // 遍历更新监听器证书 if len(listenerIds) == 0 { - return errors.New("listener not found") + d.logger.Info("no clb listeners to deploy") } else { + d.logger.Info("found https/tcpssl/quic listeners to deploy", slog.Any("listenerIds", listenerIds)) var errs []error for _, listenerId := range listenerIds { @@ -236,12 +240,11 @@ func (d *DeployerProvider) deployToRuleDomain(ctx context.Context, cloudCertId s CertId: common.StringPtr(cloudCertId), } modifyDomainAttributesResp, err := d.sdkClients.clb.ModifyDomainAttributes(modifyDomainAttributesReq) + d.logger.Debug("sdk request 'clb.ModifyDomainAttributes'", slog.Any("request", modifyDomainAttributesReq), slog.Any("response", modifyDomainAttributesResp)) if err != nil { return xerrors.Wrap(err, "failed to execute sdk request 'clb.ModifyDomainAttributes'") } - d.logger.Logt("已修改七层监听器转发规则的域名级别属性", modifyDomainAttributesResp.Response) - return nil } @@ -252,15 +255,13 @@ func (d *DeployerProvider) modifyListenerCertificate(ctx context.Context, cloudL describeListenersReq.LoadBalancerId = common.StringPtr(cloudLoadbalancerId) describeListenersReq.ListenerIds = common.StringPtrs([]string{cloudListenerId}) describeListenersResp, err := d.sdkClients.clb.DescribeListeners(describeListenersReq) + d.logger.Debug("sdk request 'clb.DescribeListeners'", slog.Any("request", describeListenersReq), slog.Any("response", describeListenersResp)) if err != nil { return xerrors.Wrap(err, "failed to execute sdk request 'clb.DescribeListeners'") - } - if len(describeListenersResp.Response.Listeners) == 0 { + } else if len(describeListenersResp.Response.Listeners) == 0 { return errors.New("listener not found") } - d.logger.Logt("已查询到监听器属性", describeListenersResp.Response) - // 修改监听器属性 // REF: https://cloud.tencent.com/document/product/214/30681 modifyListenerReq := tcClb.NewModifyListenerRequest() @@ -274,12 +275,11 @@ func (d *DeployerProvider) modifyListenerCertificate(ctx context.Context, cloudL modifyListenerReq.Certificate.SSLMode = common.StringPtr("UNIDIRECTIONAL") } modifyListenerResp, err := d.sdkClients.clb.ModifyListener(modifyListenerReq) + d.logger.Debug("sdk request 'clb.ModifyListener'", slog.Any("request", modifyListenerReq), slog.Any("response", modifyListenerResp)) if err != nil { return xerrors.Wrap(err, "failed to execute sdk request 'clb.ModifyListener'") } - d.logger.Logt("已修改监听器属性", modifyListenerResp.Response) - return nil } diff --git a/internal/pkg/core/deployer/providers/tencentcloud-cos/tencentcloud_cos.go b/internal/pkg/core/deployer/providers/tencentcloud-cos/tencentcloud_cos.go index becceab6..6bfa5976 100644 --- a/internal/pkg/core/deployer/providers/tencentcloud-cos/tencentcloud_cos.go +++ b/internal/pkg/core/deployer/providers/tencentcloud-cos/tencentcloud_cos.go @@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + "log/slog" xerrors "github.com/pkg/errors" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" @@ -11,7 +12,6 @@ import ( tcSsl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/logger" "github.com/usual2970/certimate/internal/pkg/core/uploader" uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/tencentcloud-ssl" ) @@ -31,7 +31,7 @@ type DeployerConfig struct { type DeployerProvider struct { config *DeployerConfig - logger logger.Logger + logger *slog.Logger sdkClient *tcSsl.Client sslUploader uploader.Uploader } @@ -58,14 +58,19 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { return &DeployerProvider{ config: config, - logger: logger.NewNilLogger(), + logger: slog.Default(), sdkClient: client, sslUploader: uploader, }, nil } -func (d *DeployerProvider) WithLogger(logger logger.Logger) *DeployerProvider { - d.logger = logger +func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { + if logger == nil { + d.logger = slog.Default() + } else { + d.logger = logger + } + d.sslUploader.WithLogger(logger) return d } @@ -81,10 +86,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe upres, err := d.sslUploader.Upload(ctx, certPem, privkeyPem) if err != nil { return nil, xerrors.Wrap(err, "failed to upload certificate file") + } else { + d.logger.Info("ssl certificate uploaded", slog.Any("result", upres)) } - d.logger.Logt("certificate file uploaded", upres) - // 证书部署到 COS 实例 // REF: https://cloud.tencent.com/document/product/400/91667 deployCertificateInstanceReq := tcSsl.NewDeployCertificateInstanceRequest() @@ -93,12 +98,11 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe deployCertificateInstanceReq.Status = common.Int64Ptr(1) deployCertificateInstanceReq.InstanceIdList = common.StringPtrs([]string{fmt.Sprintf("%s#%s#%s", d.config.Region, d.config.Bucket, d.config.Domain)}) deployCertificateInstanceResp, err := d.sdkClient.DeployCertificateInstance(deployCertificateInstanceReq) + d.logger.Debug("sdk request 'ssl.DeployCertificateInstance'", slog.Any("request", deployCertificateInstanceReq), slog.Any("response", deployCertificateInstanceResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'ssl.DeployCertificateInstance'") } - d.logger.Logt("已部署证书到云资源实例", deployCertificateInstanceResp.Response) - return &deployer.DeployResult{}, nil } diff --git a/internal/pkg/core/deployer/providers/tencentcloud-css/tencentcloud_css.go b/internal/pkg/core/deployer/providers/tencentcloud-css/tencentcloud_css.go index ad5dbed5..66c6d57d 100644 --- a/internal/pkg/core/deployer/providers/tencentcloud-css/tencentcloud_css.go +++ b/internal/pkg/core/deployer/providers/tencentcloud-css/tencentcloud_css.go @@ -2,6 +2,7 @@ import ( "context" + "log/slog" xerrors "github.com/pkg/errors" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" @@ -9,7 +10,6 @@ import ( tcLive "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/live/v20180801" "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/logger" "github.com/usual2970/certimate/internal/pkg/core/uploader" uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/tencentcloud-ssl" ) @@ -25,7 +25,7 @@ type DeployerConfig struct { type DeployerProvider struct { config *DeployerConfig - logger logger.Logger + logger *slog.Logger sdkClient *tcLive.Client sslUploader uploader.Uploader } @@ -52,14 +52,19 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { return &DeployerProvider{ config: config, - logger: logger.NewNilLogger(), + logger: slog.Default(), sdkClient: client, sslUploader: uploader, }, nil } -func (d *DeployerProvider) WithLogger(logger logger.Logger) *DeployerProvider { - d.logger = logger +func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { + if logger == nil { + d.logger = slog.Default() + } else { + d.logger = logger + } + d.sslUploader.WithLogger(logger) return d } @@ -68,10 +73,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe upres, err := d.sslUploader.Upload(ctx, certPem, privkeyPem) if err != nil { return nil, xerrors.Wrap(err, "failed to upload certificate file") + } else { + d.logger.Info("ssl certificate uploaded", slog.Any("result", upres)) } - d.logger.Logt("certificate file uploaded", upres) - // 绑定证书对应的播放域名 // REF: https://cloud.tencent.com/document/product/267/78655 modifyLiveDomainCertBindingsReq := &tcLive.ModifyLiveDomainCertBindingsRequest{ @@ -84,12 +89,11 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe CloudCertId: common.StringPtr(upres.CertId), } modifyLiveDomainCertBindingsResp, err := d.sdkClient.ModifyLiveDomainCertBindings(modifyLiveDomainCertBindingsReq) + d.logger.Debug("sdk request 'live.ModifyLiveDomainCertBindings'", slog.Any("request", modifyLiveDomainCertBindingsReq), slog.Any("response", modifyLiveDomainCertBindingsResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'live.ModifyLiveDomainCertBindings'") } - d.logger.Logt("已部署证书到云资源实例", modifyLiveDomainCertBindingsResp.Response) - return &deployer.DeployResult{}, nil } diff --git a/internal/pkg/core/deployer/providers/tencentcloud-ecdn/tencentcloud_ecdn.go b/internal/pkg/core/deployer/providers/tencentcloud-ecdn/tencentcloud_ecdn.go index e9438898..3cfe70ff 100644 --- a/internal/pkg/core/deployer/providers/tencentcloud-ecdn/tencentcloud_ecdn.go +++ b/internal/pkg/core/deployer/providers/tencentcloud-ecdn/tencentcloud_ecdn.go @@ -2,6 +2,7 @@ import ( "context" + "log/slog" "strings" xerrors "github.com/pkg/errors" @@ -11,7 +12,6 @@ import ( tcSsl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/logger" "github.com/usual2970/certimate/internal/pkg/core/uploader" uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/tencentcloud-ssl" ) @@ -27,7 +27,7 @@ type DeployerConfig struct { type DeployerProvider struct { config *DeployerConfig - logger logger.Logger + logger *slog.Logger sdkClients *wSdkClients sslUploader uploader.Uploader } @@ -59,14 +59,19 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { return &DeployerProvider{ config: config, - logger: logger.NewNilLogger(), + logger: slog.Default(), sdkClients: clients, sslUploader: uploader, }, nil } -func (d *DeployerProvider) WithLogger(logger logger.Logger) *DeployerProvider { - d.logger = logger +func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { + if logger == nil { + d.logger = slog.Default() + } else { + d.logger = logger + } + d.sslUploader.WithLogger(logger) return d } @@ -75,10 +80,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe upres, err := d.sslUploader.Upload(ctx, certPem, privkeyPem) if err != nil { return nil, xerrors.Wrap(err, "failed to upload certificate file") + } else { + d.logger.Info("ssl certificate uploaded", slog.Any("result", upres)) } - d.logger.Logt("certificate file uploaded", upres) - // 获取待部署的 CDN 实例 // 如果是泛域名,根据证书匹配 CDN 实例 instanceIds := make([]string, 0) @@ -94,8 +99,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe } if len(instanceIds) == 0 { - d.logger.Logt("已部署过或没有要部署的 ECDN 实例") + d.logger.Info("no ecdn instances to deploy") } else { + d.logger.Info("found ecdn instances to deploy", slog.Any("instanceIds", instanceIds)) + // 证书部署到 ECDN 实例 // REF: https://cloud.tencent.com/document/product/400/91667 deployCertificateInstanceReq := tcSsl.NewDeployCertificateInstanceRequest() @@ -104,11 +111,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe deployCertificateInstanceReq.Status = common.Int64Ptr(1) deployCertificateInstanceReq.InstanceIdList = common.StringPtrs(instanceIds) deployCertificateInstanceResp, err := d.sdkClients.ssl.DeployCertificateInstance(deployCertificateInstanceReq) + d.logger.Debug("sdk request 'ssl.DeployCertificateInstance'", slog.Any("request", deployCertificateInstanceReq), slog.Any("response", deployCertificateInstanceResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'ssl.DeployCertificateInstance'") } - - d.logger.Logt("已部署证书到云资源实例", deployCertificateInstanceResp.Response) } return &deployer.DeployResult{}, nil @@ -121,6 +127,7 @@ func (d *DeployerProvider) getDomainsByCertificateId(cloudCertId string) ([]stri describeCertDomainsReq.CertId = common.StringPtr(cloudCertId) describeCertDomainsReq.Product = common.StringPtr("ecdn") describeCertDomainsResp, err := d.sdkClients.cdn.DescribeCertDomains(describeCertDomainsReq) + d.logger.Debug("sdk request 'cdn.DescribeCertDomains'", slog.Any("request", describeCertDomainsReq), slog.Any("response", describeCertDomainsResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'cdn.DescribeCertDomains'") } diff --git a/internal/pkg/core/deployer/providers/tencentcloud-eo/tencentcloud_eo.go b/internal/pkg/core/deployer/providers/tencentcloud-eo/tencentcloud_eo.go index 99669038..d28c7f5a 100644 --- a/internal/pkg/core/deployer/providers/tencentcloud-eo/tencentcloud_eo.go +++ b/internal/pkg/core/deployer/providers/tencentcloud-eo/tencentcloud_eo.go @@ -3,6 +3,7 @@ import ( "context" "errors" + "log/slog" xerrors "github.com/pkg/errors" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" @@ -11,7 +12,6 @@ import ( tcTeo "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/teo/v20220901" "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/logger" "github.com/usual2970/certimate/internal/pkg/core/uploader" uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/tencentcloud-ssl" ) @@ -29,7 +29,7 @@ type DeployerConfig struct { type DeployerProvider struct { config *DeployerConfig - logger logger.Logger + logger *slog.Logger sdkClients *wSdkClients sslUploader uploader.Uploader } @@ -61,14 +61,19 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { return &DeployerProvider{ config: config, - logger: logger.NewNilLogger(), + logger: slog.Default(), sdkClients: clients, sslUploader: uploader, }, nil } -func (d *DeployerProvider) WithLogger(logger logger.Logger) *DeployerProvider { - d.logger = logger +func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { + if logger == nil { + d.logger = slog.Default() + } else { + d.logger = logger + } + d.sslUploader.WithLogger(logger) return d } @@ -81,10 +86,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe upres, err := d.sslUploader.Upload(ctx, certPem, privkeyPem) if err != nil { return nil, xerrors.Wrap(err, "failed to upload certificate file") + } else { + d.logger.Info("ssl certificate uploaded", slog.Any("result", upres)) } - d.logger.Logt("certificate file uploaded", upres) - // 配置域名证书 // REF: https://cloud.tencent.com/document/product/1552/80764 modifyHostsCertificateReq := tcTeo.NewModifyHostsCertificateRequest() @@ -93,12 +98,11 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe modifyHostsCertificateReq.Hosts = common.StringPtrs([]string{d.config.Domain}) modifyHostsCertificateReq.ServerCertInfo = []*tcTeo.ServerCertInfo{{CertId: common.StringPtr(upres.CertId)}} modifyHostsCertificateResp, err := d.sdkClients.teo.ModifyHostsCertificate(modifyHostsCertificateReq) + d.logger.Debug("sdk request 'teo.ModifyHostsCertificate'", slog.Any("request", modifyHostsCertificateReq), slog.Any("response", modifyHostsCertificateResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'teo.ModifyHostsCertificate'") } - d.logger.Logt("已配置域名证书", modifyHostsCertificateResp.Response) - return &deployer.DeployResult{}, nil } diff --git a/internal/pkg/core/deployer/providers/tencentcloud-scf/tencentcloud_scf.go b/internal/pkg/core/deployer/providers/tencentcloud-scf/tencentcloud_scf.go index 3a3aeb82..f136fa53 100644 --- a/internal/pkg/core/deployer/providers/tencentcloud-scf/tencentcloud_scf.go +++ b/internal/pkg/core/deployer/providers/tencentcloud-scf/tencentcloud_scf.go @@ -2,6 +2,7 @@ import ( "context" + "log/slog" xerrors "github.com/pkg/errors" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" @@ -9,7 +10,6 @@ import ( tcScf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/scf/v20180416" "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/logger" "github.com/usual2970/certimate/internal/pkg/core/uploader" uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/tencentcloud-ssl" ) @@ -27,7 +27,7 @@ type DeployerConfig struct { type DeployerProvider struct { config *DeployerConfig - logger logger.Logger + logger *slog.Logger sdkClient *tcScf.Client sslUploader uploader.Uploader } @@ -54,14 +54,19 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { return &DeployerProvider{ config: config, - logger: logger.NewNilLogger(), + logger: slog.Default(), sdkClient: client, sslUploader: uploader, }, nil } -func (d *DeployerProvider) WithLogger(logger logger.Logger) *DeployerProvider { - d.logger = logger +func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { + if logger == nil { + d.logger = slog.Default() + } else { + d.logger = logger + } + d.sslUploader.WithLogger(logger) return d } @@ -71,10 +76,9 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe getCustomDomainReq := tcScf.NewGetCustomDomainRequest() getCustomDomainReq.Domain = common.StringPtr(d.config.Domain) getCustomDomainResp, err := d.sdkClient.GetCustomDomain(getCustomDomainReq) + d.logger.Debug("sdk request 'scf.GetCustomDomain'", slog.Any("request", getCustomDomainReq), slog.Any("response", getCustomDomainResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'scf.GetCustomDomain'") - } else { - d.logger.Logt("已查看云函数自定义域名详情", getCustomDomainResp.Response) } // 上传证书到 SSL @@ -82,7 +86,7 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe if err != nil { return nil, xerrors.Wrap(err, "failed to upload certificate file") } else { - d.logger.Logt("certificate file uploaded", upres) + d.logger.Info("ssl certificate uploaded", slog.Any("result", upres)) } // 更新云函数自定义域名 @@ -94,10 +98,9 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe } updateCustomDomainReq.Protocol = getCustomDomainResp.Response.Protocol updateCustomDomainResp, err := d.sdkClient.UpdateCustomDomain(updateCustomDomainReq) + d.logger.Debug("sdk request 'scf.UpdateCustomDomain'", slog.Any("request", updateCustomDomainReq), slog.Any("response", updateCustomDomainResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'scf.UpdateCustomDomain'") - } else { - d.logger.Logt("已设置点播域名 HTTPS 证书", updateCustomDomainResp.Response) } return &deployer.DeployResult{}, nil diff --git a/internal/pkg/core/deployer/providers/tencentcloud-ssl-deploy/tencentcloud_ssl_deploy.go b/internal/pkg/core/deployer/providers/tencentcloud-ssl-deploy/tencentcloud_ssl_deploy.go index f943ad6e..acebc43e 100644 --- a/internal/pkg/core/deployer/providers/tencentcloud-ssl-deploy/tencentcloud_ssl_deploy.go +++ b/internal/pkg/core/deployer/providers/tencentcloud-ssl-deploy/tencentcloud_ssl_deploy.go @@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + "log/slog" "time" xerrors "github.com/pkg/errors" @@ -12,7 +13,6 @@ import ( tcSsl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/logger" "github.com/usual2970/certimate/internal/pkg/core/uploader" uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/tencentcloud-ssl" ) @@ -32,7 +32,7 @@ type DeployerConfig struct { type DeployerProvider struct { config *DeployerConfig - logger logger.Logger + logger *slog.Logger sdkClient *tcSsl.Client sslUploader uploader.Uploader } @@ -59,14 +59,19 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { return &DeployerProvider{ config: config, - logger: logger.NewNilLogger(), + logger: slog.Default(), sdkClient: client, sslUploader: uploader, }, nil } -func (d *DeployerProvider) WithLogger(logger logger.Logger) *DeployerProvider { - d.logger = logger +func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { + if logger == nil { + d.logger = slog.Default() + } else { + d.logger = logger + } + d.sslUploader.WithLogger(logger) return d } @@ -82,10 +87,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe upres, err := d.sslUploader.Upload(ctx, certPem, privkeyPem) if err != nil { return nil, xerrors.Wrap(err, "failed to upload certificate file") + } else { + d.logger.Info("ssl certificate uploaded", slog.Any("result", upres)) } - d.logger.Logt("certificate file uploaded", upres) - // 证书部署到云资源实例列表 // REF: https://cloud.tencent.com/document/product/400/91667 deployCertificateInstanceReq := tcSsl.NewDeployCertificateInstanceRequest() @@ -94,14 +99,13 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe deployCertificateInstanceReq.InstanceIdList = common.StringPtrs(d.config.ResourceIds) deployCertificateInstanceReq.Status = common.Int64Ptr(1) deployCertificateInstanceResp, err := d.sdkClient.DeployCertificateInstance(deployCertificateInstanceReq) + d.logger.Debug("sdk request 'ssl.DeployCertificateInstance'", slog.Any("request", deployCertificateInstanceReq), slog.Any("response", deployCertificateInstanceResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'ssl.DeployCertificateInstance'") } else if deployCertificateInstanceResp.Response == nil || deployCertificateInstanceResp.Response.DeployRecordId == nil { return nil, errors.New("failed to create deploy record") } - d.logger.Logt("已部署证书到云资源实例", deployCertificateInstanceResp.Response) - // 循环获取部署任务详情,等待任务状态变更 // REF: https://cloud.tencent.com.cn/document/api/400/91658 for { @@ -113,12 +117,13 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe describeHostDeployRecordDetailReq.DeployRecordId = common.StringPtr(fmt.Sprintf("%d", *deployCertificateInstanceResp.Response.DeployRecordId)) describeHostDeployRecordDetailReq.Limit = common.Uint64Ptr(100) describeHostDeployRecordDetailResp, err := d.sdkClient.DescribeHostDeployRecordDetail(describeHostDeployRecordDetailReq) + d.logger.Debug("sdk request 'ssl.DescribeHostDeployRecordDetail'", slog.Any("request", describeHostDeployRecordDetailReq), slog.Any("response", describeHostDeployRecordDetailResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'ssl.DescribeHostDeployRecordDetail'") } if describeHostDeployRecordDetailResp.Response.TotalCount == nil { - return nil, errors.New("部署任务状态异常") + return nil, errors.New("unexpected deployment job status") } else { acc := int64(0) if describeHostDeployRecordDetailResp.Response.SuccessTotalCount != nil { @@ -129,12 +134,11 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe } if acc == *describeHostDeployRecordDetailResp.Response.TotalCount { - d.logger.Logt("已获取部署任务详情", describeHostDeployRecordDetailResp) break } } - d.logger.Logt("部署任务未完成 ...") + d.logger.Info("waiting for deployment job completion ...") time.Sleep(time.Second * 5) } diff --git a/internal/pkg/core/deployer/providers/tencentcloud-vod/tencentcloud_vod.go b/internal/pkg/core/deployer/providers/tencentcloud-vod/tencentcloud_vod.go index 77177469..92469390 100644 --- a/internal/pkg/core/deployer/providers/tencentcloud-vod/tencentcloud_vod.go +++ b/internal/pkg/core/deployer/providers/tencentcloud-vod/tencentcloud_vod.go @@ -2,6 +2,7 @@ import ( "context" + "log/slog" xerrors "github.com/pkg/errors" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" @@ -9,7 +10,6 @@ import ( tcVod "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vod/v20180717" "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/logger" "github.com/usual2970/certimate/internal/pkg/core/uploader" uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/tencentcloud-ssl" ) @@ -27,7 +27,7 @@ type DeployerConfig struct { type DeployerProvider struct { config *DeployerConfig - logger logger.Logger + logger *slog.Logger sdkClient *tcVod.Client sslUploader uploader.Uploader } @@ -54,14 +54,19 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { return &DeployerProvider{ config: config, - logger: logger.NewNilLogger(), + logger: slog.Default(), sdkClient: client, sslUploader: uploader, }, nil } -func (d *DeployerProvider) WithLogger(logger logger.Logger) *DeployerProvider { - d.logger = logger +func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { + if logger == nil { + d.logger = slog.Default() + } else { + d.logger = logger + } + d.sslUploader.WithLogger(logger) return d } @@ -71,7 +76,7 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe if err != nil { return nil, xerrors.Wrap(err, "failed to upload certificate file") } else { - d.logger.Logt("certificate file uploaded", upres) + d.logger.Info("ssl certificate uploaded", slog.Any("result", upres)) } // 设置点播域名 HTTPS 证书 @@ -84,10 +89,9 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe setVodDomainCertificateReq.SubAppId = common.Uint64Ptr(uint64(d.config.SubAppId)) } setVodDomainCertificateResp, err := d.sdkClient.SetVodDomainCertificate(setVodDomainCertificateReq) + d.logger.Debug("sdk request 'vod.SetVodDomainCertificate'", slog.Any("request", setVodDomainCertificateReq), slog.Any("response", setVodDomainCertificateResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'vod.SetVodDomainCertificate'") - } else { - d.logger.Logt("已设置点播域名 HTTPS 证书", setVodDomainCertificateResp.Response) } return &deployer.DeployResult{}, nil diff --git a/internal/pkg/core/deployer/providers/tencentcloud-waf/tencentcloud_waf.go b/internal/pkg/core/deployer/providers/tencentcloud-waf/tencentcloud_waf.go index c84067ce..400b96b8 100644 --- a/internal/pkg/core/deployer/providers/tencentcloud-waf/tencentcloud_waf.go +++ b/internal/pkg/core/deployer/providers/tencentcloud-waf/tencentcloud_waf.go @@ -3,6 +3,7 @@ import ( "context" "errors" + "log/slog" xerrors "github.com/pkg/errors" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" @@ -10,7 +11,6 @@ import ( tcWaf "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf/v20180125" "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/logger" "github.com/usual2970/certimate/internal/pkg/core/uploader" uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/tencentcloud-ssl" ) @@ -32,7 +32,7 @@ type DeployerConfig struct { type DeployerProvider struct { config *DeployerConfig - logger logger.Logger + logger *slog.Logger sdkClient *tcWaf.Client sslUploader uploader.Uploader } @@ -59,14 +59,19 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { return &DeployerProvider{ config: config, - logger: logger.NewNilLogger(), + logger: slog.Default(), sdkClient: client, sslUploader: uploader, }, nil } -func (d *DeployerProvider) WithLogger(logger logger.Logger) *DeployerProvider { - d.logger = logger +func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { + if logger == nil { + d.logger = slog.Default() + } else { + d.logger = logger + } + d.sslUploader.WithLogger(logger) return d } @@ -86,7 +91,7 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe if err != nil { return nil, xerrors.Wrap(err, "failed to upload certificate file") } else { - d.logger.Logt("certificate file uploaded", upres) + d.logger.Info("ssl certificate uploaded", slog.Any("result", upres)) } // 查询单个 SaaS 型 WAF 域名详情 @@ -96,10 +101,9 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe describeDomainDetailsSaasReq.DomainId = common.StringPtr(d.config.DomainId) describeDomainDetailsSaasReq.InstanceId = common.StringPtr(d.config.InstanceId) describeDomainDetailsSaasResp, err := d.sdkClient.DescribeDomainDetailsSaas(describeDomainDetailsSaasReq) + d.logger.Debug("sdk request 'waf.DescribeDomainDetailsSaas'", slog.Any("request", describeDomainDetailsSaasReq), slog.Any("response", describeDomainDetailsSaasResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'waf.DescribeDomainDetailsSaas'") - } else { - d.logger.Logt("已查询到 SaaS 型 WAF 域名详情", describeDomainDetailsSaasResp.Response) } // 编辑 SaaS 型 WAF 域名 @@ -111,10 +115,9 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe modifySpartaProtectionReq.CertType = common.Int64Ptr(2) modifySpartaProtectionReq.SSLId = common.StringPtr(upres.CertId) modifySpartaProtectionResp, err := d.sdkClient.ModifySpartaProtection(modifySpartaProtectionReq) + d.logger.Debug("sdk request 'waf.ModifySpartaProtection'", slog.Any("request", modifySpartaProtectionReq), slog.Any("response", modifySpartaProtectionResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'waf.ModifySpartaProtection'") - } else { - d.logger.Logt("已编辑 SaaS 型 WAF 域名", modifySpartaProtectionResp.Response) } return &deployer.DeployResult{}, nil diff --git a/internal/pkg/core/deployer/providers/ucloud-ucdn/ucloud_ucdn.go b/internal/pkg/core/deployer/providers/ucloud-ucdn/ucloud_ucdn.go index 8c19621b..117cf9fb 100644 --- a/internal/pkg/core/deployer/providers/ucloud-ucdn/ucloud_ucdn.go +++ b/internal/pkg/core/deployer/providers/ucloud-ucdn/ucloud_ucdn.go @@ -3,6 +3,7 @@ import ( "context" "errors" + "log/slog" "strconv" xerrors "github.com/pkg/errors" @@ -11,7 +12,6 @@ import ( uAuth "github.com/ucloud/ucloud-sdk-go/ucloud/auth" "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/logger" "github.com/usual2970/certimate/internal/pkg/core/uploader" uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/ucloud-ussl" ) @@ -29,7 +29,7 @@ type DeployerConfig struct { type DeployerProvider struct { config *DeployerConfig - logger logger.Logger + logger *slog.Logger sdkClient *uCdn.UCDNClient sslUploader uploader.Uploader } @@ -57,14 +57,19 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { return &DeployerProvider{ config: config, - logger: logger.NewNilLogger(), + logger: slog.Default(), sdkClient: client, sslUploader: uploader, }, nil } -func (d *DeployerProvider) WithLogger(logger logger.Logger) *DeployerProvider { - d.logger = logger +func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { + if logger == nil { + d.logger = slog.Default() + } else { + d.logger = logger + } + d.sslUploader.WithLogger(logger) return d } @@ -73,10 +78,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe upres, err := d.sslUploader.Upload(ctx, certPem, privkeyPem) if err != nil { return nil, xerrors.Wrap(err, "failed to upload certificate file") + } else { + d.logger.Info("ssl certificate uploaded", slog.Any("result", upres)) } - d.logger.Logt("certificate file uploaded", upres) - // 获取加速域名配置 // REF: https://docs.ucloud.cn/api/ucdn-api/get_ucdn_domain_config getUcdnDomainConfigReq := d.sdkClient.NewGetUcdnDomainConfigRequest() @@ -85,14 +90,13 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe getUcdnDomainConfigReq.ProjectId = usdk.String(d.config.ProjectId) } getUcdnDomainConfigResp, err := d.sdkClient.GetUcdnDomainConfig(getUcdnDomainConfigReq) + d.logger.Debug("sdk request 'ucdn.GetUcdnDomainConfig'", slog.Any("request", getUcdnDomainConfigReq), slog.Any("response", getUcdnDomainConfigResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'ucdn.GetUcdnDomainConfig'") } else if len(getUcdnDomainConfigResp.DomainList) == 0 { return nil, errors.New("no domain found") } - d.logger.Logt("已查询到加速域名配置", getUcdnDomainConfigResp) - // 更新 HTTPS 加速配置 // REF: https://docs.ucloud.cn/api/ucdn-api/update_ucdn_domain_https_config_v2 certId, _ := strconv.Atoi(upres.CertId) @@ -108,12 +112,11 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe updateUcdnDomainHttpsConfigV2Req.ProjectId = usdk.String(d.config.ProjectId) } updateUcdnDomainHttpsConfigV2Resp, err := d.sdkClient.UpdateUcdnDomainHttpsConfigV2(updateUcdnDomainHttpsConfigV2Req) + d.logger.Debug("sdk request 'ucdn.UpdateUcdnDomainHttpsConfigV2'", slog.Any("request", updateUcdnDomainHttpsConfigV2Req), slog.Any("response", updateUcdnDomainHttpsConfigV2Resp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'ucdn.UpdateUcdnDomainHttpsConfigV2'") } - d.logger.Logt("已更新 HTTPS 加速配置", updateUcdnDomainHttpsConfigV2Resp) - return &deployer.DeployResult{}, nil } diff --git a/internal/pkg/core/deployer/providers/ucloud-us3/ucloud_us3.go b/internal/pkg/core/deployer/providers/ucloud-us3/ucloud_us3.go index 592a1cf6..2d043a5d 100644 --- a/internal/pkg/core/deployer/providers/ucloud-us3/ucloud_us3.go +++ b/internal/pkg/core/deployer/providers/ucloud-us3/ucloud_us3.go @@ -2,13 +2,13 @@ import ( "context" + "log/slog" xerrors "github.com/pkg/errors" usdk "github.com/ucloud/ucloud-sdk-go/ucloud" uAuth "github.com/ucloud/ucloud-sdk-go/ucloud/auth" "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/logger" "github.com/usual2970/certimate/internal/pkg/core/uploader" uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/ucloud-ussl" usdkFile "github.com/usual2970/certimate/internal/pkg/vendors/ucloud-sdk/ufile" @@ -31,7 +31,7 @@ type DeployerConfig struct { type DeployerProvider struct { config *DeployerConfig - logger logger.Logger + logger *slog.Logger sdkClient *usdkFile.UFileClient sslUploader uploader.Uploader } @@ -59,14 +59,19 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { return &DeployerProvider{ config: config, - logger: logger.NewNilLogger(), + logger: slog.Default(), sdkClient: client, sslUploader: uploader, }, nil } -func (d *DeployerProvider) WithLogger(logger logger.Logger) *DeployerProvider { - d.logger = logger +func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { + if logger == nil { + d.logger = slog.Default() + } else { + d.logger = logger + } + d.sslUploader.WithLogger(logger) return d } @@ -75,10 +80,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe upres, err := d.sslUploader.Upload(ctx, certPem, privkeyPem) if err != nil { return nil, xerrors.Wrap(err, "failed to upload certificate file") + } else { + d.logger.Info("ssl certificate uploaded", slog.Any("result", upres)) } - d.logger.Logt("certificate file uploaded", upres) - // 添加 SSL 证书 // REF: https://docs.ucloud.cn/api/ufile-api/add_ufile_ssl_cert addUFileSSLCertReq := d.sdkClient.NewAddUFileSSLCertRequest() @@ -90,12 +95,11 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe addUFileSSLCertReq.ProjectId = usdk.String(d.config.ProjectId) } addUFileSSLCertResp, err := d.sdkClient.AddUFileSSLCert(addUFileSSLCertReq) + d.logger.Debug("sdk request 'us3.AddUFileSSLCert'", slog.Any("request", addUFileSSLCertReq), slog.Any("response", addUFileSSLCertResp)) if err != nil { - return nil, xerrors.Wrap(err, "failed to execute sdk request 'ucdn.AddUFileSSLCert'") + return nil, xerrors.Wrap(err, "failed to execute sdk request 'us3.AddUFileSSLCert'") } - d.logger.Logt("添加 SSL 证书", addUFileSSLCertResp) - return &deployer.DeployResult{}, nil } diff --git a/internal/pkg/core/deployer/providers/volcengine-cdn/volcengine_cdn.go b/internal/pkg/core/deployer/providers/volcengine-cdn/volcengine_cdn.go index 229c3c01..88f05415 100644 --- a/internal/pkg/core/deployer/providers/volcengine-cdn/volcengine_cdn.go +++ b/internal/pkg/core/deployer/providers/volcengine-cdn/volcengine_cdn.go @@ -3,14 +3,13 @@ import ( "context" "errors" - "fmt" + "log/slog" "strings" xerrors "github.com/pkg/errors" veCdn "github.com/volcengine/volc-sdk-golang/service/cdn" "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/logger" "github.com/usual2970/certimate/internal/pkg/core/uploader" uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/volcengine-cdn" ) @@ -26,7 +25,7 @@ type DeployerConfig struct { type DeployerProvider struct { config *DeployerConfig - logger logger.Logger + logger *slog.Logger sdkClient *veCdn.CDN sslUploader uploader.Uploader } @@ -52,14 +51,19 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { return &DeployerProvider{ config: config, - logger: logger.NewNilLogger(), + logger: slog.Default(), sdkClient: client, sslUploader: uploader, }, nil } -func (d *DeployerProvider) WithLogger(logger logger.Logger) *DeployerProvider { - d.logger = logger +func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { + if logger == nil { + d.logger = slog.Default() + } else { + d.logger = logger + } + d.sslUploader.WithLogger(logger) return d } @@ -68,10 +72,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe upres, err := d.sslUploader.Upload(ctx, certPem, privkeyPem) if err != nil { return nil, xerrors.Wrap(err, "failed to upload certificate file") + } else { + d.logger.Info("ssl certificate uploaded", slog.Any("result", upres)) } - d.logger.Logt("certificate file uploaded", upres) - domains := make([]string, 0) if strings.HasPrefix(d.config.Domain, "*.") { // 获取指定证书可关联的域名 @@ -80,6 +84,7 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe CertId: upres.CertId, } describeCertConfigResp, err := d.sdkClient.DescribeCertConfig(describeCertConfigReq) + d.logger.Debug("sdk request 'cdn.DescribeCertConfig'", slog.Any("request", describeCertConfigReq), slog.Any("response", describeCertConfigResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'cdn.DescribeCertConfig'") } @@ -99,6 +104,7 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe if len(domains) == 0 { if len(describeCertConfigResp.Result.SpecifiedCertConfig) > 0 { // 所有可关联的域名都配置了该证书,跳过部署 + d.logger.Info("no domains to deploy") } else { return nil, errors.New("domain not found") } @@ -118,10 +124,9 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe Domain: domain, } batchDeployCertResp, err := d.sdkClient.BatchDeployCert(batchDeployCertReq) + d.logger.Debug("sdk request 'cdn.BatchDeployCert'", slog.Any("request", batchDeployCertReq), slog.Any("response", batchDeployCertResp)) if err != nil { errs = append(errs, err) - } else { - d.logger.Logt(fmt.Sprintf("已关联证书到域名 %s", domain), batchDeployCertResp) } } diff --git a/internal/pkg/core/deployer/providers/volcengine-clb/volcengine_clb.go b/internal/pkg/core/deployer/providers/volcengine-clb/volcengine_clb.go index 2b248adc..b3ba7241 100644 --- a/internal/pkg/core/deployer/providers/volcengine-clb/volcengine_clb.go +++ b/internal/pkg/core/deployer/providers/volcengine-clb/volcengine_clb.go @@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + "log/slog" xerrors "github.com/pkg/errors" veClb "github.com/volcengine/volcengine-go-sdk/service/clb" @@ -11,7 +12,6 @@ import ( veSession "github.com/volcengine/volcengine-go-sdk/volcengine/session" "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/logger" "github.com/usual2970/certimate/internal/pkg/core/uploader" uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/volcengine-certcenter" ) @@ -32,7 +32,7 @@ type DeployerConfig struct { type DeployerProvider struct { config *DeployerConfig - logger logger.Logger + logger *slog.Logger sdkClient *veClb.CLB sslUploader uploader.Uploader } @@ -60,14 +60,19 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { return &DeployerProvider{ config: config, - logger: logger.NewNilLogger(), + logger: slog.Default(), sdkClient: client, sslUploader: uploader, }, nil } -func (d *DeployerProvider) WithLogger(logger logger.Logger) *DeployerProvider { - d.logger = logger +func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { + if logger == nil { + d.logger = slog.Default() + } else { + d.logger = logger + } + d.sslUploader.WithLogger(logger) return d } @@ -76,10 +81,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe upres, err := d.sslUploader.Upload(ctx, certPem, privkeyPem) if err != nil { return nil, xerrors.Wrap(err, "failed to upload certificate file") + } else { + d.logger.Info("ssl certificate uploaded", slog.Any("result", upres)) } - d.logger.Logt("certificate file uploaded", upres) - // 根据部署资源类型决定部署方式 switch d.config.ResourceType { case RESOURCE_TYPE_LISTENER: @@ -107,10 +112,9 @@ func (d *DeployerProvider) deployToListener(ctx context.Context, cloudCertId str CertCenterCertificateId: ve.String(cloudCertId), } modifyListenerAttributesResp, err := d.sdkClient.ModifyListenerAttributes(modifyListenerAttributesReq) + d.logger.Debug("sdk request 'clb.ModifyListenerAttributes'", slog.Any("request", modifyListenerAttributesReq), slog.Any("response", modifyListenerAttributesResp)) if err != nil { return xerrors.Wrap(err, "failed to execute sdk request 'clb.ModifyListenerAttributes'") - } else { - d.logger.Logt("已修改监听器", modifyListenerAttributesResp) } return nil diff --git a/internal/pkg/core/deployer/providers/volcengine-dcdn/volcengine_dcdn.go b/internal/pkg/core/deployer/providers/volcengine-dcdn/volcengine_dcdn.go index 835eae4b..0b9de8a7 100644 --- a/internal/pkg/core/deployer/providers/volcengine-dcdn/volcengine_dcdn.go +++ b/internal/pkg/core/deployer/providers/volcengine-dcdn/volcengine_dcdn.go @@ -2,6 +2,7 @@ import ( "context" + "log/slog" "strings" xerrors "github.com/pkg/errors" @@ -10,7 +11,6 @@ import ( veSession "github.com/volcengine/volcengine-go-sdk/volcengine/session" "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/logger" "github.com/usual2970/certimate/internal/pkg/core/uploader" uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/volcengine-certcenter" ) @@ -28,7 +28,7 @@ type DeployerConfig struct { type DeployerProvider struct { config *DeployerConfig - logger logger.Logger + logger *slog.Logger sdkClient *veDcdn.DCDN sslUploader uploader.Uploader } @@ -56,14 +56,19 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { return &DeployerProvider{ config: config, - logger: logger.NewNilLogger(), + logger: slog.Default(), sdkClient: client, sslUploader: uploader, }, nil } -func (d *DeployerProvider) WithLogger(logger logger.Logger) *DeployerProvider { - d.logger = logger +func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { + if logger == nil { + d.logger = slog.Default() + } else { + d.logger = logger + } + d.sslUploader.WithLogger(logger) return d } @@ -72,10 +77,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe upres, err := d.sslUploader.Upload(ctx, certPem, privkeyPem) if err != nil { return nil, xerrors.Wrap(err, "failed to upload certificate file") + } else { + d.logger.Info("ssl certificate uploaded", slog.Any("result", upres)) } - d.logger.Logt("certificate file uploaded", upres) - // "*.example.com" → ".example.com",适配火山引擎 DCDN 要求的泛域名格式 domain := strings.TrimPrefix(d.config.Domain, "*") @@ -87,10 +92,9 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe DomainNames: ve.StringSlice([]string{domain}), } createCertBindResp, err := d.sdkClient.CreateCertBind(createCertBindReq) + d.logger.Debug("sdk request 'dcdn.CreateCertBind'", slog.Any("request", createCertBindReq), slog.Any("response", createCertBindResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'dcdn.CreateCertBind'") - } else { - d.logger.Logt("已绑定证书", createCertBindResp) } return &deployer.DeployResult{}, nil diff --git a/internal/pkg/core/deployer/providers/volcengine-imagex/volcengine_imagex.go b/internal/pkg/core/deployer/providers/volcengine-imagex/volcengine_imagex.go index 1bd6d109..f3ac68bf 100644 --- a/internal/pkg/core/deployer/providers/volcengine-imagex/volcengine_imagex.go +++ b/internal/pkg/core/deployer/providers/volcengine-imagex/volcengine_imagex.go @@ -3,13 +3,13 @@ import ( "context" "errors" + "log/slog" xerrors "github.com/pkg/errors" veBase "github.com/volcengine/volc-sdk-golang/base" veImageX "github.com/volcengine/volc-sdk-golang/service/imagex/v2" "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/logger" "github.com/usual2970/certimate/internal/pkg/core/uploader" uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/volcengine-certcenter" ) @@ -29,7 +29,7 @@ type DeployerConfig struct { type DeployerProvider struct { config *DeployerConfig - logger logger.Logger + logger *slog.Logger sdkClient *veImageX.Imagex sslUploader uploader.Uploader } @@ -57,14 +57,19 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { return &DeployerProvider{ config: config, - logger: logger.NewNilLogger(), + logger: slog.Default(), sdkClient: client, sslUploader: uploader, }, nil } -func (d *DeployerProvider) WithLogger(logger logger.Logger) *DeployerProvider { - d.logger = logger +func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { + if logger == nil { + d.logger = slog.Default() + } else { + d.logger = logger + } + d.sslUploader.WithLogger(logger) return d } @@ -81,7 +86,7 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe if err != nil { return nil, xerrors.Wrap(err, "failed to upload certificate file") } else { - d.logger.Logt("certificate file uploaded", upres) + d.logger.Info("ssl certificate uploaded", slog.Any("result", upres)) } // 获取域名配置 @@ -91,10 +96,9 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe DomainName: d.config.Domain, } getDomainConfigResp, err := d.sdkClient.GetDomainConfig(context.TODO(), getDomainConfigReq) + d.logger.Debug("sdk request 'imagex.GetDomainConfig'", slog.Any("request", getDomainConfigReq), slog.Any("response", getDomainConfigResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'imagex.GetDomainConfig'") - } else { - d.logger.Logt("已获取域名配置", getDomainConfigResp) } // 更新 HTTPS 配置 @@ -121,10 +125,9 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe updateHttpsReq.UpdateHTTPSBody.HTTPS.ForceRedirectCode = getDomainConfigResp.Result.HTTPSConfig.ForceRedirectCode } updateHttpsResp, err := d.sdkClient.UpdateHTTPS(context.TODO(), updateHttpsReq) + d.logger.Debug("sdk request 'imagex.UpdateHttps'", slog.Any("request", updateHttpsReq), slog.Any("response", updateHttpsResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'imagex.UpdateHttps'") - } else { - d.logger.Logt("已更新 HTTPS 配置", updateHttpsResp) } return &deployer.DeployResult{}, nil diff --git a/internal/pkg/core/deployer/providers/volcengine-live/volcengine_live.go b/internal/pkg/core/deployer/providers/volcengine-live/volcengine_live.go index 240e5c9c..15073743 100644 --- a/internal/pkg/core/deployer/providers/volcengine-live/volcengine_live.go +++ b/internal/pkg/core/deployer/providers/volcengine-live/volcengine_live.go @@ -3,7 +3,7 @@ import ( "context" "errors" - "fmt" + "log/slog" "strings" xerrors "github.com/pkg/errors" @@ -11,7 +11,6 @@ import ( ve "github.com/volcengine/volcengine-go-sdk/volcengine" "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/logger" "github.com/usual2970/certimate/internal/pkg/core/uploader" uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/volcengine-live" ) @@ -27,7 +26,7 @@ type DeployerConfig struct { type DeployerProvider struct { config *DeployerConfig - logger logger.Logger + logger *slog.Logger sdkClient *veLive.Live sslUploader uploader.Uploader } @@ -53,14 +52,19 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { return &DeployerProvider{ config: config, - logger: logger.NewNilLogger(), + logger: slog.Default(), sdkClient: client, sslUploader: uploader, }, nil } -func (d *DeployerProvider) WithLogger(logger logger.Logger) *DeployerProvider { - d.logger = logger +func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { + if logger == nil { + d.logger = slog.Default() + } else { + d.logger = logger + } + d.sslUploader.WithLogger(logger) return d } @@ -69,10 +73,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe upres, err := d.sslUploader.Upload(ctx, certPem, privkeyPem) if err != nil { return nil, xerrors.Wrap(err, "failed to upload certificate file") + } else { + d.logger.Info("ssl certificate uploaded", slog.Any("result", upres)) } - d.logger.Logt("certificate file uploaded", upres) - domains := make([]string, 0) if strings.HasPrefix(d.config.Domain, "*.") { listDomainDetailPageNum := int32(1) @@ -86,6 +90,7 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe PageSize: listDomainDetailPageSize, } listDomainDetailResp, err := d.sdkClient.ListDomainDetail(ctx, listDomainDetailReq) + d.logger.Debug("sdk request 'live.ListDomainDetail'", slog.Any("request", listDomainDetailReq), slog.Any("response", listDomainDetailResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'live.ListDomainDetail'") } @@ -110,7 +115,7 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe } if len(domains) == 0 { - return nil, xerrors.Errorf("未查询到匹配的域名: %s", d.config.Domain) + return nil, errors.New("domain not found") } } else { domains = append(domains, d.config.Domain) @@ -128,10 +133,9 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe HTTPS: ve.Bool(true), } bindCertResp, err := d.sdkClient.BindCert(ctx, bindCertReq) + d.logger.Debug("sdk request 'live.BindCert'", slog.Any("request", bindCertReq), slog.Any("response", bindCertResp)) if err != nil { errs = append(errs, err) - } else { - d.logger.Logt(fmt.Sprintf("已绑定证书到域名 %s", domain), bindCertResp) } } diff --git a/internal/pkg/core/deployer/providers/volcengine-tos/volcengine_tos.go b/internal/pkg/core/deployer/providers/volcengine-tos/volcengine_tos.go index 142a8b9f..d4bd6e59 100644 --- a/internal/pkg/core/deployer/providers/volcengine-tos/volcengine_tos.go +++ b/internal/pkg/core/deployer/providers/volcengine-tos/volcengine_tos.go @@ -4,12 +4,12 @@ import ( "context" "errors" "fmt" + "log/slog" xerrors "github.com/pkg/errors" veTos "github.com/volcengine/ve-tos-golang-sdk/v2/tos" "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/logger" "github.com/usual2970/certimate/internal/pkg/core/uploader" uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/volcengine-certcenter" ) @@ -29,7 +29,7 @@ type DeployerConfig struct { type DeployerProvider struct { config *DeployerConfig - logger logger.Logger + logger *slog.Logger sdkClient *veTos.ClientV2 sslUploader uploader.Uploader } @@ -57,14 +57,19 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { return &DeployerProvider{ config: config, - logger: logger.NewNilLogger(), + logger: slog.Default(), sdkClient: client, sslUploader: uploader, }, nil } -func (d *DeployerProvider) WithLogger(logger logger.Logger) *DeployerProvider { - d.logger = logger +func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { + if logger == nil { + d.logger = slog.Default() + } else { + d.logger = logger + } + d.sslUploader.WithLogger(logger) return d } @@ -80,10 +85,10 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe upres, err := d.sslUploader.Upload(ctx, certPem, privkeyPem) if err != nil { return nil, xerrors.Wrap(err, "failed to upload certificate file") + } else { + d.logger.Info("ssl certificate uploaded", slog.Any("result", upres)) } - d.logger.Logt("certificate file uploaded", upres) - // 设置自定义域名 // REF: https://www.volcengine.com/docs/6559/1250189 putBucketCustomDomainReq := &veTos.PutBucketCustomDomainInput{ @@ -94,10 +99,9 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe }, } putBucketCustomDomainResp, err := d.sdkClient.PutBucketCustomDomain(context.TODO(), putBucketCustomDomainReq) + d.logger.Debug("sdk request 'tos.PutBucketCustomDomain'", slog.Any("request", putBucketCustomDomainReq), slog.Any("response", putBucketCustomDomainResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'tos.PutBucketCustomDomain'") - } else { - d.logger.Logt("已设置自定义域名", putBucketCustomDomainResp) } return &deployer.DeployResult{}, nil diff --git a/internal/pkg/core/deployer/providers/webhook/webhook.go b/internal/pkg/core/deployer/providers/webhook/webhook.go index 6a1e8a21..3cfd85ca 100644 --- a/internal/pkg/core/deployer/providers/webhook/webhook.go +++ b/internal/pkg/core/deployer/providers/webhook/webhook.go @@ -4,6 +4,7 @@ import ( "context" "crypto/tls" "encoding/json" + "log/slog" "strings" "time" @@ -11,7 +12,6 @@ import ( xerrors "github.com/pkg/errors" "github.com/usual2970/certimate/internal/pkg/core/deployer" - "github.com/usual2970/certimate/internal/pkg/core/logger" "github.com/usual2970/certimate/internal/pkg/utils/certs" ) @@ -26,7 +26,7 @@ type DeployerConfig struct { type DeployerProvider struct { config *DeployerConfig - logger logger.Logger + logger *slog.Logger httpClient *resty.Client } @@ -47,13 +47,17 @@ func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { return &DeployerProvider{ config: config, - logger: logger.NewNilLogger(), + logger: slog.Default(), httpClient: client, }, nil } -func (d *DeployerProvider) WithLogger(logger logger.Logger) *DeployerProvider { - d.logger = logger +func (d *DeployerProvider) WithLogger(logger *slog.Logger) deployer.Deployer { + if logger == nil { + d.logger = slog.Default() + } else { + d.logger = logger + } return d } @@ -86,18 +90,18 @@ func (d *DeployerProvider) Deploy(ctx context.Context, certPem string, privkeyPe return nil, xerrors.Errorf("unexpected webhook response status code: %d", resp.StatusCode()) } - d.logger.Logt("Webhook request sent", resp.String()) + d.logger.Debug("webhook responded", slog.Any("response", resp.String())) return &deployer.DeployResult{}, nil } func replaceJsonValueRecursively(data interface{}, oldStr, newStr string) interface{} { switch v := data.(type) { - case map[string]interface{}: + case map[string]any: for k, val := range v { v[k] = replaceJsonValueRecursively(val, oldStr, newStr) } - case []interface{}: + case []any: for i, val := range v { v[i] = replaceJsonValueRecursively(val, oldStr, newStr) } diff --git a/internal/pkg/core/logger/builtin.go b/internal/pkg/core/logger/builtin.go deleted file mode 100644 index fa8932dc..00000000 --- a/internal/pkg/core/logger/builtin.go +++ /dev/null @@ -1,94 +0,0 @@ -package logger - -import ( - "encoding/json" - "fmt" - "reflect" - "strings" - - "github.com/usual2970/certimate/internal/pkg/utils/types" -) - -// 表示默认的日志记录器类型。 -type DefaultLogger struct { - records []string -} - -var _ Logger = (*DefaultLogger)(nil) - -func (l *DefaultLogger) Logt(tag string, data ...any) { - l.ensureInitialized() - - temp := make([]string, len(data)+1) - temp[0] = tag - for i, v := range data { - s := "" - if types.IsNil(v) { - s = "" - } else { - switch reflect.ValueOf(v).Kind() { - case reflect.String: - s = v.(string) - case reflect.Bool, - reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, - reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, - reflect.Float32, reflect.Float64: - s = fmt.Sprintf("%v", v) - default: - jbytes, _ := json.Marshal(v) - s = string(jbytes) - } - } - - temp[i+1] = s - } - - l.records = append(l.records, strings.Join(temp, ": ")) -} - -func (l *DefaultLogger) Logf(format string, args ...any) { - l.ensureInitialized() - - l.records = append(l.records, fmt.Sprintf(format, args...)) -} - -func (l *DefaultLogger) GetRecords() []string { - l.ensureInitialized() - - temp := make([]string, len(l.records)) - copy(temp, l.records) - return temp -} - -func (l *DefaultLogger) FlushRecords() { - l.records = make([]string, 0) -} - -func (l *DefaultLogger) ensureInitialized() { - if l.records == nil { - l.records = make([]string, 0) - } -} - -func NewDefaultLogger() *DefaultLogger { - return &DefaultLogger{ - records: make([]string, 0), - } -} - -// 表示空的日志记录器类型。 -// 该日志记录器不会执行任何操作。 -type NilLogger struct{} - -var _ Logger = (*NilLogger)(nil) - -func (l *NilLogger) Logt(string, ...any) {} -func (l *NilLogger) Logf(string, ...any) {} -func (l *NilLogger) GetRecords() []string { - return make([]string, 0) -} -func (l *NilLogger) FlushRecords() {} - -func NewNilLogger() *NilLogger { - return &NilLogger{} -} diff --git a/internal/pkg/core/logger/logger.go b/internal/pkg/core/logger/logger.go deleted file mode 100644 index cc6284cd..00000000 --- a/internal/pkg/core/logger/logger.go +++ /dev/null @@ -1,27 +0,0 @@ -package logger - -// 表示定义日志记录器的抽象类型接口。 -type Logger interface { - // 追加一条日志记录。 - // 该方法会将 `data` 以 JSON 序列化后拼接到 `tag` 结尾。 - // - // 入参: - // - tag:标签。 - // - data:数据。 - Logt(tag string, data ...any) - - // 追加一条日志记录。 - // 该方法会将 `args` 以 `format` 格式化。 - // - // 入参: - // - format:格式化字符串。 - // - args:格式化参数。 - Logf(format string, args ...any) - - // 获取所有日志记录。 - // TODO: 记录时间 - GetRecords() []string - - // 清空所有日志记录。 - FlushRecords() -} diff --git a/internal/pkg/core/logger/logger_test.go b/internal/pkg/core/logger/logger_test.go deleted file mode 100644 index e131a7b1..00000000 --- a/internal/pkg/core/logger/logger_test.go +++ /dev/null @@ -1,56 +0,0 @@ -package logger_test - -import ( - "testing" - - "github.com/usual2970/certimate/internal/pkg/core/logger" -) - -/* -Shell command to run this test: - - go test -v ./logger_test.go -*/ -func TestLogger(t *testing.T) { - t.Run("Logger_Appendt", func(t *testing.T) { - logger := logger.NewDefaultLogger() - - logger.Logt("test") - logger.Logt("test_nil", nil) - logger.Logt("test_int", 1024) - logger.Logt("test_string", "certimate") - logger.Logt("test_map", map[string]interface{}{"key": "value"}) - logger.Logt("test_struct", struct{ Name string }{Name: "certimate"}) - logger.Logt("test_slice", []string{"certimate"}) - t.Log(logger.GetRecords()) - if len(logger.GetRecords()) != 7 { - t.Errorf("expected 7 records, got %d", len(logger.GetRecords())) - } - - logger.FlushRecords() - if len(logger.GetRecords()) != 0 { - t.Errorf("expected 0 records, got %d", len(logger.GetRecords())) - } - }) - - t.Run("Logger_Appendf", func(t *testing.T) { - logger := logger.NewDefaultLogger() - - logger.Logf("test") - logger.Logf("test_nil: %v", nil) - logger.Logf("test_int: %v", 1024) - logger.Logf("test_string: %v", "certimate") - logger.Logf("test_map: %v", map[string]interface{}{"key": "value"}) - logger.Logf("test_struct: %v", struct{ Name string }{Name: "certimate"}) - logger.Logf("test_slice: %v", []string{"certimate"}) - t.Log(logger.GetRecords()) - if len(logger.GetRecords()) != 7 { - t.Errorf("expected 7 records, got %d", len(logger.GetRecords())) - } - - logger.FlushRecords() - if len(logger.GetRecords()) != 0 { - t.Errorf("expected 0 records, got %d", len(logger.GetRecords())) - } - }) -} diff --git a/internal/pkg/core/notifier/notifier.go b/internal/pkg/core/notifier/notifier.go index 22fc8574..97485215 100644 --- a/internal/pkg/core/notifier/notifier.go +++ b/internal/pkg/core/notifier/notifier.go @@ -1,9 +1,14 @@ package notifier -import "context" +import ( + "context" + "log/slog" +) // 表示定义消息通知器的抽象类型接口。 type Notifier interface { + WithLogger(logger *slog.Logger) Notifier + // 发送通知。 // // 入参: diff --git a/internal/pkg/core/notifier/providers/bark/bark.go b/internal/pkg/core/notifier/providers/bark/bark.go index f9589096..a6833ae1 100644 --- a/internal/pkg/core/notifier/providers/bark/bark.go +++ b/internal/pkg/core/notifier/providers/bark/bark.go @@ -2,6 +2,7 @@ import ( "context" + "log/slog" "github.com/nikoksr/notify" "github.com/nikoksr/notify/service/bark" @@ -19,6 +20,7 @@ type NotifierConfig struct { type NotifierProvider struct { config *NotifierConfig + logger *slog.Logger } var _ notifier.Notifier = (*NotifierProvider)(nil) @@ -33,6 +35,15 @@ func NewNotifier(config *NotifierConfig) (*NotifierProvider, error) { }, nil } +func (n *NotifierProvider) WithLogger(logger *slog.Logger) notifier.Notifier { + if logger == nil { + n.logger = slog.Default() + } else { + n.logger = logger + } + return n +} + func (n *NotifierProvider) Notify(ctx context.Context, subject string, message string) (res *notifier.NotifyResult, err error) { var srv notify.Notifier if n.config.ServerUrl == "" { diff --git a/internal/pkg/core/notifier/providers/dingtalk/dingtalk.go b/internal/pkg/core/notifier/providers/dingtalk/dingtalk.go index f8eba8a7..f0ab4741 100644 --- a/internal/pkg/core/notifier/providers/dingtalk/dingtalk.go +++ b/internal/pkg/core/notifier/providers/dingtalk/dingtalk.go @@ -2,6 +2,7 @@ import ( "context" + "log/slog" "github.com/nikoksr/notify/service/dingding" @@ -17,6 +18,7 @@ type NotifierConfig struct { type NotifierProvider struct { config *NotifierConfig + logger *slog.Logger } var _ notifier.Notifier = (*NotifierProvider)(nil) @@ -31,6 +33,15 @@ func NewNotifier(config *NotifierConfig) (*NotifierProvider, error) { }, nil } +func (n *NotifierProvider) WithLogger(logger *slog.Logger) notifier.Notifier { + if logger == nil { + n.logger = slog.Default() + } else { + n.logger = logger + } + return n +} + func (n *NotifierProvider) Notify(ctx context.Context, subject string, message string) (res *notifier.NotifyResult, err error) { srv := dingding.New(&dingding.Config{ Token: n.config.AccessToken, diff --git a/internal/pkg/core/notifier/providers/email/email.go b/internal/pkg/core/notifier/providers/email/email.go index 4a69d50a..ebf2d150 100644 --- a/internal/pkg/core/notifier/providers/email/email.go +++ b/internal/pkg/core/notifier/providers/email/email.go @@ -4,6 +4,7 @@ import ( "context" "crypto/tls" "fmt" + "log/slog" "net/smtp" "github.com/domodwyer/mailyak/v3" @@ -31,6 +32,7 @@ type NotifierConfig struct { type NotifierProvider struct { config *NotifierConfig + logger *slog.Logger } var _ notifier.Notifier = (*NotifierProvider)(nil) @@ -45,6 +47,15 @@ func NewNotifier(config *NotifierConfig) (*NotifierProvider, error) { }, nil } +func (n *NotifierProvider) WithLogger(logger *slog.Logger) notifier.Notifier { + if logger == nil { + n.logger = slog.Default() + } else { + n.logger = logger + } + return n +} + func (n *NotifierProvider) Notify(ctx context.Context, subject string, message string) (res *notifier.NotifyResult, err error) { var smtpAuth smtp.Auth if n.config.Username != "" || n.config.Password != "" { diff --git a/internal/pkg/core/notifier/providers/lark/lark.go b/internal/pkg/core/notifier/providers/lark/lark.go index 9c92691a..150f4e04 100644 --- a/internal/pkg/core/notifier/providers/lark/lark.go +++ b/internal/pkg/core/notifier/providers/lark/lark.go @@ -2,6 +2,7 @@ import ( "context" + "log/slog" "github.com/nikoksr/notify/service/lark" @@ -15,6 +16,7 @@ type NotifierConfig struct { type NotifierProvider struct { config *NotifierConfig + logger *slog.Logger } var _ notifier.Notifier = (*NotifierProvider)(nil) @@ -29,6 +31,15 @@ func NewNotifier(config *NotifierConfig) (*NotifierProvider, error) { }, nil } +func (n *NotifierProvider) WithLogger(logger *slog.Logger) notifier.Notifier { + if logger == nil { + n.logger = slog.Default() + } else { + n.logger = logger + } + return n +} + func (n *NotifierProvider) Notify(ctx context.Context, subject string, message string) (res *notifier.NotifyResult, err error) { srv := lark.NewWebhookService(n.config.WebhookUrl) diff --git a/internal/pkg/core/notifier/providers/serverchan/serverchan.go b/internal/pkg/core/notifier/providers/serverchan/serverchan.go index 51df0893..ac4d9fe6 100644 --- a/internal/pkg/core/notifier/providers/serverchan/serverchan.go +++ b/internal/pkg/core/notifier/providers/serverchan/serverchan.go @@ -2,6 +2,7 @@ import ( "context" + "log/slog" "net/http" notifyHttp "github.com/nikoksr/notify/service/http" @@ -16,6 +17,7 @@ type NotifierConfig struct { type NotifierProvider struct { config *NotifierConfig + logger *slog.Logger } var _ notifier.Notifier = (*NotifierProvider)(nil) @@ -30,6 +32,15 @@ func NewNotifier(config *NotifierConfig) (*NotifierProvider, error) { }, nil } +func (n *NotifierProvider) WithLogger(logger *slog.Logger) notifier.Notifier { + if logger == nil { + n.logger = slog.Default() + } else { + n.logger = logger + } + return n +} + func (n *NotifierProvider) Notify(ctx context.Context, subject string, message string) (res *notifier.NotifyResult, err error) { srv := notifyHttp.New() diff --git a/internal/pkg/core/notifier/providers/telegram/telegram.go b/internal/pkg/core/notifier/providers/telegram/telegram.go index 6a1889b3..c3a2e973 100644 --- a/internal/pkg/core/notifier/providers/telegram/telegram.go +++ b/internal/pkg/core/notifier/providers/telegram/telegram.go @@ -2,6 +2,7 @@ import ( "context" + "log/slog" "github.com/nikoksr/notify/service/telegram" @@ -17,6 +18,7 @@ type NotifierConfig struct { type NotifierProvider struct { config *NotifierConfig + logger *slog.Logger } var _ notifier.Notifier = (*NotifierProvider)(nil) @@ -31,6 +33,15 @@ func NewNotifier(config *NotifierConfig) (*NotifierProvider, error) { }, nil } +func (n *NotifierProvider) WithLogger(logger *slog.Logger) notifier.Notifier { + if logger == nil { + n.logger = slog.Default() + } else { + n.logger = logger + } + return n +} + func (n *NotifierProvider) Notify(ctx context.Context, subject string, message string) (res *notifier.NotifyResult, err error) { srv, err := telegram.New(n.config.ApiToken) if err != nil { diff --git a/internal/pkg/core/notifier/providers/webhook/webhook.go b/internal/pkg/core/notifier/providers/webhook/webhook.go index f753645a..e11e5487 100644 --- a/internal/pkg/core/notifier/providers/webhook/webhook.go +++ b/internal/pkg/core/notifier/providers/webhook/webhook.go @@ -3,6 +3,7 @@ import ( "context" "crypto/tls" + "log/slog" "net/http" webhook "github.com/nikoksr/notify/service/http" @@ -19,6 +20,7 @@ type NotifierConfig struct { type NotifierProvider struct { config *NotifierConfig + logger *slog.Logger } var _ notifier.Notifier = (*NotifierProvider)(nil) @@ -33,6 +35,15 @@ func NewNotifier(config *NotifierConfig) (*NotifierProvider, error) { }, nil } +func (n *NotifierProvider) WithLogger(logger *slog.Logger) notifier.Notifier { + if logger == nil { + n.logger = slog.Default() + } else { + n.logger = logger + } + return n +} + func (n *NotifierProvider) Notify(ctx context.Context, subject string, message string) (res *notifier.NotifyResult, err error) { srv := webhook.New() srv.AddReceiversURLs(n.config.Url) diff --git a/internal/pkg/core/notifier/providers/wecom/wecom.go b/internal/pkg/core/notifier/providers/wecom/wecom.go index 63342cb5..ef76e97f 100644 --- a/internal/pkg/core/notifier/providers/wecom/wecom.go +++ b/internal/pkg/core/notifier/providers/wecom/wecom.go @@ -2,6 +2,7 @@ import ( "context" + "log/slog" "net/http" notifyHttp "github.com/nikoksr/notify/service/http" @@ -16,6 +17,7 @@ type NotifierConfig struct { type NotifierProvider struct { config *NotifierConfig + logger *slog.Logger } var _ notifier.Notifier = (*NotifierProvider)(nil) @@ -30,6 +32,15 @@ func NewNotifier(config *NotifierConfig) (*NotifierProvider, error) { }, nil } +func (n *NotifierProvider) WithLogger(logger *slog.Logger) notifier.Notifier { + if logger == nil { + n.logger = slog.Default() + } else { + n.logger = logger + } + return n +} + func (n *NotifierProvider) Notify(ctx context.Context, subject string, message string) (res *notifier.NotifyResult, err error) { srv := notifyHttp.New() diff --git a/internal/pkg/core/uploader/providers/1panel-ssl/1panel_ssl.go b/internal/pkg/core/uploader/providers/1panel-ssl/1panel_ssl.go index bb612bec..ee00c06a 100644 --- a/internal/pkg/core/uploader/providers/1panel-ssl/1panel_ssl.go +++ b/internal/pkg/core/uploader/providers/1panel-ssl/1panel_ssl.go @@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + "log/slog" "net/url" "strings" "time" @@ -23,6 +24,7 @@ type UploaderConfig struct { type UploaderProvider struct { config *UploaderConfig + logger *slog.Logger sdkClient *opsdk.Client } @@ -40,15 +42,26 @@ func NewUploader(config *UploaderConfig) (*UploaderProvider, error) { return &UploaderProvider{ config: config, + logger: slog.Default(), sdkClient: client, }, nil } +func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader { + if logger == nil { + u.logger = slog.Default() + } else { + u.logger = logger + } + return u +} + func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPem string) (res *uploader.UploadResult, err error) { // 遍历证书列表,避免重复上传 if res, err := u.getExistCert(ctx, certPem, privkeyPem); err != nil { return nil, err } else if res != nil { + u.logger.Info("ssl certificate already exists") return res, nil } @@ -63,6 +76,7 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe PrivateKey: privkeyPem, } uploadWebsiteSSLResp, err := u.sdkClient.UploadWebsiteSSL(uploadWebsiteSSLReq) + u.logger.Debug("sdk request '1panel.UploadWebsiteSSL'", slog.Any("request", uploadWebsiteSSLReq), slog.Any("response", uploadWebsiteSSLResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request '1panel.UploadWebsiteSSL'") } @@ -86,6 +100,7 @@ func (u *UploaderProvider) getExistCert(ctx context.Context, certPem string, pri PageSize: searchWebsiteSSLPageSize, } searchWebsiteSSLResp, err := u.sdkClient.SearchWebsiteSSL(searchWebsiteSSLReq) + u.logger.Debug("sdk request '1panel.SearchWebsiteSSL'", slog.Any("request", searchWebsiteSSLReq), slog.Any("response", searchWebsiteSSLResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request '1panel.SearchWebsiteSSL'") } @@ -93,7 +108,7 @@ func (u *UploaderProvider) getExistCert(ctx context.Context, certPem string, pri for _, sslItem := range searchWebsiteSSLResp.Data.Items { if strings.TrimSpace(sslItem.PEM) == strings.TrimSpace(certPem) && strings.TrimSpace(sslItem.PrivateKey) == strings.TrimSpace(privkeyPem) { - // 如果已存在相同证书,直接返回已有的证书信息 + // 如果已存在相同证书,直接返回 return &uploader.UploadResult{ CertId: fmt.Sprintf("%d", sslItem.ID), CertName: sslItem.Description, diff --git a/internal/pkg/core/uploader/providers/aliyun-cas/aliyun_cas.go b/internal/pkg/core/uploader/providers/aliyun-cas/aliyun_cas.go index 2b582409..ed53f214 100644 --- a/internal/pkg/core/uploader/providers/aliyun-cas/aliyun_cas.go +++ b/internal/pkg/core/uploader/providers/aliyun-cas/aliyun_cas.go @@ -3,11 +3,12 @@ import ( "context" "fmt" + "log/slog" "strings" "time" - aliyunCas "github.com/alibabacloud-go/cas-20200407/v3/client" - aliyunOpen "github.com/alibabacloud-go/darabonba-openapi/v2/client" + alicas "github.com/alibabacloud-go/cas-20200407/v3/client" + aliopen "github.com/alibabacloud-go/darabonba-openapi/v2/client" "github.com/alibabacloud-go/tea/tea" xerrors "github.com/pkg/errors" @@ -26,7 +27,8 @@ type UploaderConfig struct { type UploaderProvider struct { config *UploaderConfig - sdkClient *aliyunCas.Client + logger *slog.Logger + sdkClient *alicas.Client } var _ uploader.Uploader = (*UploaderProvider)(nil) @@ -36,21 +38,27 @@ func NewUploader(config *UploaderConfig) (*UploaderProvider, error) { panic("config is nil") } - client, err := createSdkClient( - config.AccessKeyId, - config.AccessKeySecret, - config.Region, - ) + client, err := createSdkClient(config.AccessKeyId, config.AccessKeySecret, config.Region) if err != nil { return nil, xerrors.Wrap(err, "failed to create sdk client") } return &UploaderProvider{ config: config, + logger: slog.Default(), sdkClient: client, }, nil } +func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader { + if logger == nil { + u.logger = slog.Default() + } else { + u.logger = logger + } + return u +} + func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPem string) (res *uploader.UploadResult, err error) { // 解析证书内容 certX509, err := certs.ParseCertificateFromPEM(certPem) @@ -64,12 +72,13 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe listUserCertificateOrderPage := int64(1) listUserCertificateOrderLimit := int64(50) for { - listUserCertificateOrderReq := &aliyunCas.ListUserCertificateOrderRequest{ + listUserCertificateOrderReq := &alicas.ListUserCertificateOrderRequest{ CurrentPage: tea.Int64(listUserCertificateOrderPage), ShowSize: tea.Int64(listUserCertificateOrderLimit), OrderType: tea.String("CERT"), } listUserCertificateOrderResp, err := u.sdkClient.ListUserCertificateOrder(listUserCertificateOrderReq) + u.logger.Debug("sdk request 'cas.ListUserCertificateOrder'", slog.Any("request", listUserCertificateOrderReq), slog.Any("response", listUserCertificateOrderResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'cas.ListUserCertificateOrder'") } @@ -77,10 +86,11 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe if listUserCertificateOrderResp.Body.CertificateOrderList != nil { for _, certDetail := range listUserCertificateOrderResp.Body.CertificateOrderList { if strings.EqualFold(certX509.SerialNumber.Text(16), *certDetail.SerialNo) { - getUserCertificateDetailReq := &aliyunCas.GetUserCertificateDetailRequest{ + getUserCertificateDetailReq := &alicas.GetUserCertificateDetailRequest{ CertId: certDetail.CertificateId, } getUserCertificateDetailResp, err := u.sdkClient.GetUserCertificateDetail(getUserCertificateDetailReq) + u.logger.Debug("sdk request 'cas.GetUserCertificateDetail'", slog.Any("request", getUserCertificateDetailReq), slog.Any("response", getUserCertificateDetailResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'cas.GetUserCertificateDetail'") } @@ -97,8 +107,9 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe isSameCert = certs.EqualCertificate(certX509, oldCertX509) } - // 如果已存在相同证书,直接返回已有的证书信息 + // 如果已存在相同证书,直接返回 if isSameCert { + u.logger.Info("ssl certificate already exists") return &uploader.UploadResult{ CertId: fmt.Sprintf("%d", tea.Int64Value(certDetail.CertificateId)), CertName: *certDetail.Name, @@ -121,12 +132,13 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe // 上传新证书 // REF: https://help.aliyun.com/zh/ssl-certificate/developer-reference/api-cas-2020-04-07-uploadusercertificate - uploadUserCertificateReq := &aliyunCas.UploadUserCertificateRequest{ + uploadUserCertificateReq := &alicas.UploadUserCertificateRequest{ Name: tea.String(certName), Cert: tea.String(certPem), Key: tea.String(privkeyPem), } uploadUserCertificateResp, err := u.sdkClient.UploadUserCertificate(uploadUserCertificateReq) + u.logger.Debug("sdk request 'cas.UploadUserCertificate'", slog.Any("request", uploadUserCertificateReq), slog.Any("response", uploadUserCertificateResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'cas.UploadUserCertificate'") } @@ -138,7 +150,7 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe }, nil } -func createSdkClient(accessKeyId, accessKeySecret, region string) (*aliyunCas.Client, error) { +func createSdkClient(accessKeyId, accessKeySecret, region string) (*alicas.Client, error) { if region == "" { region = "cn-hangzhou" // CAS 服务默认区域:华东一杭州 } @@ -152,13 +164,13 @@ func createSdkClient(accessKeyId, accessKeySecret, region string) (*aliyunCas.Cl endpoint = fmt.Sprintf("cas.%s.aliyuncs.com", region) } - config := &aliyunOpen.Config{ + config := &aliopen.Config{ Endpoint: tea.String(endpoint), AccessKeyId: tea.String(accessKeyId), AccessKeySecret: tea.String(accessKeySecret), } - client, err := aliyunCas.NewClient(config) + client, err := alicas.NewClient(config) if err != nil { return nil, err } diff --git a/internal/pkg/core/uploader/providers/aliyun-slb/aliyun_slb.go b/internal/pkg/core/uploader/providers/aliyun-slb/aliyun_slb.go index d687822a..4dcdd7ba 100644 --- a/internal/pkg/core/uploader/providers/aliyun-slb/aliyun_slb.go +++ b/internal/pkg/core/uploader/providers/aliyun-slb/aliyun_slb.go @@ -5,12 +5,13 @@ import ( "crypto/sha256" "encoding/hex" "fmt" + "log/slog" "regexp" "strings" "time" - aliyunOpen "github.com/alibabacloud-go/darabonba-openapi/v2/client" - aliyunSlb "github.com/alibabacloud-go/slb-20140515/v4/client" + aliopen "github.com/alibabacloud-go/darabonba-openapi/v2/client" + alislb "github.com/alibabacloud-go/slb-20140515/v4/client" "github.com/alibabacloud-go/tea/tea" xerrors "github.com/pkg/errors" @@ -29,7 +30,8 @@ type UploaderConfig struct { type UploaderProvider struct { config *UploaderConfig - sdkClient *aliyunSlb.Client + logger *slog.Logger + sdkClient *alislb.Client } var _ uploader.Uploader = (*UploaderProvider)(nil) @@ -39,21 +41,27 @@ func NewUploader(config *UploaderConfig) (*UploaderProvider, error) { panic("config is nil") } - client, err := createSdkClient( - config.AccessKeyId, - config.AccessKeySecret, - config.Region, - ) + client, err := createSdkClient(config.AccessKeyId, config.AccessKeySecret, config.Region) if err != nil { return nil, xerrors.Wrap(err, "failed to create sdk client") } return &UploaderProvider{ config: config, + logger: slog.Default(), sdkClient: client, }, nil } +func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader { + if logger == nil { + u.logger = slog.Default() + } else { + u.logger = logger + } + return u +} + func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPem string) (res *uploader.UploadResult, err error) { // 解析证书内容 certX509, err := certs.ParseCertificateFromPEM(certPem) @@ -63,10 +71,11 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe // 查询证书列表,避免重复上传 // REF: https://help.aliyun.com/zh/slb/classic-load-balancer/developer-reference/api-slb-2014-05-15-describeservercertificates - describeServerCertificatesReq := &aliyunSlb.DescribeServerCertificatesRequest{ + describeServerCertificatesReq := &alislb.DescribeServerCertificatesRequest{ RegionId: tea.String(u.config.Region), } describeServerCertificatesResp, err := u.sdkClient.DescribeServerCertificates(describeServerCertificatesReq) + u.logger.Debug("sdk request 'slb.DescribeServerCertificates'", slog.Any("request", describeServerCertificatesReq), slog.Any("response", describeServerCertificatesResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'slb.DescribeServerCertificates'") } @@ -78,8 +87,9 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe isSameCert := *certDetail.IsAliCloudCertificate == 0 && strings.EqualFold(fingerprintHex, strings.ReplaceAll(*certDetail.Fingerprint, ":", "")) && strings.EqualFold(certX509.Subject.CommonName, *certDetail.CommonName) - // 如果已存在相同证书,直接返回已有的证书信息 + // 如果已存在相同证书,直接返回 if isSameCert { + u.logger.Info("ssl certificate already exists") return &uploader.UploadResult{ CertId: *certDetail.ServerCertificateId, CertName: *certDetail.ServerCertificateName, @@ -100,13 +110,14 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe // 上传新证书 // REF: https://help.aliyun.com/zh/slb/classic-load-balancer/developer-reference/api-slb-2014-05-15-uploadservercertificate - uploadServerCertificateReq := &aliyunSlb.UploadServerCertificateRequest{ + uploadServerCertificateReq := &alislb.UploadServerCertificateRequest{ RegionId: tea.String(u.config.Region), ServerCertificateName: tea.String(certName), ServerCertificate: tea.String(certPem), PrivateKey: tea.String(privkeyPem), } uploadServerCertificateResp, err := u.sdkClient.UploadServerCertificate(uploadServerCertificateReq) + u.logger.Debug("sdk request 'slb.UploadServerCertificate'", slog.Any("request", uploadServerCertificateReq), slog.Any("response", uploadServerCertificateResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'slb.UploadServerCertificate'") } @@ -118,7 +129,7 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe }, nil } -func createSdkClient(accessKeyId, accessKeySecret, region string) (*aliyunSlb.Client, error) { +func createSdkClient(accessKeyId, accessKeySecret, region string) (*alislb.Client, error) { // 接入点一览 https://api.aliyun.com/product/Slb var endpoint string switch region { @@ -132,13 +143,13 @@ func createSdkClient(accessKeyId, accessKeySecret, region string) (*aliyunSlb.Cl endpoint = fmt.Sprintf("slb.%s.aliyuncs.com", region) } - config := &aliyunOpen.Config{ + config := &aliopen.Config{ Endpoint: tea.String(endpoint), AccessKeyId: tea.String(accessKeyId), AccessKeySecret: tea.String(accessKeySecret), } - client, err := aliyunSlb.NewClient(config) + client, err := alislb.NewClient(config) if err != nil { return nil, err } diff --git a/internal/pkg/core/uploader/providers/aws-acm/aws_acm.go b/internal/pkg/core/uploader/providers/aws-acm/aws_acm.go index 2f5db477..df7bb9c9 100644 --- a/internal/pkg/core/uploader/providers/aws-acm/aws_acm.go +++ b/internal/pkg/core/uploader/providers/aws-acm/aws_acm.go @@ -2,11 +2,12 @@ import ( "context" + "log/slog" aws "github.com/aws/aws-sdk-go-v2/aws" - awsCfg "github.com/aws/aws-sdk-go-v2/config" - awsCred "github.com/aws/aws-sdk-go-v2/credentials" - awsAcm "github.com/aws/aws-sdk-go-v2/service/acm" + awscfg "github.com/aws/aws-sdk-go-v2/config" + awscred "github.com/aws/aws-sdk-go-v2/credentials" + awsacm "github.com/aws/aws-sdk-go-v2/service/acm" xerrors "github.com/pkg/errors" "golang.org/x/exp/slices" @@ -25,7 +26,8 @@ type UploaderConfig struct { type UploaderProvider struct { config *UploaderConfig - sdkClient *awsAcm.Client + logger *slog.Logger + sdkClient *awsacm.Client } var _ uploader.Uploader = (*UploaderProvider)(nil) @@ -42,10 +44,20 @@ func NewUploader(config *UploaderConfig) (*UploaderProvider, error) { return &UploaderProvider{ config: config, + logger: slog.Default(), sdkClient: client, }, nil } +func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader { + if logger == nil { + u.logger = slog.Default() + } else { + u.logger = logger + } + return u +} + func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPem string) (res *uploader.UploadResult, err error) { // 解析证书内容 certX509, err := certs.ParseCertificateFromPEM(certPem) @@ -62,11 +74,12 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe listCertificatesNextToken := new(string) listCertificatesMaxItems := int32(1000) for { - listCertificatesReq := &awsAcm.ListCertificatesInput{ + listCertificatesReq := &awsacm.ListCertificatesInput{ NextToken: listCertificatesNextToken, MaxItems: aws.Int32(listCertificatesMaxItems), } listCertificatesResp, err := u.sdkClient.ListCertificates(context.TODO(), listCertificatesReq) + u.logger.Debug("sdk request 'acm.ListCertificates'", slog.Any("request", listCertificatesReq), slog.Any("response", listCertificatesResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'acm.ListCertificates'") } @@ -87,7 +100,7 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe // 最后对比证书内容 // REF: https://docs.aws.amazon.com/en_us/acm/latest/APIReference/API_ListTagsForCertificate.html - getCertificateReq := &awsAcm.GetCertificateInput{ + getCertificateReq := &awsacm.GetCertificateInput{ CertificateArn: certSummary.CertificateArn, } getCertificateResp, err := u.sdkClient.GetCertificate(context.TODO(), getCertificateReq) @@ -110,6 +123,7 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe } // 如果以上信息都一致,则视为已存在相同证书,直接返回 + u.logger.Info("ssl certificate already exists") return &uploader.UploadResult{ CertId: *certSummary.CertificateArn, }, nil @@ -124,12 +138,13 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe // 导入证书 // REF: https://docs.aws.amazon.com/en_us/acm/latest/APIReference/API_ImportCertificate.html - importCertificateReq := &awsAcm.ImportCertificateInput{ + importCertificateReq := &awsacm.ImportCertificateInput{ Certificate: ([]byte)(scertPem), CertificateChain: ([]byte)(bcertPem), PrivateKey: ([]byte)(privkeyPem), } importCertificateResp, err := u.sdkClient.ImportCertificate(context.TODO(), importCertificateReq) + u.logger.Debug("sdk request 'acm.ImportCertificate'", slog.Any("request", importCertificateReq), slog.Any("response", importCertificateResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'acm.ImportCertificate'") } @@ -139,15 +154,15 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe }, nil } -func createSdkClient(accessKeyId, secretAccessKey, region string) (*awsAcm.Client, error) { - cfg, err := awsCfg.LoadDefaultConfig(context.TODO()) +func createSdkClient(accessKeyId, secretAccessKey, region string) (*awsacm.Client, error) { + cfg, err := awscfg.LoadDefaultConfig(context.TODO()) if err != nil { return nil, err } - client := awsAcm.NewFromConfig(cfg, func(o *awsAcm.Options) { + client := awsacm.NewFromConfig(cfg, func(o *awsacm.Options) { o.Region = region - o.Credentials = aws.NewCredentialsCache(awsCred.NewStaticCredentialsProvider(accessKeyId, secretAccessKey, "")) + o.Credentials = aws.NewCredentialsCache(awscred.NewStaticCredentialsProvider(accessKeyId, secretAccessKey, "")) }) return client, nil } diff --git a/internal/pkg/core/uploader/providers/azure-keyvault/azure_keyvault.go b/internal/pkg/core/uploader/providers/azure-keyvault/azure_keyvault.go index 16109171..3862325d 100644 --- a/internal/pkg/core/uploader/providers/azure-keyvault/azure_keyvault.go +++ b/internal/pkg/core/uploader/providers/azure-keyvault/azure_keyvault.go @@ -4,6 +4,7 @@ import ( "context" "crypto/x509" "fmt" + "log/slog" "time" "github.com/Azure/azure-sdk-for-go/sdk/azcore" @@ -32,6 +33,7 @@ type UploaderConfig struct { type UploaderProvider struct { config *UploaderConfig + logger *slog.Logger sdkClient *azcertificates.Client } @@ -49,10 +51,20 @@ func NewUploader(config *UploaderConfig) (*UploaderProvider, error) { return &UploaderProvider{ config: config, + logger: slog.Default(), sdkClient: client, }, nil } +func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader { + if logger == nil { + u.logger = slog.Default() + } else { + u.logger = logger + } + return u +} + func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPem string) (res *uploader.UploadResult, err error) { // 解析证书内容 certX509, err := certs.ParseCertificateFromPEM(certPem) @@ -103,6 +115,7 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe // 最后对比证书内容 getCertificateResp, err := u.sdkClient.GetCertificate(context.TODO(), certItem.ID.Name(), certItem.ID.Version(), nil) + u.logger.Debug("sdk request 'keyvault.GetCertificate'", slog.String("request.certificateName", certItem.ID.Name()), slog.String("request.certificateVersion", certItem.ID.Version()), slog.Any("response", getCertificateResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'keyvault.GetCertificate'") } else { @@ -117,6 +130,7 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe } // 如果以上信息都一致,则视为已存在相同证书,直接返回 + u.logger.Info("ssl certificate already exists") return &uploader.UploadResult{ CertId: string(*certItem.ID), CertName: certItem.ID.Name(), @@ -142,6 +156,7 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe }, } importCertificateResp, err := u.sdkClient.ImportCertificate(context.TODO(), certName, importCertificateParams, nil) + u.logger.Debug("sdk request 'keyvault.ImportCertificate'", slog.String("request.certificateName", certName), slog.Any("request.parameters", importCertificateParams), slog.Any("response", importCertificateResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'keyvault.ImportCertificate'") } diff --git a/internal/pkg/core/uploader/providers/byteplus-cdn/byteplus_cdn.go b/internal/pkg/core/uploader/providers/byteplus-cdn/byteplus_cdn.go index 04116e31..463f70b2 100644 --- a/internal/pkg/core/uploader/providers/byteplus-cdn/byteplus_cdn.go +++ b/internal/pkg/core/uploader/providers/byteplus-cdn/byteplus_cdn.go @@ -6,10 +6,11 @@ import ( "crypto/sha256" "encoding/hex" "fmt" + "log/slog" "strings" "time" - bpCdn "github.com/byteplus-sdk/byteplus-sdk-golang/service/cdn" + bytepluscdn "github.com/byteplus-sdk/byteplus-sdk-golang/service/cdn" xerrors "github.com/pkg/errors" "github.com/usual2970/certimate/internal/pkg/core/uploader" @@ -25,7 +26,8 @@ type UploaderConfig struct { type UploaderProvider struct { config *UploaderConfig - sdkClient *bpCdn.CDN + logger *slog.Logger + sdkClient *bytepluscdn.CDN } var _ uploader.Uploader = (*UploaderProvider)(nil) @@ -35,16 +37,26 @@ func NewUploader(config *UploaderConfig) (*UploaderProvider, error) { panic("config is nil") } - client := bpCdn.NewInstance() + client := bytepluscdn.NewInstance() client.Client.SetAccessKey(config.AccessKey) client.Client.SetSecretKey(config.SecretKey) return &UploaderProvider{ config: config, + logger: slog.Default(), sdkClient: client, }, nil } +func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader { + if logger == nil { + u.logger = slog.Default() + } else { + u.logger = logger + } + return u +} + func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPem string) (res *uploader.UploadResult, err error) { // 解析证书内容 certX509, err := certs.ParseCertificateFromPEM(certPem) @@ -57,13 +69,14 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe listCertInfoPageNum := int64(1) listCertInfoPageSize := int64(100) listCertInfoTotal := 0 - listCertInfoReq := &bpCdn.ListCertInfoRequest{ - PageNum: bpCdn.GetInt64Ptr(listCertInfoPageNum), - PageSize: bpCdn.GetInt64Ptr(listCertInfoPageSize), - Source: bpCdn.GetStrPtr("cert_center"), + listCertInfoReq := &bytepluscdn.ListCertInfoRequest{ + PageNum: bytepluscdn.GetInt64Ptr(listCertInfoPageNum), + PageSize: bytepluscdn.GetInt64Ptr(listCertInfoPageSize), + Source: bytepluscdn.GetStrPtr("cert_center"), } for { listCertInfoResp, err := u.sdkClient.ListCertInfo(listCertInfoReq) + u.logger.Debug("sdk request 'cdn.ListCertInfo'", slog.Any("request", listCertInfoReq), slog.Any("response", listCertInfoResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'cdn.ListCertInfo'") } @@ -74,8 +87,9 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe fingerprintSha256 := sha256.Sum256(certX509.Raw) isSameCert := strings.EqualFold(hex.EncodeToString(fingerprintSha1[:]), certDetail.CertFingerprint.Sha1) && strings.EqualFold(hex.EncodeToString(fingerprintSha256[:]), certDetail.CertFingerprint.Sha256) - // 如果已存在相同证书,直接返回已有的证书信息 + // 如果已存在相同证书,直接返回 if isSameCert { + u.logger.Info("ssl certificate already exists") return &uploader.UploadResult{ CertId: certDetail.CertId, CertName: certDetail.Desc, @@ -99,13 +113,14 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe // 上传新证书 // REF: https://docs.byteplus.com/en/docs/byteplus-cdn/reference-addcertificate - addCertificateReq := &bpCdn.AddCertificateRequest{ + addCertificateReq := &bytepluscdn.AddCertificateRequest{ Certificate: certPem, PrivateKey: privkeyPem, - Source: bpCdn.GetStrPtr("cert_center"), - Desc: bpCdn.GetStrPtr(certName), + Source: bytepluscdn.GetStrPtr("cert_center"), + Desc: bytepluscdn.GetStrPtr(certName), } addCertificateResp, err := u.sdkClient.AddCertificate(addCertificateReq) + u.logger.Debug("sdk request 'cdn.AddCertificate'", slog.Any("request", addCertificateReq), slog.Any("response", addCertificateResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'cdn.AddCertificate'") } diff --git a/internal/pkg/core/uploader/providers/dogecloud/dogecloud.go b/internal/pkg/core/uploader/providers/dogecloud/dogecloud.go index 82856b6e..420f93bc 100644 --- a/internal/pkg/core/uploader/providers/dogecloud/dogecloud.go +++ b/internal/pkg/core/uploader/providers/dogecloud/dogecloud.go @@ -3,12 +3,13 @@ import ( "context" "fmt" + "log/slog" "time" xerrors "github.com/pkg/errors" "github.com/usual2970/certimate/internal/pkg/core/uploader" - doge "github.com/usual2970/certimate/internal/pkg/vendors/dogecloud-sdk" + dogesdk "github.com/usual2970/certimate/internal/pkg/vendors/dogecloud-sdk" ) type UploaderConfig struct { @@ -20,7 +21,8 @@ type UploaderConfig struct { type UploaderProvider struct { config *UploaderConfig - sdkClient *doge.Client + logger *slog.Logger + sdkClient *dogesdk.Client } var _ uploader.Uploader = (*UploaderProvider)(nil) @@ -30,20 +32,27 @@ func NewUploader(config *UploaderConfig) (*UploaderProvider, error) { panic("config is nil") } - client, err := createSdkClient( - config.AccessKey, - config.SecretKey, - ) + client, err := createSdkClient(config.AccessKey, config.SecretKey) if err != nil { return nil, xerrors.Wrap(err, "failed to create sdk client") } return &UploaderProvider{ config: config, + logger: slog.Default(), sdkClient: client, }, nil } +func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader { + if logger == nil { + u.logger = slog.Default() + } else { + u.logger = logger + } + return u +} + func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPem string) (res *uploader.UploadResult, err error) { // 生成新证书名(需符合多吉云命名规则) var certId, certName string @@ -52,6 +61,7 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe // 上传新证书 // REF: https://docs.dogecloud.com/cdn/api-cert-upload uploadSslCertResp, err := u.sdkClient.UploadCdnCert(certName, certPem, privkeyPem) + u.logger.Debug("sdk request 'cdn.UploadCdnCert'", slog.Any("response", uploadSslCertResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'cdn.UploadCdnCert'") } @@ -63,7 +73,7 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe }, nil } -func createSdkClient(accessKey, secretKey string) (*doge.Client, error) { - client := doge.NewClient(accessKey, secretKey) +func createSdkClient(accessKey, secretKey string) (*dogesdk.Client, error) { + client := dogesdk.NewClient(accessKey, secretKey) return client, nil } diff --git a/internal/pkg/core/uploader/providers/gcore-cdn/gcore_cdn.go b/internal/pkg/core/uploader/providers/gcore-cdn/gcore_cdn.go index b990c694..7f0a6580 100644 --- a/internal/pkg/core/uploader/providers/gcore-cdn/gcore_cdn.go +++ b/internal/pkg/core/uploader/providers/gcore-cdn/gcore_cdn.go @@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + "log/slog" "time" gprovider "github.com/G-Core/gcorelabscdn-go/gcore/provider" @@ -21,6 +22,7 @@ type UploaderConfig struct { type UploaderProvider struct { config *UploaderConfig + logger *slog.Logger sdkClient *gsslcerts.Service } @@ -38,10 +40,20 @@ func NewUploader(config *UploaderConfig) (*UploaderProvider, error) { return &UploaderProvider{ config: config, + logger: slog.Default(), sdkClient: client, }, nil } +func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader { + if logger == nil { + u.logger = slog.Default() + } else { + u.logger = logger + } + return u +} + func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPem string) (res *uploader.UploadResult, err error) { // 生成新证书名(需符合 Gcore 命名规则) var certId, certName string @@ -57,6 +69,7 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe ValidateRootCA: false, } createCertificateResp, err := u.sdkClient.Create(context.TODO(), createCertificateReq) + u.logger.Debug("sdk request 'sslcerts.Create'", slog.Any("request", createCertificateReq), slog.Any("response", createCertificateResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'sslcerts.Create'") } diff --git a/internal/pkg/core/uploader/providers/huaweicloud-elb/huaweicloud_elb.go b/internal/pkg/core/uploader/providers/huaweicloud-elb/huaweicloud_elb.go index 96a1ff7b..5a902af8 100644 --- a/internal/pkg/core/uploader/providers/huaweicloud-elb/huaweicloud_elb.go +++ b/internal/pkg/core/uploader/providers/huaweicloud-elb/huaweicloud_elb.go @@ -4,16 +4,17 @@ import ( "context" "errors" "fmt" + "log/slog" "time" "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic" "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/global" - hcElb "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/elb/v3" - hcElbModel "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/elb/v3/model" - hcElbRegion "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/elb/v3/region" - hcIam "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/iam/v3" - hcIamModel "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/iam/v3/model" - hcIamRegion "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/iam/v3/region" + hcelb "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/elb/v3" + hcelbmodel "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/elb/v3/model" + hcelbregion "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/elb/v3/region" + hciam "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/iam/v3" + hciammodel "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/iam/v3/model" + hciamregion "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/iam/v3/region" xerrors "github.com/pkg/errors" "github.com/usual2970/certimate/internal/pkg/core/uploader" @@ -32,7 +33,8 @@ type UploaderConfig struct { type UploaderProvider struct { config *UploaderConfig - sdkClient *hcElb.ElbClient + logger *slog.Logger + sdkClient *hcelb.ElbClient } var _ uploader.Uploader = (*UploaderProvider)(nil) @@ -42,21 +44,27 @@ func NewUploader(config *UploaderConfig) (*UploaderProvider, error) { panic("config is nil") } - client, err := createSdkClient( - config.AccessKeyId, - config.SecretAccessKey, - config.Region, - ) + client, err := createSdkClient(config.AccessKeyId, config.SecretAccessKey, config.Region) if err != nil { return nil, xerrors.Wrap(err, "failed to create sdk client") } return &UploaderProvider{ config: config, + logger: slog.Default(), sdkClient: client, }, nil } +func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader { + if logger == nil { + u.logger = slog.Default() + } else { + u.logger = logger + } + return u +} + func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPem string) (res *uploader.UploadResult, err error) { // 解析证书内容 certX509, err := certs.ParseCertificateFromPEM(certPem) @@ -69,12 +77,13 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe listCertificatesLimit := int32(2000) var listCertificatesMarker *string = nil for { - listCertificatesReq := &hcElbModel.ListCertificatesRequest{ + listCertificatesReq := &hcelbmodel.ListCertificatesRequest{ Limit: hwsdk.Int32Ptr(listCertificatesLimit), Marker: listCertificatesMarker, Type: &[]string{"server"}, } listCertificatesResp, err := u.sdkClient.ListCertificates(listCertificatesReq) + u.logger.Debug("sdk request 'elb.ListCertificates'", slog.Any("request", listCertificatesReq), slog.Any("response", listCertificatesResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'elb.ListCertificates'") } @@ -93,8 +102,9 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe isSameCert = certs.EqualCertificate(certX509, oldCertX509) } - // 如果已存在相同证书,直接返回已有的证书信息 + // 如果已存在相同证书,直接返回 if isSameCert { + u.logger.Info("ssl certificate already exists") return &uploader.UploadResult{ CertId: certDetail.Id, CertName: certDetail.Name, @@ -123,9 +133,9 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe // 创建新证书 // REF: https://support.huaweicloud.com/api-elb/CreateCertificate.html - createCertificateReq := &hcElbModel.CreateCertificateRequest{ - Body: &hcElbModel.CreateCertificateRequestBody{ - Certificate: &hcElbModel.CreateCertificateOption{ + createCertificateReq := &hcelbmodel.CreateCertificateRequest{ + Body: &hcelbmodel.CreateCertificateRequestBody{ + Certificate: &hcelbmodel.CreateCertificateOption{ ProjectId: hwsdk.StringPtr(projectId), Name: hwsdk.StringPtr(certName), Certificate: hwsdk.StringPtr(certPem), @@ -134,6 +144,7 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe }, } createCertificateResp, err := u.sdkClient.CreateCertificate(createCertificateReq) + u.logger.Debug("sdk request 'elb.CreateCertificate'", slog.Any("request", createCertificateReq), slog.Any("response", createCertificateResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'elb.CreateCertificate'") } @@ -146,7 +157,7 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe }, nil } -func createSdkClient(accessKeyId, secretAccessKey, region string) (*hcElb.ElbClient, error) { +func createSdkClient(accessKeyId, secretAccessKey, region string) (*hcelb.ElbClient, error) { if region == "" { region = "cn-north-4" // ELB 服务默认区域:华北四北京 } @@ -159,12 +170,12 @@ func createSdkClient(accessKeyId, secretAccessKey, region string) (*hcElb.ElbCli return nil, err } - hcRegion, err := hcElbRegion.SafeValueOf(region) + hcRegion, err := hcelbregion.SafeValueOf(region) if err != nil { return nil, err } - hcClient, err := hcElb.ElbClientBuilder(). + hcClient, err := hcelb.ElbClientBuilder(). WithRegion(hcRegion). WithCredential(auth). SafeBuild() @@ -172,7 +183,7 @@ func createSdkClient(accessKeyId, secretAccessKey, region string) (*hcElb.ElbCli return nil, err } - client := hcElb.NewElbClient(hcClient) + client := hcelb.NewElbClient(hcClient) return client, nil } @@ -189,12 +200,12 @@ func getSdkProjectId(accessKeyId, secretAccessKey, region string) (string, error return "", err } - hcRegion, err := hcIamRegion.SafeValueOf(region) + hcRegion, err := hciamregion.SafeValueOf(region) if err != nil { return "", err } - hcClient, err := hcIam.IamClientBuilder(). + hcClient, err := hciam.IamClientBuilder(). WithRegion(hcRegion). WithCredential(auth). SafeBuild() @@ -202,9 +213,9 @@ func getSdkProjectId(accessKeyId, secretAccessKey, region string) (string, error return "", err } - client := hcIam.NewIamClient(hcClient) + client := hciam.NewIamClient(hcClient) - request := &hcIamModel.KeystoneListProjectsRequest{ + request := &hciammodel.KeystoneListProjectsRequest{ Name: ®ion, } response, err := client.KeystoneListProjects(request) diff --git a/internal/pkg/core/uploader/providers/huaweicloud-scm/huaweicloud_scm.go b/internal/pkg/core/uploader/providers/huaweicloud-scm/huaweicloud_scm.go index 9406c55d..c32e347e 100644 --- a/internal/pkg/core/uploader/providers/huaweicloud-scm/huaweicloud_scm.go +++ b/internal/pkg/core/uploader/providers/huaweicloud-scm/huaweicloud_scm.go @@ -3,12 +3,13 @@ import ( "context" "fmt" + "log/slog" "time" "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic" - hcScm "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/scm/v3" - hcScmModel "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/scm/v3/model" - hcScmRegion "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/scm/v3/region" + hcscm "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/scm/v3" + hcscmmodel "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/scm/v3/model" + hcscmregion "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/scm/v3/region" xerrors "github.com/pkg/errors" "github.com/usual2970/certimate/internal/pkg/core/uploader" @@ -27,7 +28,8 @@ type UploaderConfig struct { type UploaderProvider struct { config *UploaderConfig - sdkClient *hcScm.ScmClient + logger *slog.Logger + sdkClient *hcscm.ScmClient } var _ uploader.Uploader = (*UploaderProvider)(nil) @@ -37,21 +39,27 @@ func NewUploader(config *UploaderConfig) (*UploaderProvider, error) { panic("config is nil") } - client, err := createSdkClient( - config.AccessKeyId, - config.SecretAccessKey, - config.Region, - ) + client, err := createSdkClient(config.AccessKeyId, config.SecretAccessKey, config.Region) if err != nil { return nil, xerrors.Wrap(err, "failed to create sdk client") } return &UploaderProvider{ config: config, + logger: slog.Default(), sdkClient: client, }, nil } +func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader { + if logger == nil { + u.logger = slog.Default() + } else { + u.logger = logger + } + return u +} + func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPem string) (res *uploader.UploadResult, err error) { // 解析证书内容 certX509, err := certs.ParseCertificateFromPEM(certPem) @@ -65,23 +73,25 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe listCertificatesLimit := int32(50) listCertificatesOffset := int32(0) for { - listCertificatesReq := &hcScmModel.ListCertificatesRequest{ + listCertificatesReq := &hcscmmodel.ListCertificatesRequest{ Limit: hwsdk.Int32Ptr(listCertificatesLimit), Offset: hwsdk.Int32Ptr(listCertificatesOffset), SortDir: hwsdk.StringPtr("DESC"), SortKey: hwsdk.StringPtr("certExpiredTime"), } listCertificatesResp, err := u.sdkClient.ListCertificates(listCertificatesReq) + u.logger.Debug("sdk request 'scm.ListCertificates'", slog.Any("request", listCertificatesReq), slog.Any("response", listCertificatesResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'scm.ListCertificates'") } if listCertificatesResp.Certificates != nil { for _, certDetail := range *listCertificatesResp.Certificates { - exportCertificateReq := &hcScmModel.ExportCertificateRequest{ + exportCertificateReq := &hcscmmodel.ExportCertificateRequest{ CertificateId: certDetail.Id, } exportCertificateResp, err := u.sdkClient.ExportCertificate(exportCertificateReq) + u.logger.Debug("sdk request 'scm.ExportCertificate'", slog.Any("request", exportCertificateReq), slog.Any("response", exportCertificateResp)) if err != nil { if exportCertificateResp != nil && exportCertificateResp.HttpStatusCode == 404 { continue @@ -101,8 +111,9 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe isSameCert = certs.EqualCertificate(certX509, oldCertX509) } - // 如果已存在相同证书,直接返回已有的证书信息 + // 如果已存在相同证书,直接返回 if isSameCert { + u.logger.Info("ssl certificate already exists") return &uploader.UploadResult{ CertId: certDetail.Id, CertName: certDetail.Name, @@ -124,14 +135,15 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe // 上传新证书 // REF: https://support.huaweicloud.com/api-ccm/ImportCertificate.html - importCertificateReq := &hcScmModel.ImportCertificateRequest{ - Body: &hcScmModel.ImportCertificateRequestBody{ + importCertificateReq := &hcscmmodel.ImportCertificateRequest{ + Body: &hcscmmodel.ImportCertificateRequestBody{ Name: certName, Certificate: certPem, PrivateKey: privkeyPem, }, } importCertificateResp, err := u.sdkClient.ImportCertificate(importCertificateReq) + u.logger.Debug("sdk request 'scm.ImportCertificate'", slog.Any("request", importCertificateReq), slog.Any("response", importCertificateResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'scm.ImportCertificate'") } @@ -143,7 +155,7 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe }, nil } -func createSdkClient(accessKeyId, secretAccessKey, region string) (*hcScm.ScmClient, error) { +func createSdkClient(accessKeyId, secretAccessKey, region string) (*hcscm.ScmClient, error) { if region == "" { region = "cn-north-4" // SCM 服务默认区域:华北四北京 } @@ -156,12 +168,12 @@ func createSdkClient(accessKeyId, secretAccessKey, region string) (*hcScm.ScmCli return nil, err } - hcRegion, err := hcScmRegion.SafeValueOf(region) + hcRegion, err := hcscmregion.SafeValueOf(region) if err != nil { return nil, err } - hcClient, err := hcScm.ScmClientBuilder(). + hcClient, err := hcscm.ScmClientBuilder(). WithRegion(hcRegion). WithCredential(auth). SafeBuild() @@ -169,6 +181,6 @@ func createSdkClient(accessKeyId, secretAccessKey, region string) (*hcScm.ScmCli return nil, err } - client := hcScm.NewScmClient(hcClient) + client := hcscm.NewScmClient(hcClient) return client, nil } diff --git a/internal/pkg/core/uploader/providers/huaweicloud-waf/huaweicloud_waf.go b/internal/pkg/core/uploader/providers/huaweicloud-waf/huaweicloud_waf.go index 19e7cea7..da243ff1 100644 --- a/internal/pkg/core/uploader/providers/huaweicloud-waf/huaweicloud_waf.go +++ b/internal/pkg/core/uploader/providers/huaweicloud-waf/huaweicloud_waf.go @@ -4,16 +4,17 @@ import ( "context" "errors" "fmt" + "log/slog" "time" "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic" "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/global" - hcIam "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/iam/v3" - hcIamModel "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/iam/v3/model" - hcIamRegion "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/iam/v3/region" - hcWaf "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/waf/v1" - hcWafModel "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/waf/v1/model" - hcWafRegion "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/waf/v1/region" + hciam "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/iam/v3" + hciammodel "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/iam/v3/model" + hciamregion "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/iam/v3/region" + hcwaf "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/waf/v1" + hcwafmodel "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/waf/v1/model" + hcwafregion "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/waf/v1/region" xerrors "github.com/pkg/errors" "github.com/usual2970/certimate/internal/pkg/core/uploader" @@ -32,7 +33,8 @@ type UploaderConfig struct { type UploaderProvider struct { config *UploaderConfig - sdkClient *hcWaf.WafClient + logger *slog.Logger + sdkClient *hcwaf.WafClient } var _ uploader.Uploader = (*UploaderProvider)(nil) @@ -42,21 +44,27 @@ func NewUploader(config *UploaderConfig) (*UploaderProvider, error) { panic("config is nil") } - client, err := createSdkClient( - config.AccessKeyId, - config.SecretAccessKey, - config.Region, - ) + client, err := createSdkClient(config.AccessKeyId, config.SecretAccessKey, config.Region) if err != nil { return nil, xerrors.Wrap(err, "failed to create sdk client") } return &UploaderProvider{ config: config, + logger: slog.Default(), sdkClient: client, }, nil } +func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader { + if logger == nil { + u.logger = slog.Default() + } else { + u.logger = logger + } + return u +} + func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPem string) (res *uploader.UploadResult, err error) { // 解析证书内容 certX509, err := certs.ParseCertificateFromPEM(certPem) @@ -70,21 +78,23 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe listCertificatesPage := int32(1) listCertificatesPageSize := int32(100) for { - listCertificatesReq := &hcWafModel.ListCertificatesRequest{ + listCertificatesReq := &hcwafmodel.ListCertificatesRequest{ Page: hwsdk.Int32Ptr(listCertificatesPage), Pagesize: hwsdk.Int32Ptr(listCertificatesPageSize), } listCertificatesResp, err := u.sdkClient.ListCertificates(listCertificatesReq) + u.logger.Debug("sdk request 'waf.ShowCertificate'", slog.Any("request", listCertificatesReq), slog.Any("response", listCertificatesResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'waf.ListCertificates'") } if listCertificatesResp.Items != nil { for _, certItem := range *listCertificatesResp.Items { - showCertificateReq := &hcWafModel.ShowCertificateRequest{ + showCertificateReq := &hcwafmodel.ShowCertificateRequest{ CertificateId: certItem.Id, } showCertificateResp, err := u.sdkClient.ShowCertificate(showCertificateReq) + u.logger.Debug("sdk request 'waf.ShowCertificate'", slog.Any("request", showCertificateReq), slog.Any("response", showCertificateResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'waf.ShowCertificate'") } @@ -101,8 +111,9 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe isSameCert = certs.EqualCertificate(certX509, oldCertX509) } - // 如果已存在相同证书,直接返回已有的证书信息 + // 如果已存在相同证书,直接返回 if isSameCert { + u.logger.Info("ssl certificate already exists") return &uploader.UploadResult{ CertId: certItem.Id, CertName: certItem.Name, @@ -124,14 +135,15 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe // 创建证书 // REF: https://support.huaweicloud.com/api-waf/CreateCertificate.html - createCertificateReq := &hcWafModel.CreateCertificateRequest{ - Body: &hcWafModel.CreateCertificateRequestBody{ + createCertificateReq := &hcwafmodel.CreateCertificateRequest{ + Body: &hcwafmodel.CreateCertificateRequestBody{ Name: certName, Content: certPem, Key: privkeyPem, }, } createCertificateResp, err := u.sdkClient.CreateCertificate(createCertificateReq) + u.logger.Debug("sdk request 'waf.CreateCertificate'", slog.Any("request", createCertificateReq), slog.Any("response", createCertificateResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'waf.CreateCertificate'") } @@ -144,7 +156,7 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe }, nil } -func createSdkClient(accessKeyId, secretAccessKey, region string) (*hcWaf.WafClient, error) { +func createSdkClient(accessKeyId, secretAccessKey, region string) (*hcwaf.WafClient, error) { projectId, err := getSdkProjectId(accessKeyId, secretAccessKey, region) if err != nil { return nil, err @@ -159,12 +171,12 @@ func createSdkClient(accessKeyId, secretAccessKey, region string) (*hcWaf.WafCli return nil, err } - hcRegion, err := hcWafRegion.SafeValueOf(region) + hcRegion, err := hcwafregion.SafeValueOf(region) if err != nil { return nil, err } - hcClient, err := hcWaf.WafClientBuilder(). + hcClient, err := hcwaf.WafClientBuilder(). WithRegion(hcRegion). WithCredential(auth). SafeBuild() @@ -172,7 +184,7 @@ func createSdkClient(accessKeyId, secretAccessKey, region string) (*hcWaf.WafCli return nil, err } - client := hcWaf.NewWafClient(hcClient) + client := hcwaf.NewWafClient(hcClient) return client, nil } @@ -185,12 +197,12 @@ func getSdkProjectId(accessKeyId, secretAccessKey, region string) (string, error return "", err } - hcRegion, err := hcIamRegion.SafeValueOf(region) + hcRegion, err := hciamregion.SafeValueOf(region) if err != nil { return "", err } - hcClient, err := hcIam.IamClientBuilder(). + hcClient, err := hciam.IamClientBuilder(). WithRegion(hcRegion). WithCredential(auth). SafeBuild() @@ -198,9 +210,9 @@ func getSdkProjectId(accessKeyId, secretAccessKey, region string) (string, error return "", err } - client := hcIam.NewIamClient(hcClient) + client := hciam.NewIamClient(hcClient) - request := &hcIamModel.KeystoneListProjectsRequest{ + request := &hciammodel.KeystoneListProjectsRequest{ Name: ®ion, } response, err := client.KeystoneListProjects(request) diff --git a/internal/pkg/core/uploader/providers/jdcloud-ssl/jdcloud_ssl.go b/internal/pkg/core/uploader/providers/jdcloud-ssl/jdcloud_ssl.go index 6518bf41..fad48ff2 100644 --- a/internal/pkg/core/uploader/providers/jdcloud-ssl/jdcloud_ssl.go +++ b/internal/pkg/core/uploader/providers/jdcloud-ssl/jdcloud_ssl.go @@ -5,12 +5,13 @@ import ( "crypto/sha256" "encoding/hex" "fmt" + "log/slog" "strings" "time" - jdCore "github.com/jdcloud-api/jdcloud-sdk-go/core" - jdSslApi "github.com/jdcloud-api/jdcloud-sdk-go/services/ssl/apis" - jdSslClient "github.com/jdcloud-api/jdcloud-sdk-go/services/ssl/client" + jdcore "github.com/jdcloud-api/jdcloud-sdk-go/core" + jdsslapi "github.com/jdcloud-api/jdcloud-sdk-go/services/ssl/apis" + jdsslclient "github.com/jdcloud-api/jdcloud-sdk-go/services/ssl/client" xerrors "github.com/pkg/errors" "golang.org/x/exp/slices" @@ -27,7 +28,8 @@ type UploaderConfig struct { type UploaderProvider struct { config *UploaderConfig - sdkClient *jdSslClient.SslClient + logger *slog.Logger + sdkClient *jdsslclient.SslClient } var _ uploader.Uploader = (*UploaderProvider)(nil) @@ -44,10 +46,20 @@ func NewUploader(config *UploaderConfig) (*UploaderProvider, error) { return &UploaderProvider{ config: config, + logger: slog.Default(), sdkClient: client, }, nil } +func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader { + if logger == nil { + u.logger = slog.Default() + } else { + u.logger = logger + } + return u +} + func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPem string) (res *uploader.UploadResult, err error) { // 解析证书内容 certX509, err := certs.ParseCertificateFromPEM(certPem) @@ -66,11 +78,12 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe describeCertsPageNumber := 1 describeCertsPageSize := 10 for { - describeCertsReq := jdSslApi.NewDescribeCertsRequest() + describeCertsReq := jdsslapi.NewDescribeCertsRequest() describeCertsReq.SetDomainName(certX509.Subject.CommonName) describeCertsReq.SetPageNumber(describeCertsPageNumber) describeCertsReq.SetPageSize(describeCertsPageSize) describeCertsResp, err := u.sdkClient.DescribeCerts(describeCertsReq) + u.logger.Debug("sdk request 'ssl.DescribeCerts'", slog.Any("request", describeCertsReq), slog.Any("response", describeCertsResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'ssl.DescribeCerts'") } @@ -101,6 +114,7 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe } // 如果以上信息都一致,则视为已存在相同证书,直接返回 + u.logger.Info("ssl certificate already exists") return &uploader.UploadResult{ CertId: certDetail.CertId, CertName: certDetail.CertName, @@ -119,8 +133,9 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe // 上传证书 // REF: https://docs.jdcloud.com/cn/ssl-certificate/api/uploadcert - uploadCertReq := jdSslApi.NewUploadCertRequest(certName, privkeyPem, certPem) + uploadCertReq := jdsslapi.NewUploadCertRequest(certName, privkeyPem, certPem) uploadCertResp, err := u.sdkClient.UploadCert(uploadCertReq) + u.logger.Debug("sdk request 'ssl.UploadCertificate'", slog.Any("request", uploadCertReq), slog.Any("response", uploadCertResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'ssl.UploadCertificate'") } @@ -131,9 +146,9 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe }, nil } -func createSdkClient(accessKeyId, accessKeySecret string) (*jdSslClient.SslClient, error) { - clientCredentials := jdCore.NewCredentials(accessKeyId, accessKeySecret) - client := jdSslClient.NewSslClient(clientCredentials) - client.SetLogger(jdCore.NewDefaultLogger(jdCore.LogWarn)) +func createSdkClient(accessKeyId, accessKeySecret string) (*jdsslclient.SslClient, error) { + clientCredentials := jdcore.NewCredentials(accessKeyId, accessKeySecret) + client := jdsslclient.NewSslClient(clientCredentials) + client.SetLogger(jdcore.NewDefaultLogger(jdcore.LogWarn)) return client, nil } diff --git a/internal/pkg/core/uploader/providers/qiniu-sslcert/qiniu_sslcert.go b/internal/pkg/core/uploader/providers/qiniu-sslcert/qiniu_sslcert.go index 05c57be8..45f1b740 100644 --- a/internal/pkg/core/uploader/providers/qiniu-sslcert/qiniu_sslcert.go +++ b/internal/pkg/core/uploader/providers/qiniu-sslcert/qiniu_sslcert.go @@ -3,6 +3,7 @@ import ( "context" "fmt" + "log/slog" "time" xerrors "github.com/pkg/errors" @@ -10,7 +11,7 @@ import ( "github.com/usual2970/certimate/internal/pkg/core/uploader" "github.com/usual2970/certimate/internal/pkg/utils/certs" - qiniuEx "github.com/usual2970/certimate/internal/pkg/vendors/qiniu-sdk" + qiniusdk "github.com/usual2970/certimate/internal/pkg/vendors/qiniu-sdk" ) type UploaderConfig struct { @@ -22,7 +23,8 @@ type UploaderConfig struct { type UploaderProvider struct { config *UploaderConfig - sdkClient *qiniuEx.Client + logger *slog.Logger + sdkClient *qiniusdk.Client } var _ uploader.Uploader = (*UploaderProvider)(nil) @@ -32,20 +34,27 @@ func NewUploader(config *UploaderConfig) (*UploaderProvider, error) { panic("config is nil") } - client, err := createSdkClient( - config.AccessKey, - config.SecretKey, - ) + client, err := createSdkClient(config.AccessKey, config.SecretKey) if err != nil { return nil, xerrors.Wrap(err, "failed to create sdk client") } return &UploaderProvider{ config: config, + logger: slog.Default(), sdkClient: client, }, nil } +func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader { + if logger == nil { + u.logger = slog.Default() + } else { + u.logger = logger + } + return u +} + func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPem string) (res *uploader.UploadResult, err error) { // 解析证书内容 certX509, err := certs.ParseCertificateFromPEM(certPem) @@ -60,6 +69,7 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe // 上传新证书 // REF: https://developer.qiniu.com/fusion/8593/interface-related-certificate uploadSslCertResp, err := u.sdkClient.UploadSslCert(context.TODO(), certName, certX509.Subject.CommonName, certPem, privkeyPem) + u.logger.Debug("sdk request 'ssl.UploadCertificate'", slog.Any("response", uploadSslCertResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'cdn.UploadSslCert'") } @@ -71,8 +81,8 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe }, nil } -func createSdkClient(accessKey, secretKey string) (*qiniuEx.Client, error) { +func createSdkClient(accessKey, secretKey string) (*qiniusdk.Client, error) { credential := auth.New(accessKey, secretKey) - client := qiniuEx.NewClient(credential) + client := qiniusdk.NewClient(credential) return client, nil } diff --git a/internal/pkg/core/uploader/providers/tencentcloud-ssl/tencentcloud_ssl.go b/internal/pkg/core/uploader/providers/tencentcloud-ssl/tencentcloud_ssl.go index a76bf2a0..45c7ba9e 100644 --- a/internal/pkg/core/uploader/providers/tencentcloud-ssl/tencentcloud_ssl.go +++ b/internal/pkg/core/uploader/providers/tencentcloud-ssl/tencentcloud_ssl.go @@ -2,11 +2,12 @@ import ( "context" + "log/slog" xerrors "github.com/pkg/errors" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common" "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/profile" - tcSsl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" + tcssl "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl/v20191205" "github.com/usual2970/certimate/internal/pkg/core/uploader" ) @@ -20,7 +21,8 @@ type UploaderConfig struct { type UploaderProvider struct { config *UploaderConfig - sdkClient *tcSsl.Client + logger *slog.Logger + sdkClient *tcssl.Client } var _ uploader.Uploader = (*UploaderProvider)(nil) @@ -30,28 +32,36 @@ func NewUploader(config *UploaderConfig) (*UploaderProvider, error) { panic("config is nil") } - client, err := createSdkClient( - config.SecretId, - config.SecretKey, - ) + client, err := createSdkClient(config.SecretId, config.SecretKey) if err != nil { return nil, xerrors.Wrap(err, "failed to create sdk client") } return &UploaderProvider{ config: config, + logger: slog.Default(), sdkClient: client, }, nil } +func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader { + if logger == nil { + u.logger = slog.Default() + } else { + u.logger = logger + } + return u +} + func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPem string) (res *uploader.UploadResult, err error) { // 上传新证书 // REF: https://cloud.tencent.com/document/product/400/41665 - uploadCertificateReq := tcSsl.NewUploadCertificateRequest() + uploadCertificateReq := tcssl.NewUploadCertificateRequest() uploadCertificateReq.CertificatePublicKey = common.StringPtr(certPem) uploadCertificateReq.CertificatePrivateKey = common.StringPtr(privkeyPem) uploadCertificateReq.Repeatable = common.BoolPtr(false) uploadCertificateResp, err := u.sdkClient.UploadCertificate(uploadCertificateReq) + u.logger.Debug("sdk request 'ssl.UploadCertificate'", slog.Any("request", uploadCertificateReq), slog.Any("response", uploadCertificateResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'ssl.UploadCertificate'") } @@ -63,9 +73,9 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe }, nil } -func createSdkClient(secretId, secretKey string) (*tcSsl.Client, error) { +func createSdkClient(secretId, secretKey string) (*tcssl.Client, error) { credential := common.NewCredential(secretId, secretKey) - client, err := tcSsl.NewClient(credential, "", profile.NewClientProfile()) + client, err := tcssl.NewClient(credential, "", profile.NewClientProfile()) if err != nil { return nil, err } diff --git a/internal/pkg/core/uploader/providers/ucloud-ussl/ucloud_ussl.go b/internal/pkg/core/uploader/providers/ucloud-ussl/ucloud_ussl.go index 67506bf4..616f7617 100644 --- a/internal/pkg/core/uploader/providers/ucloud-ussl/ucloud_ussl.go +++ b/internal/pkg/core/uploader/providers/ucloud-ussl/ucloud_ussl.go @@ -8,16 +8,17 @@ import ( "encoding/hex" "errors" "fmt" + "log/slog" "strings" "time" xerrors "github.com/pkg/errors" - usdk "github.com/ucloud/ucloud-sdk-go/ucloud" - uAuth "github.com/ucloud/ucloud-sdk-go/ucloud/auth" + "github.com/ucloud/ucloud-sdk-go/ucloud" + ucloudauth "github.com/ucloud/ucloud-sdk-go/ucloud/auth" "github.com/usual2970/certimate/internal/pkg/core/uploader" "github.com/usual2970/certimate/internal/pkg/utils/certs" - usdkSsl "github.com/usual2970/certimate/internal/pkg/vendors/ucloud-sdk/ussl" + usslsdk "github.com/usual2970/certimate/internal/pkg/vendors/ucloud-sdk/ussl" ) type UploaderConfig struct { @@ -31,7 +32,8 @@ type UploaderConfig struct { type UploaderProvider struct { config *UploaderConfig - sdkClient *usdkSsl.USSLClient + logger *slog.Logger + sdkClient *usslsdk.USSLClient } var _ uploader.Uploader = (*UploaderProvider)(nil) @@ -48,10 +50,20 @@ func NewUploader(config *UploaderConfig) (*UploaderProvider, error) { return &UploaderProvider{ config: config, + logger: slog.Default(), sdkClient: client, }, nil } +func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader { + if logger == nil { + u.logger = slog.Default() + } else { + u.logger = logger + } + return u +} + func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPem string) (res *uploader.UploadResult, err error) { // 生成新证书名(需符合优刻得命名规则) var certId, certName string @@ -66,14 +78,15 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe // 上传托管证书 // REF: https://docs.ucloud.cn/api/usslcertificate-api/upload_normal_certificate uploadNormalCertificateReq := u.sdkClient.NewUploadNormalCertificateRequest() - uploadNormalCertificateReq.CertificateName = usdk.String(certName) - uploadNormalCertificateReq.SslPublicKey = usdk.String(certPemBase64) - uploadNormalCertificateReq.SslPrivateKey = usdk.String(privkeyPemBase64) - uploadNormalCertificateReq.SslMD5 = usdk.String(certMd5Hex) + uploadNormalCertificateReq.CertificateName = ucloud.String(certName) + uploadNormalCertificateReq.SslPublicKey = ucloud.String(certPemBase64) + uploadNormalCertificateReq.SslPrivateKey = ucloud.String(privkeyPemBase64) + uploadNormalCertificateReq.SslMD5 = ucloud.String(certMd5Hex) if u.config.ProjectId != "" { - uploadNormalCertificateReq.ProjectId = usdk.String(u.config.ProjectId) + uploadNormalCertificateReq.ProjectId = ucloud.String(u.config.ProjectId) } uploadNormalCertificateResp, err := u.sdkClient.UploadNormalCertificate(uploadNormalCertificateReq) + u.logger.Debug("sdk request 'ussl.UploadNormalCertificate'", slog.Any("request", uploadNormalCertificateReq), slog.Any("response", uploadNormalCertificateResp)) if err != nil { if uploadNormalCertificateResp != nil && uploadNormalCertificateResp.GetRetCode() == 80035 { if res, err := u.getExistCert(ctx, certPem); err != nil { @@ -81,6 +94,7 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe } else if res == nil { return nil, errors.New("no certificate found") } else { + u.logger.Info("ssl certificate already exists") return res, nil } } @@ -92,7 +106,7 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe return &uploader.UploadResult{ CertId: certId, CertName: certName, - ExtendedData: map[string]interface{}{ + ExtendedData: map[string]any{ "resourceId": uploadNormalCertificateResp.LongResourceID, }, }, nil @@ -112,15 +126,16 @@ func (u *UploaderProvider) getExistCert(ctx context.Context, certPem string) (re getCertificateListLimit := int(1000) for { getCertificateListReq := u.sdkClient.NewGetCertificateListRequest() - getCertificateListReq.Mode = usdk.String("trust") - getCertificateListReq.Domain = usdk.String(certX509.Subject.CommonName) - getCertificateListReq.Sort = usdk.String("2") - getCertificateListReq.Page = usdk.Int(getCertificateListPage) - getCertificateListReq.PageSize = usdk.Int(getCertificateListLimit) + getCertificateListReq.Mode = ucloud.String("trust") + getCertificateListReq.Domain = ucloud.String(certX509.Subject.CommonName) + getCertificateListReq.Sort = ucloud.String("2") + getCertificateListReq.Page = ucloud.Int(getCertificateListPage) + getCertificateListReq.PageSize = ucloud.Int(getCertificateListLimit) if u.config.ProjectId != "" { - getCertificateListReq.ProjectId = usdk.String(u.config.ProjectId) + getCertificateListReq.ProjectId = ucloud.String(u.config.ProjectId) } getCertificateListResp, err := u.sdkClient.GetCertificateList(getCertificateListReq) + u.logger.Debug("sdk request 'ussl.GetCertificateList'", slog.Any("request", getCertificateListReq), slog.Any("response", getCertificateListResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'ussl.GetCertificateList'") } @@ -143,9 +158,9 @@ func (u *UploaderProvider) getExistCert(ctx context.Context, certPem string) (re } getCertificateDetailInfoReq := u.sdkClient.NewGetCertificateDetailInfoRequest() - getCertificateDetailInfoReq.CertificateID = usdk.Int(certInfo.CertificateID) + getCertificateDetailInfoReq.CertificateID = ucloud.Int(certInfo.CertificateID) if u.config.ProjectId != "" { - getCertificateDetailInfoReq.ProjectId = usdk.String(u.config.ProjectId) + getCertificateDetailInfoReq.ProjectId = ucloud.String(u.config.ProjectId) } getCertificateDetailInfoResp, err := u.sdkClient.GetCertificateDetailInfo(getCertificateDetailInfoReq) if err != nil { @@ -197,7 +212,7 @@ func (u *UploaderProvider) getExistCert(ctx context.Context, certPem string) (re return &uploader.UploadResult{ CertId: fmt.Sprintf("%d", certInfo.CertificateID), CertName: certInfo.Name, - ExtendedData: map[string]interface{}{ + ExtendedData: map[string]any{ "resourceId": certInfo.CertificateSN, }, }, nil @@ -214,13 +229,13 @@ func (u *UploaderProvider) getExistCert(ctx context.Context, certPem string) (re return nil, nil } -func createSdkClient(privateKey, publicKey string) (*usdkSsl.USSLClient, error) { - cfg := usdk.NewConfig() +func createSdkClient(privateKey, publicKey string) (*usslsdk.USSLClient, error) { + cfg := ucloud.NewConfig() - credential := uAuth.NewCredential() + credential := ucloudauth.NewCredential() credential.PrivateKey = privateKey credential.PublicKey = publicKey - client := usdkSsl.NewClient(&cfg, &credential) + client := usslsdk.NewClient(&cfg, &credential) return client, nil } diff --git a/internal/pkg/core/uploader/providers/volcengine-cdn/volcengine_cdn.go b/internal/pkg/core/uploader/providers/volcengine-cdn/volcengine_cdn.go index 9b5c9b56..36f20876 100644 --- a/internal/pkg/core/uploader/providers/volcengine-cdn/volcengine_cdn.go +++ b/internal/pkg/core/uploader/providers/volcengine-cdn/volcengine_cdn.go @@ -6,11 +6,12 @@ import ( "crypto/sha256" "encoding/hex" "fmt" + "log/slog" "strings" "time" xerrors "github.com/pkg/errors" - veCdn "github.com/volcengine/volc-sdk-golang/service/cdn" + vecdn "github.com/volcengine/volc-sdk-golang/service/cdn" ve "github.com/volcengine/volcengine-go-sdk/volcengine" "github.com/usual2970/certimate/internal/pkg/core/uploader" @@ -26,7 +27,8 @@ type UploaderConfig struct { type UploaderProvider struct { config *UploaderConfig - sdkClient *veCdn.CDN + logger *slog.Logger + sdkClient *vecdn.CDN } var _ uploader.Uploader = (*UploaderProvider)(nil) @@ -36,16 +38,26 @@ func NewUploader(config *UploaderConfig) (*UploaderProvider, error) { panic("config is nil") } - client := veCdn.NewInstance() + client := vecdn.NewInstance() client.Client.SetAccessKey(config.AccessKeyId) client.Client.SetSecretKey(config.AccessKeySecret) return &UploaderProvider{ config: config, + logger: slog.Default(), sdkClient: client, }, nil } +func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader { + if logger == nil { + u.logger = slog.Default() + } else { + u.logger = logger + } + return u +} + func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPem string) (res *uploader.UploadResult, err error) { // 解析证书内容 certX509, err := certs.ParseCertificateFromPEM(certPem) @@ -58,13 +70,14 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe listCertInfoPageNum := int64(1) listCertInfoPageSize := int64(100) listCertInfoTotal := 0 - listCertInfoReq := &veCdn.ListCertInfoRequest{ + listCertInfoReq := &vecdn.ListCertInfoRequest{ PageNum: ve.Int64(listCertInfoPageNum), PageSize: ve.Int64(listCertInfoPageSize), Source: "volc_cert_center", } for { listCertInfoResp, err := u.sdkClient.ListCertInfo(listCertInfoReq) + u.logger.Debug("sdk request 'cdn.ListCertInfo'", slog.Any("request", listCertInfoReq), slog.Any("response", listCertInfoResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'cdn.ListCertInfo'") } @@ -75,8 +88,9 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe fingerprintSha256 := sha256.Sum256(certX509.Raw) isSameCert := strings.EqualFold(hex.EncodeToString(fingerprintSha1[:]), certDetail.CertFingerprint.Sha1) && strings.EqualFold(hex.EncodeToString(fingerprintSha256[:]), certDetail.CertFingerprint.Sha256) - // 如果已存在相同证书,直接返回已有的证书信息 + // 如果已存在相同证书,直接返回 if isSameCert { + u.logger.Info("ssl certificate already exists") return &uploader.UploadResult{ CertId: certDetail.CertId, CertName: certDetail.Desc, @@ -100,13 +114,14 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe // 上传新证书 // REF: https://www.volcengine.com/docs/6454/1245763 - addCertificateReq := &veCdn.AddCertificateRequest{ + addCertificateReq := &vecdn.AddCertificateRequest{ Certificate: certPem, PrivateKey: privkeyPem, Source: ve.String("volc_cert_center"), Desc: ve.String(certName), } addCertificateResp, err := u.sdkClient.AddCertificate(addCertificateReq) + u.logger.Debug("sdk request 'cdn.AddCertificate'", slog.Any("request", addCertificateResp), slog.Any("response", addCertificateResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'cdn.AddCertificate'") } diff --git a/internal/pkg/core/uploader/providers/volcengine-certcenter/volcengine_certcenter.go b/internal/pkg/core/uploader/providers/volcengine-certcenter/volcengine_certcenter.go index 1ff133e5..990d9550 100644 --- a/internal/pkg/core/uploader/providers/volcengine-certcenter/volcengine_certcenter.go +++ b/internal/pkg/core/uploader/providers/volcengine-certcenter/volcengine_certcenter.go @@ -2,13 +2,14 @@ package volcenginecertcenter import ( "context" + "log/slog" xerrors "github.com/pkg/errors" ve "github.com/volcengine/volcengine-go-sdk/volcengine" - veSession "github.com/volcengine/volcengine-go-sdk/volcengine/session" + vesession "github.com/volcengine/volcengine-go-sdk/volcengine/session" "github.com/usual2970/certimate/internal/pkg/core/uploader" - vesdkCc "github.com/usual2970/certimate/internal/pkg/vendors/volcengine-sdk/certcenter" + veccsdk "github.com/usual2970/certimate/internal/pkg/vendors/volcengine-sdk/certcenter" ) type UploaderConfig struct { @@ -22,7 +23,8 @@ type UploaderConfig struct { type UploaderProvider struct { config *UploaderConfig - sdkClient *vesdkCc.CertCenter + logger *slog.Logger + sdkClient *veccsdk.CertCenter } var _ uploader.Uploader = (*UploaderProvider)(nil) @@ -39,21 +41,32 @@ func NewUploader(config *UploaderConfig) (*UploaderProvider, error) { return &UploaderProvider{ config: config, + logger: slog.Default(), sdkClient: client, }, nil } +func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader { + if logger == nil { + u.logger = slog.Default() + } else { + u.logger = logger + } + return u +} + func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPem string) (res *uploader.UploadResult, err error) { // 上传证书 // REF: https://www.volcengine.com/docs/6638/1365580 - importCertificateReq := &vesdkCc.ImportCertificateInput{ - CertificateInfo: &vesdkCc.ImportCertificateInputCertificateInfo{ + importCertificateReq := &veccsdk.ImportCertificateInput{ + CertificateInfo: &veccsdk.ImportCertificateInputCertificateInfo{ CertificateChain: ve.String(certPem), PrivateKey: ve.String(privkeyPem), }, Repeatable: ve.Bool(false), } importCertificateResp, err := u.sdkClient.ImportCertificate(importCertificateReq) + u.logger.Debug("sdk request 'certcenter.ImportCertificate'", slog.Any("request", importCertificateReq), slog.Any("response", importCertificateResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'certcenter.ImportCertificate'") } @@ -70,18 +83,18 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe }, nil } -func createSdkClient(accessKeyId, accessKeySecret, region string) (*vesdkCc.CertCenter, error) { +func createSdkClient(accessKeyId, accessKeySecret, region string) (*veccsdk.CertCenter, error) { if region == "" { region = "cn-beijing" // 证书中心默认区域:北京 } config := ve.NewConfig().WithRegion(region).WithAkSk(accessKeyId, accessKeySecret) - session, err := veSession.NewSession(config) + session, err := vesession.NewSession(config) if err != nil { return nil, err } - client := vesdkCc.New(session) + client := veccsdk.New(session) return client, nil } diff --git a/internal/pkg/core/uploader/providers/volcengine-live/volcengine_live.go b/internal/pkg/core/uploader/providers/volcengine-live/volcengine_live.go index 3a7a39eb..70a281d3 100644 --- a/internal/pkg/core/uploader/providers/volcengine-live/volcengine_live.go +++ b/internal/pkg/core/uploader/providers/volcengine-live/volcengine_live.go @@ -3,11 +3,12 @@ package volcenginelive import ( "context" "fmt" + "log/slog" "strings" "time" xerrors "github.com/pkg/errors" - veLive "github.com/volcengine/volc-sdk-golang/service/live/v20230101" + velive "github.com/volcengine/volc-sdk-golang/service/live/v20230101" ve "github.com/volcengine/volcengine-go-sdk/volcengine" "github.com/usual2970/certimate/internal/pkg/core/uploader" @@ -23,7 +24,8 @@ type UploaderConfig struct { type UploaderProvider struct { config *UploaderConfig - sdkClient *veLive.Live + logger *slog.Logger + sdkClient *velive.Live } var _ uploader.Uploader = (*UploaderProvider)(nil) @@ -33,16 +35,26 @@ func NewUploader(config *UploaderConfig) (*UploaderProvider, error) { panic("config is nil") } - client := veLive.NewInstance() + client := velive.NewInstance() client.SetAccessKey(config.AccessKeyId) client.SetSecretKey(config.AccessKeySecret) return &UploaderProvider{ config: config, + logger: slog.Default(), sdkClient: client, }, nil } +func (u *UploaderProvider) WithLogger(logger *slog.Logger) uploader.Uploader { + if logger == nil { + u.logger = slog.Default() + } else { + u.logger = logger + } + return u +} + func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPem string) (res *uploader.UploadResult, err error) { // 解析证书内容 certX509, err := certs.ParseCertificateFromPEM(certPem) @@ -52,8 +64,9 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe // 查询证书列表,避免重复上传 // REF: https://www.volcengine.com/docs/6469/1186278#%E6%9F%A5%E8%AF%A2%E8%AF%81%E4%B9%A6%E5%88%97%E8%A1%A8 - listCertReq := &veLive.ListCertV2Body{} + listCertReq := &velive.ListCertV2Body{} listCertResp, err := u.sdkClient.ListCertV2(ctx, listCertReq) + u.logger.Debug("sdk request 'live.ListCertV2'", slog.Any("request", listCertReq), slog.Any("response", listCertResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'live.ListCertV2'") } @@ -61,10 +74,11 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe for _, certDetail := range listCertResp.Result.CertList { // 查询证书详细信息 // REF: https://www.volcengine.com/docs/6469/1186278#%E6%9F%A5%E7%9C%8B%E8%AF%81%E4%B9%A6%E8%AF%A6%E6%83%85 - describeCertDetailSecretReq := &veLive.DescribeCertDetailSecretV2Body{ + describeCertDetailSecretReq := &velive.DescribeCertDetailSecretV2Body{ ChainID: ve.String(certDetail.ChainID), } describeCertDetailSecretResp, err := u.sdkClient.DescribeCertDetailSecretV2(ctx, describeCertDetailSecretReq) + u.logger.Debug("sdk request 'live.DescribeCertDetailSecretV2'", slog.Any("request", describeCertDetailSecretReq), slog.Any("response", describeCertDetailSecretResp)) if err != nil { continue } @@ -82,8 +96,9 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe isSameCert = certs.EqualCertificate(certX509, oldCertX509) } - // 如果已存在相同证书,直接返回已有的证书信息 + // 如果已存在相同证书,直接返回 if isSameCert { + u.logger.Info("ssl certificate already exists") return &uploader.UploadResult{ CertId: certDetail.ChainID, CertName: certDetail.CertName, @@ -98,16 +113,17 @@ func (u *UploaderProvider) Upload(ctx context.Context, certPem string, privkeyPe // 上传新证书 // REF: https://www.volcengine.com/docs/6469/1186278#%E6%B7%BB%E5%8A%A0%E8%AF%81%E4%B9%A6 - createCertReq := &veLive.CreateCertBody{ + createCertReq := &velive.CreateCertBody{ CertName: ve.String(certName), UseWay: "https", ProjectName: ve.String("default"), - Rsa: veLive.CreateCertBodyRsa{ + Rsa: velive.CreateCertBodyRsa{ Prikey: privkeyPem, Pubkey: certPem, }, } createCertResp, err := u.sdkClient.CreateCert(ctx, createCertReq) + u.logger.Debug("sdk request 'live.CreateCert'", slog.Any("request", createCertReq), slog.Any("response", createCertResp)) if err != nil { return nil, xerrors.Wrap(err, "failed to execute sdk request 'live.CreateCert'") } diff --git a/internal/pkg/core/uploader/uploader.go b/internal/pkg/core/uploader/uploader.go index 76748a99..06cecec0 100644 --- a/internal/pkg/core/uploader/uploader.go +++ b/internal/pkg/core/uploader/uploader.go @@ -1,11 +1,16 @@ package uploader -import "context" +import ( + "context" + "log/slog" +) // 表示定义证书上传器的抽象类型接口。 // 云服务商通常会提供 SSL 证书管理服务,可供用户集中管理证书。 // 注意与 `Deployer` 区分,“上传”通常为“部署”的前置操作。 type Uploader interface { + WithLogger(logger *slog.Logger) Uploader + // 上传证书。 // // 入参: