From 3462e454d017b2aa4cc910d93b0fe5ba9a739ac7 Mon Sep 17 00:00:00 2001 From: Fu Diwei Date: Fri, 16 May 2025 23:30:03 +0800 Subject: [PATCH] feat: new deployment provider: aliyun ga --- go.mod | 1 + go.sum | 3 + internal/applicant/applicant.go | 28 +- internal/applicant/providers.go | 46 +- internal/deployer/deployer.go | 6 +- internal/deployer/providers.go | 410 +++++++++--------- internal/domain/provider.go | 2 +- internal/notify/notifier.go | 6 +- internal/notify/providers.go | 18 +- .../providers/aliyun-alb/aliyun_alb.go | 13 +- .../providers/aliyun-alb/aliyun_alb_test.go | 1 + .../providers/aliyun-clb/aliyun_clb.go | 1 - .../deployer/providers/aliyun-ga/aliyun_ga.go | 322 ++++++++++++++ .../providers/aliyun-ga/aliyun_ga_test.go | 118 +++++ .../deployer/providers/aliyun-ga/consts.go | 10 + .../providers/aliyun-nlb/aliyun_nlb.go | 3 +- .../huaweicloud-elb/huaweicloud_elb.go | 1 - .../workflow/node/DeployNodeConfigForm.tsx | 3 + .../DeployNodeConfigFormAliyunGAConfig.tsx | 118 +++++ ui/src/domain/provider.ts | 2 + ui/src/i18n/locales/en/nls.provider.json | 1 + .../i18n/locales/en/nls.workflow.nodes.json | 13 + ui/src/i18n/locales/zh/nls.provider.json | 1 + .../i18n/locales/zh/nls.workflow.nodes.json | 13 + 24 files changed, 880 insertions(+), 260 deletions(-) create mode 100644 internal/pkg/core/deployer/providers/aliyun-ga/aliyun_ga.go create mode 100644 internal/pkg/core/deployer/providers/aliyun-ga/aliyun_ga_test.go create mode 100644 internal/pkg/core/deployer/providers/aliyun-ga/consts.go create mode 100644 ui/src/components/workflow/node/DeployNodeConfigFormAliyunGAConfig.tsx diff --git a/go.mod b/go.mod index a4ab4379..37686d8c 100644 --- a/go.mod +++ b/go.mod @@ -20,6 +20,7 @@ require ( github.com/alibabacloud-go/esa-20240910/v2 v2.32.0 github.com/alibabacloud-go/fc-20230330/v4 v4.3.5 github.com/alibabacloud-go/fc-open-20210406/v2 v2.0.12 + github.com/alibabacloud-go/ga-20191120/v3 v3.1.8 github.com/alibabacloud-go/live-20161101 v1.1.1 github.com/alibabacloud-go/nlb-20220430/v2 v2.0.3 github.com/alibabacloud-go/slb-20140515/v4 v4.0.10 diff --git a/go.sum b/go.sum index b9d4247d..5a64f77a 100644 --- a/go.sum +++ b/go.sum @@ -112,6 +112,7 @@ github.com/alibabacloud-go/darabonba-map v0.0.2/go.mod h1:28AJaX8FOE/ym8OUFWga+M github.com/alibabacloud-go/darabonba-openapi/v2 v2.0.0/go.mod h1:5JHVmnHvGzR2wNdgaW1zDLQG8kOC4Uec8ubkMogW7OQ= github.com/alibabacloud-go/darabonba-openapi/v2 v2.0.2/go.mod h1:5JHVmnHvGzR2wNdgaW1zDLQG8kOC4Uec8ubkMogW7OQ= github.com/alibabacloud-go/darabonba-openapi/v2 v2.0.5/go.mod h1:kUe8JqFmoVU7lfBauaDD5taFaW7mBI+xVsyHutYtabg= +github.com/alibabacloud-go/darabonba-openapi/v2 v2.0.9/go.mod h1:bb+Io8Sn2RuM3/Rpme6ll86jMyFSrD1bxeV/+v61KeU= github.com/alibabacloud-go/darabonba-openapi/v2 v2.0.10/go.mod h1:26a14FGhZVELuz2cc2AolvW4RHmIO3/HRwsdHhaIPDE= github.com/alibabacloud-go/darabonba-openapi/v2 v2.0.11/go.mod h1:wHxkgZT1ClZdcwEVP/pDgYK/9HucsnCfMipmJgCz4xY= github.com/alibabacloud-go/darabonba-openapi/v2 v2.1.7 h1:ASXSBga98QrGMxbIThCD6jAti09gedLfvry6yJtsoBE= @@ -137,6 +138,8 @@ github.com/alibabacloud-go/fc-20230330/v4 v4.3.5 h1:nDNjVzGwkQPbQnAuxAmxvS9x8QGL github.com/alibabacloud-go/fc-20230330/v4 v4.3.5/go.mod h1:vEJimQ6E/e+m2z0/oXdeQWlFw/Pi/Ar6NKcMrSvcILE= github.com/alibabacloud-go/fc-open-20210406/v2 v2.0.12 h1:A3D8Mp6qf8DfR6Dt5MpS8aDVaWfS4N85T5CvGUvgrjM= github.com/alibabacloud-go/fc-open-20210406/v2 v2.0.12/go.mod h1:F5c0E5UB3k8v6neTtw3FBcJ1YCNFzVoL1JPRHTe33u4= +github.com/alibabacloud-go/ga-20191120/v3 v3.1.8 h1:5GF0PXijDhxRQ3gTg9Ee/CVPtglkxuVdz4yIQgYLPgw= +github.com/alibabacloud-go/ga-20191120/v3 v3.1.8/go.mod h1:RVpR9VL4YECKoZCQijTYfPk8k52O61v6hSRekjxF0kw= github.com/alibabacloud-go/live-20161101 v1.1.1 h1:rUGfA8RHmCMtQ5M3yMSyRde+yRXWqVecmiXBU3XrGJ8= github.com/alibabacloud-go/live-20161101 v1.1.1/go.mod h1:g84w6qeAodT0/IHdc0tEed2a8PyhQhYl7TAj3jGl4A4= github.com/alibabacloud-go/nlb-20220430/v2 v2.0.3 h1:LtyUVlgBEKyzWgQJurzXM6MXCt84sQr9cE5OKqYymko= diff --git a/internal/applicant/applicant.go b/internal/applicant/applicant.go index 6d17e940..e6a04bcd 100644 --- a/internal/applicant/applicant.go +++ b/internal/applicant/applicant.go @@ -54,20 +54,20 @@ func NewWithWorkflowNode(config ApplicantWithWorkflowNodeConfig) (Applicant, err nodeConfig := config.Node.GetConfigForApply() options := &applicantProviderOptions{ - Domains: sliceutil.Filter(strings.Split(nodeConfig.Domains, ";"), func(s string) bool { return s != "" }), - ContactEmail: nodeConfig.ContactEmail, - Provider: domain.ACMEDns01ProviderType(nodeConfig.Provider), - ProviderAccessConfig: make(map[string]any), - ProviderExtendedConfig: nodeConfig.ProviderConfig, - CAProvider: domain.CAProviderType(nodeConfig.CAProvider), - CAProviderAccessConfig: make(map[string]any), - CAProviderExtendedConfig: nodeConfig.CAProviderConfig, - KeyAlgorithm: nodeConfig.KeyAlgorithm, - Nameservers: sliceutil.Filter(strings.Split(nodeConfig.Nameservers, ";"), func(s string) bool { return s != "" }), - DnsPropagationWait: nodeConfig.DnsPropagationWait, - DnsPropagationTimeout: nodeConfig.DnsPropagationTimeout, - DnsTTL: nodeConfig.DnsTTL, - DisableFollowCNAME: nodeConfig.DisableFollowCNAME, + Domains: sliceutil.Filter(strings.Split(nodeConfig.Domains, ";"), func(s string) bool { return s != "" }), + ContactEmail: nodeConfig.ContactEmail, + Provider: domain.ACMEDns01ProviderType(nodeConfig.Provider), + ProviderAccessConfig: make(map[string]any), + ProviderServiceConfig: nodeConfig.ProviderConfig, + CAProvider: domain.CAProviderType(nodeConfig.CAProvider), + CAProviderAccessConfig: make(map[string]any), + CAProviderServiceConfig: nodeConfig.CAProviderConfig, + KeyAlgorithm: nodeConfig.KeyAlgorithm, + Nameservers: sliceutil.Filter(strings.Split(nodeConfig.Nameservers, ";"), func(s string) bool { return s != "" }), + DnsPropagationWait: nodeConfig.DnsPropagationWait, + DnsPropagationTimeout: nodeConfig.DnsPropagationTimeout, + DnsTTL: nodeConfig.DnsTTL, + DisableFollowCNAME: nodeConfig.DisableFollowCNAME, } accessRepo := repository.NewAccessRepository() diff --git a/internal/applicant/providers.go b/internal/applicant/providers.go index bf27e7e3..de47ae18 100644 --- a/internal/applicant/providers.go +++ b/internal/applicant/providers.go @@ -42,23 +42,23 @@ import ( ) type applicantProviderOptions struct { - Domains []string - ContactEmail string - Provider domain.ACMEDns01ProviderType - ProviderAccessConfig map[string]any - ProviderExtendedConfig map[string]any - CAProvider domain.CAProviderType - CAProviderAccessId string - CAProviderAccessConfig map[string]any - CAProviderExtendedConfig map[string]any - KeyAlgorithm string - Nameservers []string - DnsPropagationWait int32 - DnsPropagationTimeout int32 - DnsTTL int32 - DisableFollowCNAME bool - ReplacedARIAcct string - ReplacedARICert string + Domains []string + ContactEmail string + Provider domain.ACMEDns01ProviderType + ProviderAccessConfig map[string]any + ProviderServiceConfig map[string]any + CAProvider domain.CAProviderType + CAProviderAccessId string + CAProviderAccessConfig map[string]any + CAProviderServiceConfig map[string]any + KeyAlgorithm string + Nameservers []string + DnsPropagationWait int32 + DnsPropagationTimeout int32 + DnsTTL int32 + DisableFollowCNAME bool + ReplacedARIAcct string + ReplacedARICert string } func createApplicantProvider(options *applicantProviderOptions) (challenge.Provider, error) { @@ -105,7 +105,7 @@ func createApplicantProvider(options *applicantProviderOptions) (challenge.Provi applicant, err := pAliyunESA.NewChallengeProvider(&pAliyunESA.ChallengeProviderConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.AccessKeySecret, - Region: maputil.GetString(options.ProviderExtendedConfig, "region"), + Region: maputil.GetString(options.ProviderServiceConfig, "region"), DnsPropagationTimeout: options.DnsPropagationTimeout, DnsTTL: options.DnsTTL, }) @@ -126,8 +126,8 @@ func createApplicantProvider(options *applicantProviderOptions) (challenge.Provi applicant, err := pAWSRoute53.NewChallengeProvider(&pAWSRoute53.ChallengeProviderConfig{ AccessKeyId: access.AccessKeyId, SecretAccessKey: access.SecretAccessKey, - Region: maputil.GetString(options.ProviderExtendedConfig, "region"), - HostedZoneId: maputil.GetString(options.ProviderExtendedConfig, "hostedZoneId"), + Region: maputil.GetString(options.ProviderServiceConfig, "region"), + HostedZoneId: maputil.GetString(options.ProviderServiceConfig, "hostedZoneId"), DnsPropagationTimeout: options.DnsPropagationTimeout, DnsTTL: options.DnsTTL, }) @@ -334,7 +334,7 @@ func createApplicantProvider(options *applicantProviderOptions) (challenge.Provi applicant, err := pHuaweiCloud.NewChallengeProvider(&pHuaweiCloud.ChallengeProviderConfig{ AccessKeyId: access.AccessKeyId, SecretAccessKey: access.SecretAccessKey, - Region: maputil.GetString(options.ProviderExtendedConfig, "region"), + Region: maputil.GetString(options.ProviderServiceConfig, "region"), DnsPropagationTimeout: options.DnsPropagationTimeout, DnsTTL: options.DnsTTL, }) @@ -351,7 +351,7 @@ func createApplicantProvider(options *applicantProviderOptions) (challenge.Provi applicant, err := pJDCloud.NewChallengeProvider(&pJDCloud.ChallengeProviderConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.AccessKeySecret, - RegionId: maputil.GetString(options.ProviderExtendedConfig, "regionId"), + RegionId: maputil.GetString(options.ProviderServiceConfig, "regionId"), DnsPropagationTimeout: options.DnsPropagationTimeout, DnsTTL: options.DnsTTL, }) @@ -521,7 +521,7 @@ func createApplicantProvider(options *applicantProviderOptions) (challenge.Provi applicant, err := pTencentCloudEO.NewChallengeProvider(&pTencentCloudEO.ChallengeProviderConfig{ SecretId: access.SecretId, SecretKey: access.SecretKey, - ZoneId: maputil.GetString(options.ProviderExtendedConfig, "zoneId"), + ZoneId: maputil.GetString(options.ProviderServiceConfig, "zoneId"), DnsPropagationTimeout: options.DnsPropagationTimeout, DnsTTL: options.DnsTTL, }) diff --git a/internal/deployer/deployer.go b/internal/deployer/deployer.go index bdacf08e..e4a28746 100644 --- a/internal/deployer/deployer.go +++ b/internal/deployer/deployer.go @@ -31,9 +31,9 @@ func NewWithWorkflowNode(config DeployerWithWorkflowNodeConfig) (Deployer, error nodeConfig := config.Node.GetConfigForDeploy() options := &deployerProviderOptions{ - Provider: domain.DeploymentProviderType(nodeConfig.Provider), - ProviderAccessConfig: make(map[string]any), - ProviderExtendedConfig: nodeConfig.ProviderConfig, + Provider: domain.DeploymentProviderType(nodeConfig.Provider), + ProviderAccessConfig: make(map[string]any), + ProviderServiceConfig: nodeConfig.ProviderConfig, } accessRepo := repository.NewAccessRepository() diff --git a/internal/deployer/providers.go b/internal/deployer/providers.go index bf7483d9..8870fe97 100644 --- a/internal/deployer/providers.go +++ b/internal/deployer/providers.go @@ -19,6 +19,7 @@ import ( pAliyunDDoS "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/aliyun-ddos" pAliyunESA "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/aliyun-esa" pAliyunFC "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/aliyun-fc" + pAliyunGA "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/aliyun-ga" pAliyunLive "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/aliyun-live" pAliyunNLB "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/aliyun-nlb" pAliyunOSS "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/aliyun-oss" @@ -92,9 +93,9 @@ import ( ) type deployerProviderOptions struct { - Provider domain.DeploymentProviderType - ProviderAccessConfig map[string]any - ProviderExtendedConfig map[string]any + Provider domain.DeploymentProviderType + ProviderAccessConfig map[string]any + ProviderServiceConfig map[string]any } func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer, error) { @@ -117,7 +118,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer ApiVersion: access.ApiVersion, ApiKey: access.ApiKey, AllowInsecureConnections: access.AllowInsecureConnections, - AutoRestart: maputil.GetBool(options.ProviderExtendedConfig, "autoRestart"), + AutoRestart: maputil.GetBool(options.ProviderServiceConfig, "autoRestart"), }) return deployer, err @@ -127,9 +128,9 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer ApiVersion: access.ApiVersion, ApiKey: access.ApiKey, AllowInsecureConnections: access.AllowInsecureConnections, - ResourceType: p1PanelSite.ResourceType(maputil.GetOrDefaultString(options.ProviderExtendedConfig, "resourceType", string(p1PanelSite.RESOURCE_TYPE_WEBSITE))), - WebsiteId: maputil.GetInt64(options.ProviderExtendedConfig, "websiteId"), - CertificateId: maputil.GetInt64(options.ProviderExtendedConfig, "certificateId"), + ResourceType: p1PanelSite.ResourceType(maputil.GetOrDefaultString(options.ProviderServiceConfig, "resourceType", string(p1PanelSite.RESOURCE_TYPE_WEBSITE))), + WebsiteId: maputil.GetInt64(options.ProviderServiceConfig, "websiteId"), + CertificateId: maputil.GetInt64(options.ProviderServiceConfig, "certificateId"), }) return deployer, err @@ -138,7 +139,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer } } - case domain.DeploymentProviderTypeAliyunALB, domain.DeploymentProviderTypeAliyunAPIGW, domain.DeploymentProviderTypeAliyunCAS, domain.DeploymentProviderTypeAliyunCASDeploy, domain.DeploymentProviderTypeAliyunCDN, domain.DeploymentProviderTypeAliyunCLB, domain.DeploymentProviderTypeAliyunDCDN, domain.DeploymentProviderTypeAliyunDDoS, domain.DeploymentProviderTypeAliyunESA, domain.DeploymentProviderTypeAliyunFC, domain.DeploymentProviderTypeAliyunLive, domain.DeploymentProviderTypeAliyunNLB, domain.DeploymentProviderTypeAliyunOSS, domain.DeploymentProviderTypeAliyunVOD, domain.DeploymentProviderTypeAliyunWAF: + case domain.DeploymentProviderTypeAliyunALB, domain.DeploymentProviderTypeAliyunAPIGW, domain.DeploymentProviderTypeAliyunCAS, domain.DeploymentProviderTypeAliyunCASDeploy, domain.DeploymentProviderTypeAliyunCDN, domain.DeploymentProviderTypeAliyunCLB, domain.DeploymentProviderTypeAliyunDCDN, domain.DeploymentProviderTypeAliyunDDoS, domain.DeploymentProviderTypeAliyunESA, domain.DeploymentProviderTypeAliyunFC, domain.DeploymentProviderTypeAliyunGA, domain.DeploymentProviderTypeAliyunLive, domain.DeploymentProviderTypeAliyunNLB, domain.DeploymentProviderTypeAliyunOSS, domain.DeploymentProviderTypeAliyunVOD, domain.DeploymentProviderTypeAliyunWAF: { access := domain.AccessConfigForAliyun{} if err := maputil.Populate(options.ProviderAccessConfig, &access); err != nil { @@ -150,11 +151,11 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer deployer, err := pAliyunALB.NewDeployer(&pAliyunALB.DeployerConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.AccessKeySecret, - Region: maputil.GetString(options.ProviderExtendedConfig, "region"), - ResourceType: pAliyunALB.ResourceType(maputil.GetString(options.ProviderExtendedConfig, "resourceType")), - LoadbalancerId: maputil.GetString(options.ProviderExtendedConfig, "loadbalancerId"), - ListenerId: maputil.GetString(options.ProviderExtendedConfig, "listenerId"), - Domain: maputil.GetString(options.ProviderExtendedConfig, "domain"), + Region: maputil.GetString(options.ProviderServiceConfig, "region"), + ResourceType: pAliyunALB.ResourceType(maputil.GetString(options.ProviderServiceConfig, "resourceType")), + LoadbalancerId: maputil.GetString(options.ProviderServiceConfig, "loadbalancerId"), + ListenerId: maputil.GetString(options.ProviderServiceConfig, "listenerId"), + Domain: maputil.GetString(options.ProviderServiceConfig, "domain"), }) return deployer, err @@ -162,11 +163,11 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer deployer, err := pAliyunAPIGW.NewDeployer(&pAliyunAPIGW.DeployerConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.AccessKeySecret, - Region: maputil.GetString(options.ProviderExtendedConfig, "region"), - ServiceType: pAliyunAPIGW.ServiceType(maputil.GetString(options.ProviderExtendedConfig, "serviceType")), - GatewayId: maputil.GetString(options.ProviderExtendedConfig, "gatewayId"), - GroupId: maputil.GetString(options.ProviderExtendedConfig, "groupId"), - Domain: maputil.GetString(options.ProviderExtendedConfig, "domain"), + Region: maputil.GetString(options.ProviderServiceConfig, "region"), + ServiceType: pAliyunAPIGW.ServiceType(maputil.GetString(options.ProviderServiceConfig, "serviceType")), + GatewayId: maputil.GetString(options.ProviderServiceConfig, "gatewayId"), + GroupId: maputil.GetString(options.ProviderServiceConfig, "groupId"), + Domain: maputil.GetString(options.ProviderServiceConfig, "domain"), }) return deployer, err @@ -174,7 +175,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer deployer, err := pAliyunCAS.NewDeployer(&pAliyunCAS.DeployerConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.AccessKeySecret, - Region: maputil.GetString(options.ProviderExtendedConfig, "region"), + Region: maputil.GetString(options.ProviderServiceConfig, "region"), }) return deployer, err @@ -182,9 +183,9 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer deployer, err := pAliyunCASDeploy.NewDeployer(&pAliyunCASDeploy.DeployerConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.AccessKeySecret, - Region: maputil.GetString(options.ProviderExtendedConfig, "region"), - ResourceIds: sliceutil.Filter(strings.Split(maputil.GetString(options.ProviderExtendedConfig, "resourceIds"), ";"), func(s string) bool { return s != "" }), - ContactIds: sliceutil.Filter(strings.Split(maputil.GetString(options.ProviderExtendedConfig, "contactIds"), ";"), func(s string) bool { return s != "" }), + Region: maputil.GetString(options.ProviderServiceConfig, "region"), + ResourceIds: sliceutil.Filter(strings.Split(maputil.GetString(options.ProviderServiceConfig, "resourceIds"), ";"), func(s string) bool { return s != "" }), + ContactIds: sliceutil.Filter(strings.Split(maputil.GetString(options.ProviderServiceConfig, "contactIds"), ";"), func(s string) bool { return s != "" }), }) return deployer, err @@ -192,7 +193,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer deployer, err := pAliyunCDN.NewDeployer(&pAliyunCDN.DeployerConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.AccessKeySecret, - Domain: maputil.GetString(options.ProviderExtendedConfig, "domain"), + Domain: maputil.GetString(options.ProviderServiceConfig, "domain"), }) return deployer, err @@ -200,11 +201,11 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer deployer, err := pAliyunCLB.NewDeployer(&pAliyunCLB.DeployerConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.AccessKeySecret, - Region: maputil.GetString(options.ProviderExtendedConfig, "region"), - ResourceType: pAliyunCLB.ResourceType(maputil.GetString(options.ProviderExtendedConfig, "resourceType")), - LoadbalancerId: maputil.GetString(options.ProviderExtendedConfig, "loadbalancerId"), - ListenerPort: maputil.GetOrDefaultInt32(options.ProviderExtendedConfig, "listenerPort", 443), - Domain: maputil.GetString(options.ProviderExtendedConfig, "domain"), + Region: maputil.GetString(options.ProviderServiceConfig, "region"), + ResourceType: pAliyunCLB.ResourceType(maputil.GetString(options.ProviderServiceConfig, "resourceType")), + LoadbalancerId: maputil.GetString(options.ProviderServiceConfig, "loadbalancerId"), + ListenerPort: maputil.GetOrDefaultInt32(options.ProviderServiceConfig, "listenerPort", 443), + Domain: maputil.GetString(options.ProviderServiceConfig, "domain"), }) return deployer, err @@ -212,7 +213,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer deployer, err := pAliyunDCDN.NewDeployer(&pAliyunDCDN.DeployerConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.AccessKeySecret, - Domain: maputil.GetString(options.ProviderExtendedConfig, "domain"), + Domain: maputil.GetString(options.ProviderServiceConfig, "domain"), }) return deployer, err @@ -220,8 +221,8 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer deployer, err := pAliyunDDoS.NewDeployer(&pAliyunDDoS.DeployerConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.AccessKeySecret, - Region: maputil.GetString(options.ProviderExtendedConfig, "region"), - Domain: maputil.GetString(options.ProviderExtendedConfig, "domain"), + Region: maputil.GetString(options.ProviderServiceConfig, "region"), + Domain: maputil.GetString(options.ProviderServiceConfig, "domain"), }) return deployer, err @@ -229,8 +230,8 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer deployer, err := pAliyunESA.NewDeployer(&pAliyunESA.DeployerConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.AccessKeySecret, - Region: maputil.GetString(options.ProviderExtendedConfig, "region"), - SiteId: maputil.GetInt64(options.ProviderExtendedConfig, "siteId"), + Region: maputil.GetString(options.ProviderServiceConfig, "region"), + SiteId: maputil.GetInt64(options.ProviderServiceConfig, "siteId"), }) return deployer, err @@ -238,9 +239,20 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer deployer, err := pAliyunFC.NewDeployer(&pAliyunFC.DeployerConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.AccessKeySecret, - Region: maputil.GetString(options.ProviderExtendedConfig, "region"), - ServiceVersion: maputil.GetOrDefaultString(options.ProviderExtendedConfig, "serviceVersion", "3.0"), - Domain: maputil.GetString(options.ProviderExtendedConfig, "domain"), + Region: maputil.GetString(options.ProviderServiceConfig, "region"), + ServiceVersion: maputil.GetOrDefaultString(options.ProviderServiceConfig, "serviceVersion", "3.0"), + Domain: maputil.GetString(options.ProviderServiceConfig, "domain"), + }) + return deployer, err + + case domain.DeploymentProviderTypeAliyunGA: + deployer, err := pAliyunGA.NewDeployer(&pAliyunGA.DeployerConfig{ + AccessKeyId: access.AccessKeyId, + AccessKeySecret: access.AccessKeySecret, + ResourceType: pAliyunGA.ResourceType(maputil.GetString(options.ProviderServiceConfig, "resourceType")), + AcceleratorId: maputil.GetString(options.ProviderServiceConfig, "acceleratorId"), + ListenerId: maputil.GetString(options.ProviderServiceConfig, "listenerId"), + Domain: maputil.GetString(options.ProviderServiceConfig, "domain"), }) return deployer, err @@ -248,8 +260,8 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer deployer, err := pAliyunLive.NewDeployer(&pAliyunLive.DeployerConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.AccessKeySecret, - Region: maputil.GetString(options.ProviderExtendedConfig, "region"), - Domain: maputil.GetString(options.ProviderExtendedConfig, "domain"), + Region: maputil.GetString(options.ProviderServiceConfig, "region"), + Domain: maputil.GetString(options.ProviderServiceConfig, "domain"), }) return deployer, err @@ -257,10 +269,10 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer deployer, err := pAliyunNLB.NewDeployer(&pAliyunNLB.DeployerConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.AccessKeySecret, - Region: maputil.GetString(options.ProviderExtendedConfig, "region"), - ResourceType: pAliyunNLB.ResourceType(maputil.GetString(options.ProviderExtendedConfig, "resourceType")), - LoadbalancerId: maputil.GetString(options.ProviderExtendedConfig, "loadbalancerId"), - ListenerId: maputil.GetString(options.ProviderExtendedConfig, "listenerId"), + Region: maputil.GetString(options.ProviderServiceConfig, "region"), + ResourceType: pAliyunNLB.ResourceType(maputil.GetString(options.ProviderServiceConfig, "resourceType")), + LoadbalancerId: maputil.GetString(options.ProviderServiceConfig, "loadbalancerId"), + ListenerId: maputil.GetString(options.ProviderServiceConfig, "listenerId"), }) return deployer, err @@ -268,9 +280,9 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer deployer, err := pAliyunOSS.NewDeployer(&pAliyunOSS.DeployerConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.AccessKeySecret, - Region: maputil.GetString(options.ProviderExtendedConfig, "region"), - Bucket: maputil.GetString(options.ProviderExtendedConfig, "bucket"), - Domain: maputil.GetString(options.ProviderExtendedConfig, "domain"), + Region: maputil.GetString(options.ProviderServiceConfig, "region"), + Bucket: maputil.GetString(options.ProviderServiceConfig, "bucket"), + Domain: maputil.GetString(options.ProviderServiceConfig, "domain"), }) return deployer, err @@ -278,8 +290,8 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer deployer, err := pAliyunVOD.NewDeployer(&pAliyunVOD.DeployerConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.AccessKeySecret, - Region: maputil.GetString(options.ProviderExtendedConfig, "region"), - Domain: maputil.GetString(options.ProviderExtendedConfig, "domain"), + Region: maputil.GetString(options.ProviderServiceConfig, "region"), + Domain: maputil.GetString(options.ProviderServiceConfig, "domain"), }) return deployer, err @@ -287,10 +299,10 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer deployer, err := pAliyunWAF.NewDeployer(&pAliyunWAF.DeployerConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.AccessKeySecret, - Region: maputil.GetString(options.ProviderExtendedConfig, "region"), - ServiceVersion: maputil.GetOrDefaultString(options.ProviderExtendedConfig, "serviceVersion", "3.0"), - InstanceId: maputil.GetString(options.ProviderExtendedConfig, "instanceId"), - Domain: maputil.GetString(options.ProviderExtendedConfig, "domain"), + Region: maputil.GetString(options.ProviderServiceConfig, "region"), + ServiceVersion: maputil.GetOrDefaultString(options.ProviderServiceConfig, "serviceVersion", "3.0"), + InstanceId: maputil.GetString(options.ProviderServiceConfig, "instanceId"), + Domain: maputil.GetString(options.ProviderServiceConfig, "domain"), }) return deployer, err @@ -311,8 +323,8 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer deployer, err := pAWSACM.NewDeployer(&pAWSACM.DeployerConfig{ AccessKeyId: access.AccessKeyId, SecretAccessKey: access.SecretAccessKey, - Region: maputil.GetString(options.ProviderExtendedConfig, "region"), - CertificateArn: maputil.GetString(options.ProviderExtendedConfig, "certificateArn"), + Region: maputil.GetString(options.ProviderServiceConfig, "region"), + CertificateArn: maputil.GetString(options.ProviderServiceConfig, "certificateArn"), }) return deployer, err @@ -320,8 +332,8 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer deployer, err := pAWSCloudFront.NewDeployer(&pAWSCloudFront.DeployerConfig{ AccessKeyId: access.AccessKeyId, SecretAccessKey: access.SecretAccessKey, - Region: maputil.GetString(options.ProviderExtendedConfig, "region"), - DistributionId: maputil.GetString(options.ProviderExtendedConfig, "distributionId"), + Region: maputil.GetString(options.ProviderServiceConfig, "region"), + DistributionId: maputil.GetString(options.ProviderServiceConfig, "distributionId"), }) return deployer, err @@ -344,8 +356,8 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer ClientId: access.ClientId, ClientSecret: access.ClientSecret, CloudName: access.CloudName, - KeyVaultName: maputil.GetString(options.ProviderExtendedConfig, "keyvaultName"), - CertificateName: maputil.GetString(options.ProviderExtendedConfig, "certificateName"), + KeyVaultName: maputil.GetString(options.ProviderServiceConfig, "keyvaultName"), + CertificateName: maputil.GetString(options.ProviderServiceConfig, "certificateName"), }) return deployer, err @@ -366,11 +378,11 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer deployer, err := pBaiduCloudAppBLB.NewDeployer(&pBaiduCloudAppBLB.DeployerConfig{ AccessKeyId: access.AccessKeyId, SecretAccessKey: access.SecretAccessKey, - Region: maputil.GetString(options.ProviderExtendedConfig, "region"), - ResourceType: pBaiduCloudAppBLB.ResourceType(maputil.GetString(options.ProviderExtendedConfig, "resourceType")), - LoadbalancerId: maputil.GetString(options.ProviderExtendedConfig, "loadbalancerId"), - ListenerPort: maputil.GetInt32(options.ProviderExtendedConfig, "listenerPort"), - Domain: maputil.GetString(options.ProviderExtendedConfig, "domain"), + Region: maputil.GetString(options.ProviderServiceConfig, "region"), + ResourceType: pBaiduCloudAppBLB.ResourceType(maputil.GetString(options.ProviderServiceConfig, "resourceType")), + LoadbalancerId: maputil.GetString(options.ProviderServiceConfig, "loadbalancerId"), + ListenerPort: maputil.GetInt32(options.ProviderServiceConfig, "listenerPort"), + Domain: maputil.GetString(options.ProviderServiceConfig, "domain"), }) return deployer, err @@ -378,11 +390,11 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer deployer, err := pBaiduCloudBLB.NewDeployer(&pBaiduCloudBLB.DeployerConfig{ AccessKeyId: access.AccessKeyId, SecretAccessKey: access.SecretAccessKey, - Region: maputil.GetString(options.ProviderExtendedConfig, "region"), - ResourceType: pBaiduCloudBLB.ResourceType(maputil.GetString(options.ProviderExtendedConfig, "resourceType")), - LoadbalancerId: maputil.GetString(options.ProviderExtendedConfig, "loadbalancerId"), - ListenerPort: maputil.GetInt32(options.ProviderExtendedConfig, "listenerPort"), - Domain: maputil.GetString(options.ProviderExtendedConfig, "domain"), + Region: maputil.GetString(options.ProviderServiceConfig, "region"), + ResourceType: pBaiduCloudBLB.ResourceType(maputil.GetString(options.ProviderServiceConfig, "resourceType")), + LoadbalancerId: maputil.GetString(options.ProviderServiceConfig, "loadbalancerId"), + ListenerPort: maputil.GetInt32(options.ProviderServiceConfig, "listenerPort"), + Domain: maputil.GetString(options.ProviderServiceConfig, "domain"), }) return deployer, err @@ -390,7 +402,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer deployer, err := pBaiduCloudCDN.NewDeployer(&pBaiduCloudCDN.DeployerConfig{ AccessKeyId: access.AccessKeyId, SecretAccessKey: access.SecretAccessKey, - Domain: maputil.GetString(options.ProviderExtendedConfig, "domain"), + Domain: maputil.GetString(options.ProviderServiceConfig, "domain"), }) return deployer, err @@ -417,8 +429,8 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer case domain.DeploymentProviderTypeBaishanCDN: deployer, err := pBaishanCDN.NewDeployer(&pBaishanCDN.DeployerConfig{ ApiToken: access.ApiToken, - Domain: maputil.GetString(options.ProviderExtendedConfig, "domain"), - CertificateId: maputil.GetString(options.ProviderExtendedConfig, "certificateId"), + Domain: maputil.GetString(options.ProviderServiceConfig, "domain"), + CertificateId: maputil.GetString(options.ProviderServiceConfig, "certificateId"), }) return deployer, err @@ -440,7 +452,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer ApiUrl: access.ApiUrl, ApiKey: access.ApiKey, AllowInsecureConnections: access.AllowInsecureConnections, - AutoRestart: maputil.GetBool(options.ProviderExtendedConfig, "autoRestart"), + AutoRestart: maputil.GetBool(options.ProviderServiceConfig, "autoRestart"), }) return deployer, err @@ -449,9 +461,9 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer ApiUrl: access.ApiUrl, ApiKey: access.ApiKey, AllowInsecureConnections: access.AllowInsecureConnections, - SiteType: maputil.GetOrDefaultString(options.ProviderExtendedConfig, "siteType", "other"), - SiteName: maputil.GetString(options.ProviderExtendedConfig, "siteName"), - SiteNames: sliceutil.Filter(strings.Split(maputil.GetString(options.ProviderExtendedConfig, "siteNames"), ";"), func(s string) bool { return s != "" }), + SiteType: maputil.GetOrDefaultString(options.ProviderServiceConfig, "siteType", "other"), + SiteName: maputil.GetString(options.ProviderServiceConfig, "siteName"), + SiteNames: sliceutil.Filter(strings.Split(maputil.GetString(options.ProviderServiceConfig, "siteNames"), ";"), func(s string) bool { return s != "" }), }) return deployer, err @@ -469,8 +481,8 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer deployer, err := pBunnyCDN.NewDeployer(&pBunnyCDN.DeployerConfig{ ApiKey: access.ApiKey, - PullZoneId: maputil.GetString(options.ProviderExtendedConfig, "pullZoneId"), - Hostname: maputil.GetString(options.ProviderExtendedConfig, "hostname"), + PullZoneId: maputil.GetString(options.ProviderServiceConfig, "pullZoneId"), + Hostname: maputil.GetString(options.ProviderServiceConfig, "hostname"), }) return deployer, err } @@ -487,7 +499,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer deployer, err := pBytePlusCDN.NewDeployer(&pBytePlusCDN.DeployerConfig{ AccessKey: access.AccessKey, SecretKey: access.SecretKey, - Domain: maputil.GetString(options.ProviderExtendedConfig, "domain"), + Domain: maputil.GetString(options.ProviderServiceConfig, "domain"), }) return deployer, err @@ -521,9 +533,9 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer ApiKey: access.ApiKey, ApiSecret: access.ApiSecret, AllowInsecureConnections: access.AllowInsecureConnections, - ResourceType: pCdnfly.ResourceType(maputil.GetOrDefaultString(options.ProviderExtendedConfig, "resourceType", string(pCdnfly.RESOURCE_TYPE_SITE))), - SiteId: maputil.GetString(options.ProviderExtendedConfig, "siteId"), - CertificateId: maputil.GetString(options.ProviderExtendedConfig, "certificateId"), + ResourceType: pCdnfly.ResourceType(maputil.GetOrDefaultString(options.ProviderServiceConfig, "resourceType", string(pCdnfly.RESOURCE_TYPE_SITE))), + SiteId: maputil.GetString(options.ProviderServiceConfig, "siteId"), + CertificateId: maputil.GetString(options.ProviderServiceConfig, "certificateId"), }) return deployer, err } @@ -538,7 +550,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer deployer, err := pDogeCDN.NewDeployer(&pDogeCDN.DeployerConfig{ AccessKey: access.AccessKey, SecretKey: access.SecretKey, - Domain: maputil.GetString(options.ProviderExtendedConfig, "domain"), + Domain: maputil.GetString(options.ProviderServiceConfig, "domain"), }) return deployer, err } @@ -553,7 +565,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer deployer, err := pEdgioApplications.NewDeployer(&pEdgioApplications.DeployerConfig{ ClientId: access.ClientId, ClientSecret: access.ClientSecret, - EnvironmentId: maputil.GetString(options.ProviderExtendedConfig, "environmentId"), + EnvironmentId: maputil.GetString(options.ProviderServiceConfig, "environmentId"), }) return deployer, err } @@ -571,8 +583,8 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer AccessKeyId: access.AccessKeyId, AccessKey: access.AccessKey, AllowInsecureConnections: access.AllowInsecureConnections, - ResourceType: pFlexCDN.ResourceType(maputil.GetString(options.ProviderExtendedConfig, "resourceType")), - CertificateId: maputil.GetInt64(options.ProviderExtendedConfig, "certificateId"), + ResourceType: pFlexCDN.ResourceType(maputil.GetString(options.ProviderServiceConfig, "resourceType")), + CertificateId: maputil.GetInt64(options.ProviderServiceConfig, "certificateId"), }) return deployer, err } @@ -588,8 +600,8 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer case domain.DeploymentProviderTypeGcoreCDN: deployer, err := pGcoreCDN.NewDeployer(&pGcoreCDN.DeployerConfig{ ApiToken: access.ApiToken, - ResourceId: maputil.GetInt64(options.ProviderExtendedConfig, "resourceId"), - CertificateId: maputil.GetInt64(options.ProviderExtendedConfig, "certificateId"), + ResourceId: maputil.GetInt64(options.ProviderServiceConfig, "resourceId"), + CertificateId: maputil.GetInt64(options.ProviderServiceConfig, "certificateId"), }) return deployer, err @@ -611,8 +623,8 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer AccessKeyId: access.AccessKeyId, AccessKey: access.AccessKey, AllowInsecureConnections: access.AllowInsecureConnections, - ResourceType: pGoEdge.ResourceType(maputil.GetString(options.ProviderExtendedConfig, "resourceType")), - CertificateId: maputil.GetInt64(options.ProviderExtendedConfig, "certificateId"), + ResourceType: pGoEdge.ResourceType(maputil.GetString(options.ProviderServiceConfig, "resourceType")), + CertificateId: maputil.GetInt64(options.ProviderServiceConfig, "certificateId"), }) return deployer, err } @@ -629,8 +641,8 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer deployer, err := pHuaweiCloudCDN.NewDeployer(&pHuaweiCloudCDN.DeployerConfig{ AccessKeyId: access.AccessKeyId, SecretAccessKey: access.SecretAccessKey, - Region: maputil.GetString(options.ProviderExtendedConfig, "region"), - Domain: maputil.GetString(options.ProviderExtendedConfig, "domain"), + Region: maputil.GetString(options.ProviderServiceConfig, "region"), + Domain: maputil.GetString(options.ProviderServiceConfig, "domain"), }) return deployer, err @@ -638,11 +650,11 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer deployer, err := pHuaweiCloudELB.NewDeployer(&pHuaweiCloudELB.DeployerConfig{ AccessKeyId: access.AccessKeyId, SecretAccessKey: access.SecretAccessKey, - Region: maputil.GetString(options.ProviderExtendedConfig, "region"), - ResourceType: pHuaweiCloudELB.ResourceType(maputil.GetString(options.ProviderExtendedConfig, "resourceType")), - CertificateId: maputil.GetString(options.ProviderExtendedConfig, "certificateId"), - LoadbalancerId: maputil.GetString(options.ProviderExtendedConfig, "loadbalancerId"), - ListenerId: maputil.GetString(options.ProviderExtendedConfig, "listenerId"), + Region: maputil.GetString(options.ProviderServiceConfig, "region"), + ResourceType: pHuaweiCloudELB.ResourceType(maputil.GetString(options.ProviderServiceConfig, "resourceType")), + CertificateId: maputil.GetString(options.ProviderServiceConfig, "certificateId"), + LoadbalancerId: maputil.GetString(options.ProviderServiceConfig, "loadbalancerId"), + ListenerId: maputil.GetString(options.ProviderServiceConfig, "listenerId"), }) return deployer, err @@ -657,10 +669,10 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer deployer, err := pHuaweiCloudWAF.NewDeployer(&pHuaweiCloudWAF.DeployerConfig{ AccessKeyId: access.AccessKeyId, SecretAccessKey: access.SecretAccessKey, - Region: maputil.GetString(options.ProviderExtendedConfig, "region"), - ResourceType: pHuaweiCloudWAF.ResourceType(maputil.GetString(options.ProviderExtendedConfig, "resourceType")), - CertificateId: maputil.GetString(options.ProviderExtendedConfig, "certificateId"), - Domain: maputil.GetString(options.ProviderExtendedConfig, "domain"), + Region: maputil.GetString(options.ProviderServiceConfig, "region"), + ResourceType: pHuaweiCloudWAF.ResourceType(maputil.GetString(options.ProviderServiceConfig, "resourceType")), + CertificateId: maputil.GetString(options.ProviderServiceConfig, "certificateId"), + Domain: maputil.GetString(options.ProviderServiceConfig, "domain"), }) return deployer, err @@ -681,10 +693,10 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer deployer, err := pJDCloudALB.NewDeployer(&pJDCloudALB.DeployerConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.AccessKeySecret, - RegionId: maputil.GetString(options.ProviderExtendedConfig, "regionId"), - ResourceType: pJDCloudALB.ResourceType(maputil.GetString(options.ProviderExtendedConfig, "resourceType")), - LoadbalancerId: maputil.GetString(options.ProviderExtendedConfig, "loadbalancerId"), - ListenerId: maputil.GetString(options.ProviderExtendedConfig, "listenerId"), + RegionId: maputil.GetString(options.ProviderServiceConfig, "regionId"), + ResourceType: pJDCloudALB.ResourceType(maputil.GetString(options.ProviderServiceConfig, "resourceType")), + LoadbalancerId: maputil.GetString(options.ProviderServiceConfig, "loadbalancerId"), + ListenerId: maputil.GetString(options.ProviderServiceConfig, "listenerId"), }) return deployer, err @@ -692,7 +704,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer deployer, err := pJDCloudCDN.NewDeployer(&pJDCloudCDN.DeployerConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.AccessKeySecret, - Domain: maputil.GetString(options.ProviderExtendedConfig, "domain"), + Domain: maputil.GetString(options.ProviderServiceConfig, "domain"), }) return deployer, err @@ -700,7 +712,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer deployer, err := pJDCloudLive.NewDeployer(&pJDCloudLive.DeployerConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.AccessKeySecret, - Domain: maputil.GetString(options.ProviderExtendedConfig, "domain"), + Domain: maputil.GetString(options.ProviderServiceConfig, "domain"), }) return deployer, err @@ -708,7 +720,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer deployer, err := pJDCloudVOD.NewDeployer(&pJDCloudVOD.DeployerConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.AccessKeySecret, - Domain: maputil.GetString(options.ProviderExtendedConfig, "domain"), + Domain: maputil.GetString(options.ProviderServiceConfig, "domain"), }) return deployer, err @@ -720,18 +732,18 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer case domain.DeploymentProviderTypeLocal: { deployer, err := pLocal.NewDeployer(&pLocal.DeployerConfig{ - ShellEnv: pLocal.ShellEnvType(maputil.GetString(options.ProviderExtendedConfig, "shellEnv")), - PreCommand: maputil.GetString(options.ProviderExtendedConfig, "preCommand"), - PostCommand: maputil.GetString(options.ProviderExtendedConfig, "postCommand"), - OutputFormat: pLocal.OutputFormatType(maputil.GetOrDefaultString(options.ProviderExtendedConfig, "format", string(pLocal.OUTPUT_FORMAT_PEM))), - OutputCertPath: maputil.GetString(options.ProviderExtendedConfig, "certPath"), - OutputServerCertPath: maputil.GetString(options.ProviderExtendedConfig, "certPathForServerOnly"), - OutputIntermediaCertPath: maputil.GetString(options.ProviderExtendedConfig, "certPathForIntermediaOnly"), - OutputKeyPath: maputil.GetString(options.ProviderExtendedConfig, "keyPath"), - PfxPassword: maputil.GetString(options.ProviderExtendedConfig, "pfxPassword"), - JksAlias: maputil.GetString(options.ProviderExtendedConfig, "jksAlias"), - JksKeypass: maputil.GetString(options.ProviderExtendedConfig, "jksKeypass"), - JksStorepass: maputil.GetString(options.ProviderExtendedConfig, "jksStorepass"), + ShellEnv: pLocal.ShellEnvType(maputil.GetString(options.ProviderServiceConfig, "shellEnv")), + PreCommand: maputil.GetString(options.ProviderServiceConfig, "preCommand"), + PostCommand: maputil.GetString(options.ProviderServiceConfig, "postCommand"), + OutputFormat: pLocal.OutputFormatType(maputil.GetOrDefaultString(options.ProviderServiceConfig, "format", string(pLocal.OUTPUT_FORMAT_PEM))), + OutputCertPath: maputil.GetString(options.ProviderServiceConfig, "certPath"), + OutputServerCertPath: maputil.GetString(options.ProviderServiceConfig, "certPathForServerOnly"), + OutputIntermediaCertPath: maputil.GetString(options.ProviderServiceConfig, "certPathForIntermediaOnly"), + OutputKeyPath: maputil.GetString(options.ProviderServiceConfig, "keyPath"), + PfxPassword: maputil.GetString(options.ProviderServiceConfig, "pfxPassword"), + JksAlias: maputil.GetString(options.ProviderServiceConfig, "jksAlias"), + JksKeypass: maputil.GetString(options.ProviderServiceConfig, "jksKeypass"), + JksStorepass: maputil.GetString(options.ProviderServiceConfig, "jksStorepass"), }) return deployer, err } @@ -745,11 +757,11 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer deployer, err := pK8sSecret.NewDeployer(&pK8sSecret.DeployerConfig{ KubeConfig: access.KubeConfig, - Namespace: maputil.GetOrDefaultString(options.ProviderExtendedConfig, "namespace", "default"), - SecretName: maputil.GetString(options.ProviderExtendedConfig, "secretName"), - SecretType: maputil.GetOrDefaultString(options.ProviderExtendedConfig, "secretType", "kubernetes.io/tls"), - SecretDataKeyForCrt: maputil.GetOrDefaultString(options.ProviderExtendedConfig, "secretDataKeyForCrt", "tls.crt"), - SecretDataKeyForKey: maputil.GetOrDefaultString(options.ProviderExtendedConfig, "secretDataKeyForKey", "tls.key"), + Namespace: maputil.GetOrDefaultString(options.ProviderServiceConfig, "namespace", "default"), + SecretName: maputil.GetString(options.ProviderServiceConfig, "secretName"), + SecretType: maputil.GetOrDefaultString(options.ProviderServiceConfig, "secretType", "kubernetes.io/tls"), + SecretDataKeyForCrt: maputil.GetOrDefaultString(options.ProviderServiceConfig, "secretDataKeyForCrt", "tls.crt"), + SecretDataKeyForKey: maputil.GetOrDefaultString(options.ProviderServiceConfig, "secretDataKeyForKey", "tls.key"), }) return deployer, err } @@ -763,7 +775,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer deployer, err := pNetlifySite.NewDeployer(&pNetlifySite.DeployerConfig{ ApiToken: access.ApiToken, - SiteId: maputil.GetString(options.ProviderExtendedConfig, "siteId"), + SiteId: maputil.GetString(options.ProviderServiceConfig, "siteId"), }) return deployer, err } @@ -780,8 +792,8 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer ApiToken: access.ApiToken, ApiTokenSecret: access.ApiTokenSecret, AllowInsecureConnections: access.AllowInsecureConnections, - NodeName: maputil.GetString(options.ProviderExtendedConfig, "nodeName"), - AutoRestart: maputil.GetBool(options.ProviderExtendedConfig, "autoRestart"), + NodeName: maputil.GetString(options.ProviderServiceConfig, "nodeName"), + AutoRestart: maputil.GetBool(options.ProviderServiceConfig, "autoRestart"), }) return deployer, err } @@ -798,7 +810,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer deployer, err := pQiniuCDN.NewDeployer(&pQiniuCDN.DeployerConfig{ AccessKey: access.AccessKey, SecretKey: access.SecretKey, - Domain: maputil.GetString(options.ProviderExtendedConfig, "domain"), + Domain: maputil.GetString(options.ProviderServiceConfig, "domain"), }) return deployer, err @@ -806,8 +818,8 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer deployer, err := pQiniuPili.NewDeployer(&pQiniuPili.DeployerConfig{ AccessKey: access.AccessKey, SecretKey: access.SecretKey, - Hub: maputil.GetString(options.ProviderExtendedConfig, "hub"), - Domain: maputil.GetString(options.ProviderExtendedConfig, "domain"), + Hub: maputil.GetString(options.ProviderServiceConfig, "hub"), + Domain: maputil.GetString(options.ProviderServiceConfig, "domain"), }) return deployer, err @@ -827,8 +839,8 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer case domain.DeploymentProviderTypeTencentCloudCDN: deployer, err := pRainYunRCDN.NewDeployer(&pRainYunRCDN.DeployerConfig{ ApiKey: access.ApiKey, - InstanceId: maputil.GetInt32(options.ProviderExtendedConfig, "instanceId"), - Domain: maputil.GetString(options.ProviderExtendedConfig, "domain"), + InstanceId: maputil.GetInt32(options.ProviderServiceConfig, "instanceId"), + Domain: maputil.GetString(options.ProviderServiceConfig, "domain"), }) return deployer, err @@ -860,7 +872,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer AccessTokenId: access.AccessTokenId, AccessToken: access.AccessToken, AllowInsecureConnections: access.AllowInsecureConnections, - SiteName: maputil.GetString(options.ProviderExtendedConfig, "siteName"), + SiteName: maputil.GetString(options.ProviderServiceConfig, "siteName"), }) return deployer, err @@ -880,8 +892,8 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer ApiUrl: access.ApiUrl, ApiToken: access.ApiToken, AllowInsecureConnections: access.AllowInsecureConnections, - ResourceType: pSafeLine.ResourceType(maputil.GetString(options.ProviderExtendedConfig, "resourceType")), - CertificateId: maputil.GetInt32(options.ProviderExtendedConfig, "certificateId"), + ResourceType: pSafeLine.ResourceType(maputil.GetString(options.ProviderServiceConfig, "resourceType")), + CertificateId: maputil.GetInt32(options.ProviderServiceConfig, "certificateId"), }) return deployer, err } @@ -900,18 +912,18 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer SshPassword: access.Password, SshKey: access.Key, SshKeyPassphrase: access.KeyPassphrase, - UseSCP: maputil.GetBool(options.ProviderExtendedConfig, "useSCP"), - PreCommand: maputil.GetString(options.ProviderExtendedConfig, "preCommand"), - PostCommand: maputil.GetString(options.ProviderExtendedConfig, "postCommand"), - OutputFormat: pSSH.OutputFormatType(maputil.GetOrDefaultString(options.ProviderExtendedConfig, "format", string(pSSH.OUTPUT_FORMAT_PEM))), - OutputCertPath: maputil.GetString(options.ProviderExtendedConfig, "certPath"), - OutputServerCertPath: maputil.GetString(options.ProviderExtendedConfig, "certPathForServerOnly"), - OutputIntermediaCertPath: maputil.GetString(options.ProviderExtendedConfig, "certPathForIntermediaOnly"), - OutputKeyPath: maputil.GetString(options.ProviderExtendedConfig, "keyPath"), - PfxPassword: maputil.GetString(options.ProviderExtendedConfig, "pfxPassword"), - JksAlias: maputil.GetString(options.ProviderExtendedConfig, "jksAlias"), - JksKeypass: maputil.GetString(options.ProviderExtendedConfig, "jksKeypass"), - JksStorepass: maputil.GetString(options.ProviderExtendedConfig, "jksStorepass"), + UseSCP: maputil.GetBool(options.ProviderServiceConfig, "useSCP"), + PreCommand: maputil.GetString(options.ProviderServiceConfig, "preCommand"), + PostCommand: maputil.GetString(options.ProviderServiceConfig, "postCommand"), + OutputFormat: pSSH.OutputFormatType(maputil.GetOrDefaultString(options.ProviderServiceConfig, "format", string(pSSH.OUTPUT_FORMAT_PEM))), + OutputCertPath: maputil.GetString(options.ProviderServiceConfig, "certPath"), + OutputServerCertPath: maputil.GetString(options.ProviderServiceConfig, "certPathForServerOnly"), + OutputIntermediaCertPath: maputil.GetString(options.ProviderServiceConfig, "certPathForIntermediaOnly"), + OutputKeyPath: maputil.GetString(options.ProviderServiceConfig, "keyPath"), + PfxPassword: maputil.GetString(options.ProviderServiceConfig, "pfxPassword"), + JksAlias: maputil.GetString(options.ProviderServiceConfig, "jksAlias"), + JksKeypass: maputil.GetString(options.ProviderServiceConfig, "jksKeypass"), + JksStorepass: maputil.GetString(options.ProviderServiceConfig, "jksStorepass"), }) return deployer, err } @@ -928,7 +940,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer deployer, err := pTencentCloudCDN.NewDeployer(&pTencentCloudCDN.DeployerConfig{ SecretId: access.SecretId, SecretKey: access.SecretKey, - Domain: maputil.GetString(options.ProviderExtendedConfig, "domain"), + Domain: maputil.GetString(options.ProviderServiceConfig, "domain"), }) return deployer, err @@ -936,11 +948,11 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer deployer, err := pTencentCloudCLB.NewDeployer(&pTencentCloudCLB.DeployerConfig{ SecretId: access.SecretId, SecretKey: access.SecretKey, - Region: maputil.GetString(options.ProviderExtendedConfig, "region"), - ResourceType: pTencentCloudCLB.ResourceType(maputil.GetString(options.ProviderExtendedConfig, "resourceType")), - LoadbalancerId: maputil.GetString(options.ProviderExtendedConfig, "loadbalancerId"), - ListenerId: maputil.GetString(options.ProviderExtendedConfig, "listenerId"), - Domain: maputil.GetString(options.ProviderExtendedConfig, "domain"), + Region: maputil.GetString(options.ProviderServiceConfig, "region"), + ResourceType: pTencentCloudCLB.ResourceType(maputil.GetString(options.ProviderServiceConfig, "resourceType")), + LoadbalancerId: maputil.GetString(options.ProviderServiceConfig, "loadbalancerId"), + ListenerId: maputil.GetString(options.ProviderServiceConfig, "listenerId"), + Domain: maputil.GetString(options.ProviderServiceConfig, "domain"), }) return deployer, err @@ -948,9 +960,9 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer deployer, err := pTencentCloudCOS.NewDeployer(&pTencentCloudCOS.DeployerConfig{ SecretId: access.SecretId, SecretKey: access.SecretKey, - Region: maputil.GetString(options.ProviderExtendedConfig, "region"), - Bucket: maputil.GetString(options.ProviderExtendedConfig, "bucket"), - Domain: maputil.GetString(options.ProviderExtendedConfig, "domain"), + Region: maputil.GetString(options.ProviderServiceConfig, "region"), + Bucket: maputil.GetString(options.ProviderServiceConfig, "bucket"), + Domain: maputil.GetString(options.ProviderServiceConfig, "domain"), }) return deployer, err @@ -958,7 +970,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer deployer, err := pTencentCloudCSS.NewDeployer(&pTencentCloudCSS.DeployerConfig{ SecretId: access.SecretId, SecretKey: access.SecretKey, - Domain: maputil.GetString(options.ProviderExtendedConfig, "domain"), + Domain: maputil.GetString(options.ProviderServiceConfig, "domain"), }) return deployer, err @@ -966,7 +978,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer deployer, err := pTencentCloudECDN.NewDeployer(&pTencentCloudECDN.DeployerConfig{ SecretId: access.SecretId, SecretKey: access.SecretKey, - Domain: maputil.GetString(options.ProviderExtendedConfig, "domain"), + Domain: maputil.GetString(options.ProviderServiceConfig, "domain"), }) return deployer, err @@ -974,8 +986,8 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer deployer, err := pTencentCloudEO.NewDeployer(&pTencentCloudEO.DeployerConfig{ SecretId: access.SecretId, SecretKey: access.SecretKey, - ZoneId: maputil.GetString(options.ProviderExtendedConfig, "zoneId"), - Domain: maputil.GetString(options.ProviderExtendedConfig, "domain"), + ZoneId: maputil.GetString(options.ProviderServiceConfig, "zoneId"), + Domain: maputil.GetString(options.ProviderServiceConfig, "domain"), }) return deployer, err @@ -983,8 +995,8 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer deployer, err := pTencentCloudSCF.NewDeployer(&pTencentCloudSCF.DeployerConfig{ SecretId: access.SecretId, SecretKey: access.SecretKey, - Region: maputil.GetString(options.ProviderExtendedConfig, "region"), - Domain: maputil.GetString(options.ProviderExtendedConfig, "domain"), + Region: maputil.GetString(options.ProviderServiceConfig, "region"), + Domain: maputil.GetString(options.ProviderServiceConfig, "domain"), }) return deployer, err @@ -999,9 +1011,9 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer deployer, err := pTencentCloudSSLDeploy.NewDeployer(&pTencentCloudSSLDeploy.DeployerConfig{ SecretId: access.SecretId, SecretKey: access.SecretKey, - Region: maputil.GetString(options.ProviderExtendedConfig, "region"), - ResourceType: maputil.GetString(options.ProviderExtendedConfig, "resourceType"), - ResourceIds: sliceutil.Filter(strings.Split(maputil.GetString(options.ProviderExtendedConfig, "resourceIds"), ";"), func(s string) bool { return s != "" }), + Region: maputil.GetString(options.ProviderServiceConfig, "region"), + ResourceType: maputil.GetString(options.ProviderServiceConfig, "resourceType"), + ResourceIds: sliceutil.Filter(strings.Split(maputil.GetString(options.ProviderServiceConfig, "resourceIds"), ";"), func(s string) bool { return s != "" }), }) return deployer, err @@ -1009,8 +1021,8 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer deployer, err := pTencentCloudVOD.NewDeployer(&pTencentCloudVOD.DeployerConfig{ SecretId: access.SecretId, SecretKey: access.SecretKey, - SubAppId: maputil.GetInt64(options.ProviderExtendedConfig, "subAppId"), - Domain: maputil.GetString(options.ProviderExtendedConfig, "domain"), + SubAppId: maputil.GetInt64(options.ProviderServiceConfig, "subAppId"), + Domain: maputil.GetString(options.ProviderServiceConfig, "domain"), }) return deployer, err @@ -1018,9 +1030,9 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer deployer, err := pTencentCloudWAF.NewDeployer(&pTencentCloudWAF.DeployerConfig{ SecretId: access.SecretId, SecretKey: access.SecretKey, - Domain: maputil.GetString(options.ProviderExtendedConfig, "domain"), - DomainId: maputil.GetString(options.ProviderExtendedConfig, "domainId"), - InstanceId: maputil.GetString(options.ProviderExtendedConfig, "instanceId"), + Domain: maputil.GetString(options.ProviderServiceConfig, "domain"), + DomainId: maputil.GetString(options.ProviderServiceConfig, "domainId"), + InstanceId: maputil.GetString(options.ProviderServiceConfig, "instanceId"), }) return deployer, err @@ -1042,7 +1054,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer PrivateKey: access.PrivateKey, PublicKey: access.PublicKey, ProjectId: access.ProjectId, - DomainId: maputil.GetString(options.ProviderExtendedConfig, "domainId"), + DomainId: maputil.GetString(options.ProviderServiceConfig, "domainId"), }) return deployer, err @@ -1051,9 +1063,9 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer PrivateKey: access.PrivateKey, PublicKey: access.PublicKey, ProjectId: access.ProjectId, - Region: maputil.GetString(options.ProviderExtendedConfig, "region"), - Bucket: maputil.GetString(options.ProviderExtendedConfig, "bucket"), - Domain: maputil.GetString(options.ProviderExtendedConfig, "domain"), + Region: maputil.GetString(options.ProviderServiceConfig, "region"), + Bucket: maputil.GetString(options.ProviderServiceConfig, "bucket"), + Domain: maputil.GetString(options.ProviderServiceConfig, "domain"), }) return deployer, err @@ -1074,7 +1086,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer deployer, err := pUpyunCDN.NewDeployer(&pUpyunCDN.DeployerConfig{ Username: access.Username, Password: access.Password, - Domain: maputil.GetString(options.ProviderExtendedConfig, "domain"), + Domain: maputil.GetString(options.ProviderServiceConfig, "domain"), }) return deployer, err @@ -1095,11 +1107,11 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer deployer, err := pVolcEngineALB.NewDeployer(&pVolcEngineALB.DeployerConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.SecretAccessKey, - Region: maputil.GetString(options.ProviderExtendedConfig, "region"), - ResourceType: pVolcEngineALB.ResourceType(maputil.GetString(options.ProviderExtendedConfig, "resourceType")), - LoadbalancerId: maputil.GetString(options.ProviderExtendedConfig, "loadbalancerId"), - ListenerId: maputil.GetString(options.ProviderExtendedConfig, "listenerId"), - Domain: maputil.GetString(options.ProviderExtendedConfig, "domain"), + Region: maputil.GetString(options.ProviderServiceConfig, "region"), + ResourceType: pVolcEngineALB.ResourceType(maputil.GetString(options.ProviderServiceConfig, "resourceType")), + LoadbalancerId: maputil.GetString(options.ProviderServiceConfig, "loadbalancerId"), + ListenerId: maputil.GetString(options.ProviderServiceConfig, "listenerId"), + Domain: maputil.GetString(options.ProviderServiceConfig, "domain"), }) return deployer, err @@ -1107,7 +1119,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer deployer, err := pVolcEngineCDN.NewDeployer(&pVolcEngineCDN.DeployerConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.SecretAccessKey, - Domain: maputil.GetString(options.ProviderExtendedConfig, "domain"), + Domain: maputil.GetString(options.ProviderServiceConfig, "domain"), }) return deployer, err @@ -1115,7 +1127,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer deployer, err := pVolcEngineCertCenter.NewDeployer(&pVolcEngineCertCenter.DeployerConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.SecretAccessKey, - Region: maputil.GetString(options.ProviderExtendedConfig, "region"), + Region: maputil.GetString(options.ProviderServiceConfig, "region"), }) return deployer, err @@ -1123,10 +1135,10 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer deployer, err := pVolcEngineCLB.NewDeployer(&pVolcEngineCLB.DeployerConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.SecretAccessKey, - Region: maputil.GetString(options.ProviderExtendedConfig, "region"), - ResourceType: pVolcEngineCLB.ResourceType(maputil.GetString(options.ProviderExtendedConfig, "resourceType")), - LoadbalancerId: maputil.GetString(options.ProviderExtendedConfig, "loadbalancerId"), - ListenerId: maputil.GetString(options.ProviderExtendedConfig, "listenerId"), + Region: maputil.GetString(options.ProviderServiceConfig, "region"), + ResourceType: pVolcEngineCLB.ResourceType(maputil.GetString(options.ProviderServiceConfig, "resourceType")), + LoadbalancerId: maputil.GetString(options.ProviderServiceConfig, "loadbalancerId"), + ListenerId: maputil.GetString(options.ProviderServiceConfig, "listenerId"), }) return deployer, err @@ -1134,7 +1146,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer deployer, err := pVolcEngineDCDN.NewDeployer(&pVolcEngineDCDN.DeployerConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.SecretAccessKey, - Domain: maputil.GetString(options.ProviderExtendedConfig, "domain"), + Domain: maputil.GetString(options.ProviderServiceConfig, "domain"), }) return deployer, err @@ -1142,9 +1154,9 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer deployer, err := pVolcEngineImageX.NewDeployer(&pVolcEngineImageX.DeployerConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.SecretAccessKey, - Region: maputil.GetString(options.ProviderExtendedConfig, "region"), - ServiceId: maputil.GetString(options.ProviderExtendedConfig, "serviceId"), - Domain: maputil.GetString(options.ProviderExtendedConfig, "domain"), + Region: maputil.GetString(options.ProviderServiceConfig, "region"), + ServiceId: maputil.GetString(options.ProviderServiceConfig, "serviceId"), + Domain: maputil.GetString(options.ProviderServiceConfig, "domain"), }) return deployer, err @@ -1152,7 +1164,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer deployer, err := pVolcEngineLive.NewDeployer(&pVolcEngineLive.DeployerConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.SecretAccessKey, - Domain: maputil.GetString(options.ProviderExtendedConfig, "domain"), + Domain: maputil.GetString(options.ProviderServiceConfig, "domain"), }) return deployer, err @@ -1160,9 +1172,9 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer deployer, err := pVolcEngineTOS.NewDeployer(&pVolcEngineTOS.DeployerConfig{ AccessKeyId: access.AccessKeyId, AccessKeySecret: access.SecretAccessKey, - Region: maputil.GetString(options.ProviderExtendedConfig, "region"), - Bucket: maputil.GetString(options.ProviderExtendedConfig, "bucket"), - Domain: maputil.GetString(options.ProviderExtendedConfig, "domain"), + Region: maputil.GetString(options.ProviderServiceConfig, "region"), + Bucket: maputil.GetString(options.ProviderServiceConfig, "bucket"), + Domain: maputil.GetString(options.ProviderServiceConfig, "domain"), }) return deployer, err @@ -1184,10 +1196,10 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer AccessKeyId: access.AccessKeyId, AccessKeySecret: access.AccessKeySecret, ApiKey: access.ApiKey, - Environment: maputil.GetOrDefaultString(options.ProviderExtendedConfig, "environment", "production"), - Domain: maputil.GetString(options.ProviderExtendedConfig, "domain"), - CertificateId: maputil.GetString(options.ProviderExtendedConfig, "certificateId"), - WebhookId: maputil.GetString(options.ProviderExtendedConfig, "webhookId"), + Environment: maputil.GetOrDefaultString(options.ProviderServiceConfig, "environment", "production"), + Domain: maputil.GetString(options.ProviderServiceConfig, "domain"), + CertificateId: maputil.GetString(options.ProviderServiceConfig, "certificateId"), + WebhookId: maputil.GetString(options.ProviderServiceConfig, "webhookId"), }) return deployer, err @@ -1213,7 +1225,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer mergedHeaders[http.CanonicalHeaderKey(key)] = h.Get(key) } } - if extendedHeadersString := maputil.GetString(options.ProviderExtendedConfig, "headers"); extendedHeadersString != "" { + if extendedHeadersString := maputil.GetString(options.ProviderServiceConfig, "headers"); extendedHeadersString != "" { h, err := httputil.ParseHeaders(extendedHeadersString) if err != nil { return nil, fmt.Errorf("failed to parse webhook headers: %w", err) @@ -1225,7 +1237,7 @@ func createDeployerProvider(options *deployerProviderOptions) (deployer.Deployer deployer, err := pWebhook.NewDeployer(&pWebhook.DeployerConfig{ WebhookUrl: access.Url, - WebhookData: maputil.GetOrDefaultString(options.ProviderExtendedConfig, "webhookData", access.DefaultDataForDeployment), + WebhookData: maputil.GetOrDefaultString(options.ProviderServiceConfig, "webhookData", access.DefaultDataForDeployment), Method: access.Method, Headers: mergedHeaders, AllowInsecureConnections: access.AllowInsecureConnections, diff --git a/internal/domain/provider.go b/internal/domain/provider.go index 45c72c05..fcbaa031 100644 --- a/internal/domain/provider.go +++ b/internal/domain/provider.go @@ -174,7 +174,7 @@ const ( DeploymentProviderTypeAliyunDDoS = DeploymentProviderType(AccessProviderTypeAliyun + "-ddos") DeploymentProviderTypeAliyunESA = DeploymentProviderType(AccessProviderTypeAliyun + "-esa") DeploymentProviderTypeAliyunFC = DeploymentProviderType(AccessProviderTypeAliyun + "-fc") - DeploymentProviderTypeAliyunGA = DeploymentProviderType(AccessProviderTypeAliyun + "-ga") // 阿里云全球加速(预留) + DeploymentProviderTypeAliyunGA = DeploymentProviderType(AccessProviderTypeAliyun + "-ga") DeploymentProviderTypeAliyunLive = DeploymentProviderType(AccessProviderTypeAliyun + "-live") DeploymentProviderTypeAliyunNLB = DeploymentProviderType(AccessProviderTypeAliyun + "-nlb") DeploymentProviderTypeAliyunOSS = DeploymentProviderType(AccessProviderTypeAliyun + "-oss") diff --git a/internal/notify/notifier.go b/internal/notify/notifier.go index 955e88c3..ee3fbd2f 100644 --- a/internal/notify/notifier.go +++ b/internal/notify/notifier.go @@ -31,9 +31,9 @@ func NewWithWorkflowNode(config NotifierWithWorkflowNodeConfig) (Notifier, error nodeConfig := config.Node.GetConfigForNotify() options := ¬ifierProviderOptions{ - Provider: domain.NotificationProviderType(nodeConfig.Provider), - ProviderAccessConfig: make(map[string]any), - ProviderExtendedConfig: nodeConfig.ProviderConfig, + Provider: domain.NotificationProviderType(nodeConfig.Provider), + ProviderAccessConfig: make(map[string]any), + ProviderServiceConfig: nodeConfig.ProviderConfig, } accessRepo := repository.NewAccessRepository() diff --git a/internal/notify/providers.go b/internal/notify/providers.go index 70787480..3a8c575d 100644 --- a/internal/notify/providers.go +++ b/internal/notify/providers.go @@ -18,9 +18,9 @@ import ( ) type notifierProviderOptions struct { - Provider domain.NotificationProviderType - ProviderAccessConfig map[string]any - ProviderExtendedConfig map[string]any + Provider domain.NotificationProviderType + ProviderAccessConfig map[string]any + ProviderServiceConfig map[string]any } func createNotifierProvider(options *notifierProviderOptions) (notifier.Notifier, error) { @@ -55,8 +55,8 @@ func createNotifierProvider(options *notifierProviderOptions) (notifier.Notifier SmtpTls: access.SmtpTls, Username: access.Username, Password: access.Password, - SenderAddress: maputil.GetOrDefaultString(options.ProviderExtendedConfig, "senderAddress", access.DefaultSenderAddress), - ReceiverAddress: maputil.GetOrDefaultString(options.ProviderExtendedConfig, "receiverAddress", access.DefaultReceiverAddress), + SenderAddress: maputil.GetOrDefaultString(options.ProviderServiceConfig, "senderAddress", access.DefaultSenderAddress), + ReceiverAddress: maputil.GetOrDefaultString(options.ProviderServiceConfig, "receiverAddress", access.DefaultReceiverAddress), }) } @@ -83,7 +83,7 @@ func createNotifierProvider(options *notifierProviderOptions) (notifier.Notifier ServerUrl: access.ServerUrl, Username: access.Username, Password: access.Password, - ChannelId: maputil.GetOrDefaultString(options.ProviderExtendedConfig, "channelId", access.DefaultChannelId), + ChannelId: maputil.GetOrDefaultString(options.ProviderServiceConfig, "channelId", access.DefaultChannelId), }) } @@ -96,7 +96,7 @@ func createNotifierProvider(options *notifierProviderOptions) (notifier.Notifier return pTelegramBot.NewNotifier(&pTelegramBot.NotifierConfig{ BotToken: access.BotToken, - ChatId: maputil.GetOrDefaultInt64(options.ProviderExtendedConfig, "chatId", access.DefaultChatId), + ChatId: maputil.GetOrDefaultInt64(options.ProviderServiceConfig, "chatId", access.DefaultChatId), }) } @@ -117,7 +117,7 @@ func createNotifierProvider(options *notifierProviderOptions) (notifier.Notifier mergedHeaders[http.CanonicalHeaderKey(key)] = h.Get(key) } } - if extendedHeadersString := maputil.GetString(options.ProviderExtendedConfig, "headers"); extendedHeadersString != "" { + if extendedHeadersString := maputil.GetString(options.ProviderServiceConfig, "headers"); extendedHeadersString != "" { h, err := httputil.ParseHeaders(extendedHeadersString) if err != nil { return nil, fmt.Errorf("failed to parse webhook headers: %w", err) @@ -129,7 +129,7 @@ func createNotifierProvider(options *notifierProviderOptions) (notifier.Notifier return pWebhook.NewNotifier(&pWebhook.NotifierConfig{ WebhookUrl: access.Url, - WebhookData: maputil.GetOrDefaultString(options.ProviderExtendedConfig, "webhookData", access.DefaultDataForNotification), + WebhookData: maputil.GetOrDefaultString(options.ProviderServiceConfig, "webhookData", access.DefaultDataForNotification), Method: access.Method, Headers: mergedHeaders, AllowInsecureConnections: access.AllowInsecureConnections, 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 3dca4a9d..35b4997c 100644 --- a/internal/pkg/core/deployer/providers/aliyun-alb/aliyun_alb.go +++ b/internal/pkg/core/deployer/providers/aliyun-alb/aliyun_alb.go @@ -157,7 +157,7 @@ func (d *DeployerProvider) deployToLoadbalancer(ctx context.Context, cloudCertId if listListenersResp.Body.Listeners != nil { for _, listener := range listListenersResp.Body.Listeners { - listenerIds = append(listenerIds, *listener.ListenerId) + listenerIds = append(listenerIds, tea.StringValue(listener.ListenerId)) } } @@ -192,7 +192,7 @@ func (d *DeployerProvider) deployToLoadbalancer(ctx context.Context, cloudCertId if listListenersResp.Body.Listeners != nil { for _, listener := range listListenersResp.Body.Listeners { - listenerIds = append(listenerIds, *listener.ListenerId) + listenerIds = append(listenerIds, tea.StringValue(listener.ListenerId)) } } @@ -211,8 +211,13 @@ func (d *DeployerProvider) deployToLoadbalancer(ctx context.Context, cloudCertId 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 { - errs = append(errs, err) + select { + case <-ctx.Done(): + return ctx.Err() + default: + if err := d.updateListenerCertificate(ctx, listenerId, cloudCertId); err != nil { + errs = append(errs, err) + } } } diff --git a/internal/pkg/core/deployer/providers/aliyun-alb/aliyun_alb_test.go b/internal/pkg/core/deployer/providers/aliyun-alb/aliyun_alb_test.go index c75119e9..11d5b565 100644 --- a/internal/pkg/core/deployer/providers/aliyun-alb/aliyun_alb_test.go +++ b/internal/pkg/core/deployer/providers/aliyun-alb/aliyun_alb_test.go @@ -96,6 +96,7 @@ func TestDeploy(t *testing.T) { fmt.Sprintf("ACCESSKEYSECRET: %v", fAccessKeySecret), fmt.Sprintf("REGION: %v", fRegion), fmt.Sprintf("LISTENERID: %v", fListenerId), + fmt.Sprintf("DOMAIN: %v", fDomain), }, "\n")) deployer, err := provider.NewDeployer(&provider.DeployerConfig{ 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 d443514e..34c3a49e 100644 --- a/internal/pkg/core/deployer/providers/aliyun-clb/aliyun_clb.go +++ b/internal/pkg/core/deployer/providers/aliyun-clb/aliyun_clb.go @@ -171,7 +171,6 @@ func (d *DeployerProvider) deployToLoadbalancer(ctx context.Context, cloudCertId select { case <-ctx.Done(): return ctx.Err() - default: if err := d.updateListenerCertificate(ctx, d.config.LoadbalancerId, listenerPort, cloudCertId); err != nil { errs = append(errs, err) diff --git a/internal/pkg/core/deployer/providers/aliyun-ga/aliyun_ga.go b/internal/pkg/core/deployer/providers/aliyun-ga/aliyun_ga.go new file mode 100644 index 00000000..f69660a8 --- /dev/null +++ b/internal/pkg/core/deployer/providers/aliyun-ga/aliyun_ga.go @@ -0,0 +1,322 @@ +package aliyunga + +import ( + "context" + "errors" + "fmt" + "log/slog" + "strings" + + aliopen "github.com/alibabacloud-go/darabonba-openapi/v2/client" + aliga "github.com/alibabacloud-go/ga-20191120/v3/client" + "github.com/alibabacloud-go/tea/tea" + + "github.com/usual2970/certimate/internal/pkg/core/deployer" + "github.com/usual2970/certimate/internal/pkg/core/uploader" + uploadersp "github.com/usual2970/certimate/internal/pkg/core/uploader/providers/aliyun-cas" + sliceutil "github.com/usual2970/certimate/internal/pkg/utils/slice" +) + +type DeployerConfig struct { + // 阿里云 AccessKeyId。 + AccessKeyId string `json:"accessKeyId"` + // 阿里云 AccessKeySecret。 + AccessKeySecret string `json:"accessKeySecret"` + // 部署资源类型。 + ResourceType ResourceType `json:"resourceType"` + // 全球加速实例 ID。 + AcceleratorId string `json:"acceleratorId"` + // 全球加速监听 ID。 + // 部署资源类型为 [RESOURCE_TYPE_LISTENER] 时必填。 + ListenerId string `json:"listenerId,omitempty"` + // SNI 域名(不支持泛域名)。 + // 部署资源类型为 [RESOURCE_TYPE_ACCELERATOR]、[RESOURCE_TYPE_LISTENER] 时选填。 + Domain string `json:"domain,omitempty"` +} + +type DeployerProvider struct { + config *DeployerConfig + logger *slog.Logger + sdkClient *aliga.Client + sslUploader uploader.Uploader +} + +var _ deployer.Deployer = (*DeployerProvider)(nil) + +func NewDeployer(config *DeployerConfig) (*DeployerProvider, error) { + if config == nil { + panic("config is nil") + } + + client, err := createSdkClient(config.AccessKeyId, config.AccessKeySecret) + if err != nil { + return nil, fmt.Errorf("failed to create sdk client: %w", err) + } + + uploader, err := createSslUploader(config.AccessKeyId, config.AccessKeySecret) + if err != nil { + return nil, fmt.Errorf("failed to create ssl uploader: %w", err) + } + + return &DeployerProvider{ + config: config, + logger: slog.Default(), + sdkClient: client, + sslUploader: uploader, + }, nil +} + +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 +} + +func (d *DeployerProvider) Deploy(ctx context.Context, certPEM string, privkeyPEM string) (*deployer.DeployResult, error) { + // 上传证书到 CAS + upres, err := d.sslUploader.Upload(ctx, certPEM, privkeyPEM) + if err != nil { + return nil, fmt.Errorf("failed to upload certificate file: %w", err) + } else { + d.logger.Info("ssl certificate uploaded", slog.Any("result", upres)) + } + + // 根据部署资源类型决定部署方式 + switch d.config.ResourceType { + case RESOURCE_TYPE_ACCELERATOR: + if err := d.deployToAccelerator(ctx, upres.ExtendedData["certIdentifier"].(string)); err != nil { + return nil, err + } + + case RESOURCE_TYPE_LISTENER: + if err := d.deployToListener(ctx, upres.ExtendedData["certIdentifier"].(string)); err != nil { + return nil, err + } + + default: + return nil, fmt.Errorf("unsupported resource type '%s'", d.config.ResourceType) + } + + return &deployer.DeployResult{}, nil +} + +func (d *DeployerProvider) deployToAccelerator(ctx context.Context, cloudCertId string) error { + if d.config.AcceleratorId == "" { + return errors.New("config `acceleratorId` is required") + } + + // 查询 HTTPS 监听列表 + // REF: https://help.aliyun.com/zh/ga/developer-reference/api-ga-2019-11-20-listlisteners + listenerIds := make([]string, 0) + listListenersPageNumber := int32(1) + listListenersPageSize := int32(50) + for { + select { + case <-ctx.Done(): + return ctx.Err() + default: + } + + listListenersReq := &aliga.ListListenersRequest{ + RegionId: tea.String("cn-hangzhou"), + AcceleratorId: tea.String(d.config.AcceleratorId), + PageNumber: tea.Int32(listListenersPageNumber), + PageSize: tea.Int32(listListenersPageSize), + } + listListenersResp, err := d.sdkClient.ListListeners(listListenersReq) + d.logger.Debug("sdk request 'ga.ListListeners'", slog.Any("request", listListenersReq), slog.Any("response", listListenersResp)) + if err != nil { + return fmt.Errorf("failed to execute sdk request 'ga.ListListeners': %w", err) + } + + if listListenersResp.Body.Listeners != nil { + for _, listener := range listListenersResp.Body.Listeners { + if strings.EqualFold(tea.StringValue(listener.Protocol), "https") { + listenerIds = append(listenerIds, tea.StringValue(listener.ListenerId)) + } + } + } + + if len(listListenersResp.Body.Listeners) < int(listListenersPageSize) { + break + } else { + listListenersPageNumber++ + } + } + + // 遍历更新监听证书 + if len(listenerIds) == 0 { + d.logger.Info("no ga listeners to deploy") + } else { + var errs []error + d.logger.Info("found https listeners to deploy", slog.Any("listenerIds", listenerIds)) + + for _, listenerId := range listenerIds { + select { + case <-ctx.Done(): + return ctx.Err() + default: + if err := d.updateListenerCertificate(ctx, d.config.AcceleratorId, listenerId, cloudCertId); err != nil { + errs = append(errs, err) + } + } + } + + if len(errs) > 0 { + return errors.Join(errs...) + } + } + + return nil +} + +func (d *DeployerProvider) deployToListener(ctx context.Context, cloudCertId string) error { + if d.config.AcceleratorId == "" { + return errors.New("config `acceleratorId` is required") + } + if d.config.ListenerId == "" { + return errors.New("config `listenerId` is required") + } + + // 更新监听 + if err := d.updateListenerCertificate(ctx, d.config.AcceleratorId, d.config.ListenerId, cloudCertId); err != nil { + return err + } + + return nil +} + +func (d *DeployerProvider) updateListenerCertificate(ctx context.Context, cloudAcceleratorId string, cloudListenerId string, cloudCertId string) error { + // 查询监听绑定的证书列表 + // REF: https://help.aliyun.com/zh/ga/developer-reference/api-ga-2019-11-20-listlistenercertificates + var listenerDefaultCertificate *aliga.ListListenerCertificatesResponseBodyCertificates + var listenerAdditionalCertificates []*aliga.ListListenerCertificatesResponseBodyCertificates = make([]*aliga.ListListenerCertificatesResponseBodyCertificates, 0) + var listListenerCertificatesNextToken *string + for { + listListenerCertificatesReq := &aliga.ListListenerCertificatesRequest{ + RegionId: tea.String("cn-hangzhou"), + AcceleratorId: tea.String(d.config.AcceleratorId), + NextToken: listListenerCertificatesNextToken, + MaxResults: tea.Int32(20), + } + listListenerCertificatesResp, err := d.sdkClient.ListListenerCertificates(listListenerCertificatesReq) + d.logger.Debug("sdk request 'ga.ListListenerCertificates'", slog.Any("request", listListenerCertificatesReq), slog.Any("response", listListenerCertificatesResp)) + if err != nil { + return fmt.Errorf("failed to execute sdk request 'ga.ListListenerCertificates': %w", err) + } + + if listListenerCertificatesResp.Body.Certificates != nil { + for _, certificate := range listListenerCertificatesResp.Body.Certificates { + if tea.BoolValue(certificate.IsDefault) { + listenerDefaultCertificate = certificate + } else { + listenerAdditionalCertificates = append(listenerAdditionalCertificates, certificate) + } + } + } + + if listListenerCertificatesResp.Body.NextToken == nil { + break + } else { + listListenerCertificatesNextToken = listListenerCertificatesResp.Body.NextToken + } + } + + if d.config.Domain == "" { + // 未指定 SNI,只需部署到监听器 + if listenerDefaultCertificate != nil && tea.StringValue(listenerDefaultCertificate.CertificateId) == cloudCertId { + d.logger.Info("no need to update ga listener default certificate") + return nil + } + + // 修改监听的属性 + // REF: https://help.aliyun.com/zh/ga/developer-reference/api-ga-2019-11-20-updatelistener + updateListenerReq := &aliga.UpdateListenerRequest{ + RegionId: tea.String("cn-hangzhou"), + ListenerId: tea.String(cloudListenerId), + Certificates: []*aliga.UpdateListenerRequestCertificates{{ + Id: tea.String(cloudCertId), + }}, + } + updateListenerResp, err := d.sdkClient.UpdateListener(updateListenerReq) + d.logger.Debug("sdk request 'ga.UpdateListener'", slog.Any("request", updateListenerReq), slog.Any("response", updateListenerResp)) + if err != nil { + return fmt.Errorf("failed to execute sdk request 'ga.UpdateListener': %w", err) + } + } else { + // 指定 SNI,需部署到扩展域名 + if sliceutil.Some(listenerAdditionalCertificates, func(item *aliga.ListListenerCertificatesResponseBodyCertificates) bool { + return tea.StringValue(item.CertificateId) == cloudCertId + }) { + d.logger.Info("no need to update ga listener additional certificate") + return nil + } + + if sliceutil.Some(listenerAdditionalCertificates, func(item *aliga.ListListenerCertificatesResponseBodyCertificates) bool { + return tea.StringValue(item.Domain) == d.config.Domain + }) { + // 为监听替换扩展证书 + // REF: https://help.aliyun.com/zh/ga/developer-reference/api-ga-2019-11-20-updateadditionalcertificatewithlistener + updateAdditionalCertificateWithListenerReq := &aliga.UpdateAdditionalCertificateWithListenerRequest{ + RegionId: tea.String("cn-hangzhou"), + AcceleratorId: tea.String(cloudAcceleratorId), + ListenerId: tea.String(cloudListenerId), + CertificateId: tea.String(cloudCertId), + Domain: tea.String(d.config.Domain), + } + updateAdditionalCertificateWithListenerResp, err := d.sdkClient.UpdateAdditionalCertificateWithListener(updateAdditionalCertificateWithListenerReq) + d.logger.Debug("sdk request 'ga.UpdateAdditionalCertificateWithListener'", slog.Any("request", updateAdditionalCertificateWithListenerReq), slog.Any("response", updateAdditionalCertificateWithListenerResp)) + if err != nil { + return fmt.Errorf("failed to execute sdk request 'ga.UpdateAdditionalCertificateWithListener': %w", err) + } + } else { + // 为监听绑定扩展证书 + // REF: https://help.aliyun.com/zh/ga/developer-reference/api-ga-2019-11-20-associateadditionalcertificateswithlistener + associateAdditionalCertificatesWithListenerReq := &aliga.AssociateAdditionalCertificatesWithListenerRequest{ + RegionId: tea.String("cn-hangzhou"), + AcceleratorId: tea.String(cloudAcceleratorId), + ListenerId: tea.String(cloudListenerId), + Certificates: []*aliga.AssociateAdditionalCertificatesWithListenerRequestCertificates{{ + Id: tea.String(cloudCertId), + Domain: tea.String(d.config.Domain), + }}, + } + associateAdditionalCertificatesWithListenerResp, err := d.sdkClient.AssociateAdditionalCertificatesWithListener(associateAdditionalCertificatesWithListenerReq) + d.logger.Debug("sdk request 'ga.AssociateAdditionalCertificatesWithListener'", slog.Any("request", associateAdditionalCertificatesWithListenerReq), slog.Any("response", associateAdditionalCertificatesWithListenerResp)) + if err != nil { + return fmt.Errorf("failed to execute sdk request 'ga.AssociateAdditionalCertificatesWithListener': %w", err) + } + } + } + + return nil +} + +func createSdkClient(accessKeyId, accessKeySecret string) (*aliga.Client, error) { + // 接入点一览 https://api.aliyun.com/product/Ga + config := &aliopen.Config{ + AccessKeyId: tea.String(accessKeyId), + AccessKeySecret: tea.String(accessKeySecret), + Endpoint: tea.String("ga.cn-hangzhou.aliyuncs.com"), + } + + client, err := aliga.NewClient(config) + if err != nil { + return nil, err + } + + return client, nil +} + +func createSslUploader(accessKeyId, accessKeySecret string) (uploader.Uploader, error) { + uploader, err := uploadersp.NewUploader(&uploadersp.UploaderConfig{ + AccessKeyId: accessKeyId, + AccessKeySecret: accessKeySecret, + Region: "cn-hangzhou", + }) + return uploader, err +} diff --git a/internal/pkg/core/deployer/providers/aliyun-ga/aliyun_ga_test.go b/internal/pkg/core/deployer/providers/aliyun-ga/aliyun_ga_test.go new file mode 100644 index 00000000..611ddc41 --- /dev/null +++ b/internal/pkg/core/deployer/providers/aliyun-ga/aliyun_ga_test.go @@ -0,0 +1,118 @@ +package aliyunga_test + +import ( + "context" + "flag" + "fmt" + "os" + "strings" + "testing" + + provider "github.com/usual2970/certimate/internal/pkg/core/deployer/providers/aliyun-ga" +) + +var ( + fInputCertPath string + fInputKeyPath string + fAccessKeyId string + fAccessKeySecret string + fAcceleratorId string + fListenerId string + fDomain string +) + +func init() { + argsPrefix := "CERTIMATE_DEPLOYER_ALIYUNGA_" + + flag.StringVar(&fInputCertPath, argsPrefix+"INPUTCERTPATH", "", "") + flag.StringVar(&fInputKeyPath, argsPrefix+"INPUTKEYPATH", "", "") + flag.StringVar(&fAccessKeyId, argsPrefix+"ACCESSKEYID", "", "") + flag.StringVar(&fAccessKeySecret, argsPrefix+"ACCESSKEYSECRET", "", "") + flag.StringVar(&fAcceleratorId, argsPrefix+"ACCELERATORID", "", "") + flag.StringVar(&fListenerId, argsPrefix+"LISTENERID", "", "") + flag.StringVar(&fDomain, argsPrefix+"DOMAIN", "", "") +} + +/* +Shell command to run this test: + + go test -v ./aliyun_ga_test.go -args \ + --CERTIMATE_DEPLOYER_ALIYUNGA_INPUTCERTPATH="/path/to/your-input-cert.pem" \ + --CERTIMATE_DEPLOYER_ALIYUNGA_INPUTKEYPATH="/path/to/your-input-key.pem" \ + --CERTIMATE_DEPLOYER_ALIYUNGA_ACCESSKEYID="your-access-key-id" \ + --CERTIMATE_DEPLOYER_ALIYUNGA_ACCESSKEYSECRET="your-access-key-secret" \ + --CERTIMATE_DEPLOYER_ALIYUNGA_ACCELERATORID="your-ga-accelerator-id" \ + --CERTIMATE_DEPLOYER_ALIYUNGA_LISTENERID="your-ga-listener-id" \ + --CERTIMATE_DEPLOYER_ALIYUNGA_DOMAIN="your-ga-sni-domain" +*/ +func TestDeploy(t *testing.T) { + flag.Parse() + + t.Run("Deploy_ToAccelerator", func(t *testing.T) { + t.Log(strings.Join([]string{ + "args:", + fmt.Sprintf("INPUTCERTPATH: %v", fInputCertPath), + fmt.Sprintf("INPUTKEYPATH: %v", fInputKeyPath), + fmt.Sprintf("ACCESSKEYID: %v", fAccessKeyId), + fmt.Sprintf("ACCESSKEYSECRET: %v", fAccessKeySecret), + fmt.Sprintf("ACCELERATORID: %v", fAcceleratorId), + fmt.Sprintf("DOMAIN: %v", fDomain), + }, "\n")) + + deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + AccessKeyId: fAccessKeyId, + AccessKeySecret: fAccessKeySecret, + ResourceType: provider.RESOURCE_TYPE_ACCELERATOR, + AcceleratorId: fAcceleratorId, + Domain: fDomain, + }) + if err != nil { + t.Errorf("err: %+v", err) + return + } + + fInputCertData, _ := os.ReadFile(fInputCertPath) + fInputKeyData, _ := os.ReadFile(fInputKeyPath) + res, err := deployer.Deploy(context.Background(), string(fInputCertData), string(fInputKeyData)) + if err != nil { + t.Errorf("err: %+v", err) + return + } + + t.Logf("ok: %v", res) + }) + + t.Run("Deploy_ToListener", func(t *testing.T) { + t.Log(strings.Join([]string{ + "args:", + fmt.Sprintf("INPUTCERTPATH: %v", fInputCertPath), + fmt.Sprintf("INPUTKEYPATH: %v", fInputKeyPath), + fmt.Sprintf("ACCESSKEYID: %v", fAccessKeyId), + fmt.Sprintf("ACCESSKEYSECRET: %v", fAccessKeySecret), + fmt.Sprintf("LISTENERID: %v", fListenerId), + fmt.Sprintf("DOMAIN: %v", fDomain), + }, "\n")) + + deployer, err := provider.NewDeployer(&provider.DeployerConfig{ + AccessKeyId: fAccessKeyId, + AccessKeySecret: fAccessKeySecret, + ResourceType: provider.RESOURCE_TYPE_LISTENER, + ListenerId: fListenerId, + Domain: fDomain, + }) + if err != nil { + t.Errorf("err: %+v", err) + return + } + + fInputCertData, _ := os.ReadFile(fInputCertPath) + fInputKeyData, _ := os.ReadFile(fInputKeyPath) + res, err := deployer.Deploy(context.Background(), string(fInputCertData), string(fInputKeyData)) + if err != nil { + t.Errorf("err: %+v", err) + return + } + + t.Logf("ok: %v", res) + }) +} diff --git a/internal/pkg/core/deployer/providers/aliyun-ga/consts.go b/internal/pkg/core/deployer/providers/aliyun-ga/consts.go new file mode 100644 index 00000000..f96d98d5 --- /dev/null +++ b/internal/pkg/core/deployer/providers/aliyun-ga/consts.go @@ -0,0 +1,10 @@ +package aliyunga + +type ResourceType string + +const ( + // 资源类型:部署到指定全球加速器。 + RESOURCE_TYPE_ACCELERATOR = ResourceType("accelerator") + // 资源类型:部署到指定监听器。 + RESOURCE_TYPE_LISTENER = ResourceType("listener") +) 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 b8391144..58015f3d 100644 --- a/internal/pkg/core/deployer/providers/aliyun-nlb/aliyun_nlb.go +++ b/internal/pkg/core/deployer/providers/aliyun-nlb/aliyun_nlb.go @@ -145,7 +145,7 @@ func (d *DeployerProvider) deployToLoadbalancer(ctx context.Context, cloudCertId if listListenersResp.Body.Listeners != nil { for _, listener := range listListenersResp.Body.Listeners { - listenerIds = append(listenerIds, *listener.ListenerId) + listenerIds = append(listenerIds, tea.StringValue(listener.ListenerId)) } } @@ -167,7 +167,6 @@ func (d *DeployerProvider) deployToLoadbalancer(ctx context.Context, cloudCertId select { case <-ctx.Done(): return ctx.Err() - default: if err := d.updateListenerCertificate(ctx, listenerId, cloudCertId); err != nil { errs = append(errs, err) 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 748111dd..23ec4a92 100644 --- a/internal/pkg/core/deployer/providers/huaweicloud-elb/huaweicloud_elb.go +++ b/internal/pkg/core/deployer/providers/huaweicloud-elb/huaweicloud_elb.go @@ -210,7 +210,6 @@ func (d *DeployerProvider) deployToLoadbalancer(ctx context.Context, certPEM str select { case <-ctx.Done(): return ctx.Err() - default: if err := d.modifyListenerCertificate(ctx, listenerId, upres.CertId); err != nil { errs = append(errs, err) diff --git a/ui/src/components/workflow/node/DeployNodeConfigForm.tsx b/ui/src/components/workflow/node/DeployNodeConfigForm.tsx index 981d7183..ff2f96b3 100644 --- a/ui/src/components/workflow/node/DeployNodeConfigForm.tsx +++ b/ui/src/components/workflow/node/DeployNodeConfigForm.tsx @@ -27,6 +27,7 @@ import DeployNodeConfigFormAliyunDCDNConfig from "./DeployNodeConfigFormAliyunDC import DeployNodeConfigFormAliyunDDoSConfig from "./DeployNodeConfigFormAliyunDDoSConfig"; import DeployNodeConfigFormAliyunESAConfig from "./DeployNodeConfigFormAliyunESAConfig"; import DeployNodeConfigFormAliyunFCConfig from "./DeployNodeConfigFormAliyunFCConfig"; +import DeployNodeConfigFormAliyunGAConfig from "./DeployNodeConfigFormAliyunGAConfig"; import DeployNodeConfigFormAliyunLiveConfig from "./DeployNodeConfigFormAliyunLiveConfig"; import DeployNodeConfigFormAliyunNLBConfig from "./DeployNodeConfigFormAliyunNLBConfig"; import DeployNodeConfigFormAliyunOSSConfig from "./DeployNodeConfigFormAliyunOSSConfig"; @@ -203,6 +204,8 @@ const DeployNodeConfigForm = forwardRef; case DEPLOYMENT_PROVIDERS.ALIYUN_FC: return ; + case DEPLOYMENT_PROVIDERS.ALIYUN_GA: + return ; case DEPLOYMENT_PROVIDERS.ALIYUN_LIVE: return ; case DEPLOYMENT_PROVIDERS.ALIYUN_NLB: diff --git a/ui/src/components/workflow/node/DeployNodeConfigFormAliyunGAConfig.tsx b/ui/src/components/workflow/node/DeployNodeConfigFormAliyunGAConfig.tsx new file mode 100644 index 00000000..ba2633c4 --- /dev/null +++ b/ui/src/components/workflow/node/DeployNodeConfigFormAliyunGAConfig.tsx @@ -0,0 +1,118 @@ +import { useTranslation } from "react-i18next"; +import { Form, type FormInstance, Input, Select } from "antd"; +import { createSchemaFieldRule } from "antd-zod"; +import { z } from "zod"; + +import Show from "@/components/Show"; +import { validDomainName } from "@/utils/validators"; + +type DeployNodeConfigFormAliyunGAConfigFieldValues = Nullish<{ + resourceType: string; + acceleratorId?: string; + listenerId?: string; + domain?: string; +}>; + +export type DeployNodeConfigFormAliyunGAConfigProps = { + form: FormInstance; + formName: string; + disabled?: boolean; + initialValues?: DeployNodeConfigFormAliyunGAConfigFieldValues; + onValuesChange?: (values: DeployNodeConfigFormAliyunGAConfigFieldValues) => void; +}; + +const RESOURCE_TYPE_ACCELERATOR = "accelerator" as const; +const RESOURCE_TYPE_LISTENER = "listener" as const; + +const initFormModel = (): DeployNodeConfigFormAliyunGAConfigFieldValues => { + return {}; +}; + +const DeployNodeConfigFormAliyunGAConfig = ({ form: formInst, formName, disabled, initialValues, onValuesChange }: DeployNodeConfigFormAliyunGAConfigProps) => { + const { t } = useTranslation(); + + const formSchema = z.object({ + resourceType: z.union([z.literal(RESOURCE_TYPE_ACCELERATOR), z.literal(RESOURCE_TYPE_LISTENER)], { + message: t("workflow_node.deploy.form.aliyun_ga_resource_type.placeholder"), + }), + acceleratorId: z + .string() + .max(64, t("common.errmsg.string_max", { max: 64 })) + .trim(), + listenerId: z + .string() + .max(64, t("common.errmsg.string_max", { max: 64 })) + .trim() + .nullish() + .refine((v) => fieldResourceType !== RESOURCE_TYPE_LISTENER || !!v?.trim(), t("workflow_node.deploy.form.aliyun_ga_listener_id.placeholder")), + domain: z + .string() + .nullish() + .refine((v) => { + if (![RESOURCE_TYPE_ACCELERATOR, RESOURCE_TYPE_LISTENER].includes(fieldResourceType)) return true; + return !v || validDomainName(v!); + }, t("common.errmsg.domain_invalid")), + }); + const formRule = createSchemaFieldRule(formSchema); + + const fieldResourceType = Form.useWatch("resourceType", formInst); + + const handleFormChange = (_: unknown, values: z.infer) => { + onValuesChange?.(values); + }; + + return ( +
+ + + + + } + > + + + + + } + > + + + + + + } + > + + + +
+ ); +}; + +export default DeployNodeConfigFormAliyunGAConfig; diff --git a/ui/src/domain/provider.ts b/ui/src/domain/provider.ts index 4cad8606..a2c432ce 100644 --- a/ui/src/domain/provider.ts +++ b/ui/src/domain/provider.ts @@ -353,6 +353,7 @@ export const DEPLOYMENT_PROVIDERS = Object.freeze({ ALIYUN_DDOS: `${ACCESS_PROVIDERS.ALIYUN}-ddospro`, ALIYUN_ESA: `${ACCESS_PROVIDERS.ALIYUN}-esa`, ALIYUN_FC: `${ACCESS_PROVIDERS.ALIYUN}-fc`, + ALIYUN_GA: `${ACCESS_PROVIDERS.ALIYUN}-ga`, ALIYUN_LIVE: `${ACCESS_PROVIDERS.ALIYUN}-live`, ALIYUN_NLB: `${ACCESS_PROVIDERS.ALIYUN}-nlb`, ALIYUN_OSS: `${ACCESS_PROVIDERS.ALIYUN}-oss`, @@ -475,6 +476,7 @@ export const deploymentProvidersMap: Maphttps://fcnext.console.aliyun.com", + "workflow_node.deploy.form.aliyun_ga_resource_type.label": "Resource type", + "workflow_node.deploy.form.aliyun_ga_resource_type.placeholder": "Please select resource type", + "workflow_node.deploy.form.aliyun_ga_resource_type.option.accelerator.label": "GA accelerator", + "workflow_node.deploy.form.aliyun_ga_resource_type.option.listener.label": "GA listener", + "workflow_node.deploy.form.aliyun_ga_accelerator_id.label": "Alibaba Cloud GA accelerator ID", + "workflow_node.deploy.form.aliyun_ga_accelerator_id.placeholder": "Please enter Alibaba Cloud GA accelerator ID", + "workflow_node.deploy.form.aliyun_ga_accelerator_id.tooltip": "For more information, https://ga.console.aliyun.com", + "workflow_node.deploy.form.aliyun_ga_listener_id.label": "Alibaba Cloud GA listener ID", + "workflow_node.deploy.form.aliyun_ga_listener_id.placeholder": "Please enter Alibaba Cloud GA listener ID", + "workflow_node.deploy.form.aliyun_ga_listener_id.tooltip": "For more information, https://ga.console.aliyun.com", + "workflow_node.deploy.form.aliyun_ga_snidomain.label": "Alibaba Cloud GA SNI domain (Optional)", + "workflow_node.deploy.form.aliyun_ga_snidomain.placeholder": "Please enter Alibaba Cloud GA SNI domain name", + "workflow_node.deploy.form.aliyun_ga_snidomain.tooltip": "For more information, https://ga.console.aliyun.com", "workflow_node.deploy.form.aliyun_live_region.label": "Alibaba Cloud Live region", "workflow_node.deploy.form.aliyun_live_region.placeholder": "Please enter Alibaba Cloud Live region (e.g. cn-hangzhou)", "workflow_node.deploy.form.aliyun_live_region.tooltip": "For more information, see https://www.alibabacloud.com/help/en/live/product-overview/supported-regions", diff --git a/ui/src/i18n/locales/zh/nls.provider.json b/ui/src/i18n/locales/zh/nls.provider.json index 27abe56c..45f3fd53 100644 --- a/ui/src/i18n/locales/zh/nls.provider.json +++ b/ui/src/i18n/locales/zh/nls.provider.json @@ -16,6 +16,7 @@ "provider.aliyun.dns": "阿里云 - 云解析 DNS", "provider.aliyun.esa": "阿里云 - 边缘安全加速 ESA", "provider.aliyun.fc": "阿里云 - 函数计算 FC", + "provider.aliyun.ga": "阿里云 - 全球加速 GA", "provider.aliyun.live": "阿里云 - 视频直播 Live", "provider.aliyun.nlb": "阿里云 - 网络型负载均衡 NLB", "provider.aliyun.oss": "阿里云 - 对象存储 OSS", diff --git a/ui/src/i18n/locales/zh/nls.workflow.nodes.json b/ui/src/i18n/locales/zh/nls.workflow.nodes.json index e462f34a..ff2f0522 100644 --- a/ui/src/i18n/locales/zh/nls.workflow.nodes.json +++ b/ui/src/i18n/locales/zh/nls.workflow.nodes.json @@ -212,6 +212,19 @@ "workflow_node.deploy.form.aliyun_fc_domain.label": "阿里云 FC 自定义域名", "workflow_node.deploy.form.aliyun_fc_domain.placeholder": "请输入阿里云 FC 自定义域名(支持泛域名)", "workflow_node.deploy.form.aliyun_fc_domain.tooltip": "这是什么?请参阅 see https://fcnext.console.aliyun.com/", + "workflow_node.deploy.form.aliyun_ga_resource_type.label": "证书替换方式", + "workflow_node.deploy.form.aliyun_ga_resource_type.placeholder": "请选择证书替换方式", + "workflow_node.deploy.form.aliyun_ga_resource_type.option.accelerator.label": "替换指定全球加速器下的全部 HTTPS 监听的证书", + "workflow_node.deploy.form.aliyun_ga_resource_type.option.listener.label": "替换指定全球加速器监听器的证书", + "workflow_node.deploy.form.aliyun_ga_accelerator_id.label": "阿里云全球加速实例 ID", + "workflow_node.deploy.form.aliyun_ga_accelerator_id.placeholder": "请输入阿里云全球加速实例 ID", + "workflow_node.deploy.form.aliyun_ga_accelerator_id.tooltip": "这是什么?请参阅 https://ga.console.aliyun.com", + "workflow_node.deploy.form.aliyun_ga_listener_id.label": "阿里云全球加速监听 ID", + "workflow_node.deploy.form.aliyun_ga_listener_id.placeholder": "请输入阿里云全球加速监听 ID", + "workflow_node.deploy.form.aliyun_ga_listener_id.tooltip": "这是什么?请参阅 https://ga.console.aliyun.com", + "workflow_node.deploy.form.aliyun_ga_snidomain.label": "阿里云全球加速扩展域名(可选)", + "workflow_node.deploy.form.aliyun_ga_snidomain.placeholder": "请输入阿里云全球加速扩展域名", + "workflow_node.deploy.form.aliyun_ga_snidomain.tooltip": "这是什么?请参阅 https://ga.console.aliyun.com

不填写时,将替换监听器的默认证书;否则,将替换扩展域名证书。", "workflow_node.deploy.form.aliyun_live_region.label": "阿里云视频直播服务地域", "workflow_node.deploy.form.aliyun_live_region.placeholder": "请输入阿里云视频直播服务地域(例如:cn-hangzhou)", "workflow_node.deploy.form.aliyun_live_region.tooltip": "这是什么?请参阅 https://help.aliyun.com/zh/live/product-overview/supported-regions",