refactor: clean code

This commit is contained in:
Fu Diwei
2025-01-05 00:08:12 +08:00
parent 3b9a7fe805
commit 61843a4997
69 changed files with 972 additions and 839 deletions

View File

@@ -2,7 +2,6 @@ package deployer
import (
"context"
"fmt"
"github.com/usual2970/certimate/internal/applicant"
"github.com/usual2970/certimate/internal/domain"
@@ -10,39 +9,6 @@ import (
"github.com/usual2970/certimate/internal/pkg/core/logger"
)
/*
提供商部署目标常量值。
短横线前的部分始终等于提供商类型。
注意:如果追加新的常量值,请保持以 ASCII 排序。
NOTICE: If you add new constant, please keep ASCII order.
*/
const (
targetAliyunALB = "aliyun-alb"
targetAliyunCDN = "aliyun-cdn"
targetAliyunCLB = "aliyun-clb"
targetAliyunDCDN = "aliyun-dcdn"
targetAliyunNLB = "aliyun-nlb"
targetAliyunOSS = "aliyun-oss"
targetBaiduCloudCDN = "baiducloud-cdn"
targetBytePlusCDN = "byteplus-cdn"
targetDogeCloudCDN = "dogecloud-cdn"
targetHuaweiCloudCDN = "huaweicloud-cdn"
targetHuaweiCloudELB = "huaweicloud-elb"
targetK8sSecret = "k8s-secret"
targetLocal = "local"
targetQiniuCDN = "qiniu-cdn"
targetSSH = "ssh"
targetTencentCloudCDN = "tencentcloud-cdn"
targetTencentCloudCLB = "tencentcloud-clb"
targetTencentCloudCOS = "tencentcloud-cos"
targetTencentCloudECDN = "tencentcloud-ecdn"
targetTencentCloudEO = "tencentcloud-eo"
targetVolcEngineCDN = "volcengine-cdn"
targetVolcEngineLive = "volcengine-live"
targetWebhook = "webhook"
)
type DeployerOption struct {
NodeId string `json:"nodeId"`
Domains string `json:"domains"`
@@ -50,17 +16,14 @@ type DeployerOption struct {
AccessRecord *domain.Access `json:"-"`
DeployConfig domain.DeployConfig `json:"deployConfig"`
Certificate applicant.Certificate `json:"certificate"`
Variables map[string]string `json:"variables"`
}
type Deployer interface {
Deploy(ctx context.Context) error
GetInfos() []string
GetID() string
}
func GetWithTypeAndOption(deployType string, option *DeployerOption) (Deployer, error) {
deployer, logger, err := createDeployer(deployType, option.AccessRecord.Config, option.DeployConfig.NodeConfig)
func GetWithProviderAndOption(provider string, option *DeployerOption) (Deployer, error) {
deployer, logger, err := createDeployer(domain.DeployProviderType(provider), option.AccessRecord.Config, option.DeployConfig.NodeConfig)
if err != nil {
return nil, err
}
@@ -79,14 +42,6 @@ type proxyDeployer struct {
deployer deployer.Deployer
}
func (d *proxyDeployer) GetID() string {
return fmt.Sprintf("%s-%s", d.option.AccessRecord.Name, d.option.AccessRecord.Id)
}
func (d *proxyDeployer) GetInfos() []string {
return d.logger.GetRecords()
}
func (d *proxyDeployer) Deploy(ctx context.Context) error {
_, err := d.deployer.Deploy(ctx, d.option.Certificate.Certificate, d.option.Certificate.PrivateKey)
return err

View File

@@ -34,23 +34,23 @@ import (
"github.com/usual2970/certimate/internal/pkg/utils/maps"
)
func createDeployer(target string, accessConfig string, deployConfig map[string]any) (deployer.Deployer, logger.Logger, error) {
func createDeployer(provider domain.DeployProviderType, accessConfig string, deployConfig map[string]any) (deployer.Deployer, logger.Logger, error) {
logger := logger.NewDefaultLogger()
/*
注意如果追加新的常量值请保持以 ASCII 排序
NOTICE: If you add new constant, please keep ASCII order.
*/
switch target {
case targetAliyunALB, targetAliyunCDN, targetAliyunCLB, targetAliyunDCDN, targetAliyunNLB, targetAliyunOSS:
switch provider {
case domain.DeployProviderTypeAliyunALB, domain.DeployProviderTypeAliyunCDN, domain.DeployProviderTypeAliyunCLB, domain.DeployProviderTypeAliyunDCDN, domain.DeployProviderTypeAliyunNLB, domain.DeployProviderTypeAliyunOSS:
{
access := &domain.AliyunAccessConfig{}
access := &domain.AccessConfigForAliyun{}
if err := json.Unmarshal([]byte(accessConfig), access); err != nil {
return nil, nil, fmt.Errorf("failed to unmarshal access config: %w", err)
}
switch target {
case targetAliyunALB:
switch provider {
case domain.DeployProviderTypeAliyunALB:
deployer, err := providerAliyunALB.NewWithLogger(&providerAliyunALB.AliyunALBDeployerConfig{
AccessKeyId: access.AccessKeyId,
AccessKeySecret: access.AccessKeySecret,
@@ -61,7 +61,7 @@ func createDeployer(target string, accessConfig string, deployConfig map[string]
}, logger)
return deployer, logger, err
case targetAliyunCDN:
case domain.DeployProviderTypeAliyunCDN:
deployer, err := providerAliyunCDN.NewWithLogger(&providerAliyunCDN.AliyunCDNDeployerConfig{
AccessKeyId: access.AccessKeyId,
AccessKeySecret: access.AccessKeySecret,
@@ -69,7 +69,7 @@ func createDeployer(target string, accessConfig string, deployConfig map[string]
}, logger)
return deployer, logger, err
case targetAliyunCLB:
case domain.DeployProviderTypeAliyunCLB:
deployer, err := providerAliyunCLB.NewWithLogger(&providerAliyunCLB.AliyunCLBDeployerConfig{
AccessKeyId: access.AccessKeyId,
AccessKeySecret: access.AccessKeySecret,
@@ -80,7 +80,7 @@ func createDeployer(target string, accessConfig string, deployConfig map[string]
}, logger)
return deployer, logger, err
case targetAliyunDCDN:
case domain.DeployProviderTypeAliyunDCDN:
deployer, err := providerAliyunDCDN.NewWithLogger(&providerAliyunDCDN.AliyunDCDNDeployerConfig{
AccessKeyId: access.AccessKeyId,
AccessKeySecret: access.AccessKeySecret,
@@ -88,7 +88,7 @@ func createDeployer(target string, accessConfig string, deployConfig map[string]
}, logger)
return deployer, logger, err
case targetAliyunNLB:
case domain.DeployProviderTypeAliyunNLB:
deployer, err := providerAliyunNLB.NewWithLogger(&providerAliyunNLB.AliyunNLBDeployerConfig{
AccessKeyId: access.AccessKeyId,
AccessKeySecret: access.AccessKeySecret,
@@ -99,7 +99,7 @@ func createDeployer(target string, accessConfig string, deployConfig map[string]
}, logger)
return deployer, logger, err
case targetAliyunOSS:
case domain.DeployProviderTypeAliyunOSS:
deployer, err := providerAliyunOSS.NewWithLogger(&providerAliyunOSS.AliyunOSSDeployerConfig{
AccessKeyId: access.AccessKeyId,
AccessKeySecret: access.AccessKeySecret,
@@ -114,9 +114,9 @@ func createDeployer(target string, accessConfig string, deployConfig map[string]
}
}
case targetBaiduCloudCDN:
case domain.DeployProviderTypeBaiduCloudCDN:
{
access := &domain.BaiduCloudAccessConfig{}
access := &domain.AccessConfigForBaiduCloud{}
if err := json.Unmarshal([]byte(accessConfig), access); err != nil {
return nil, nil, fmt.Errorf("failed to unmarshal access config: %w", err)
}
@@ -129,9 +129,9 @@ func createDeployer(target string, accessConfig string, deployConfig map[string]
return deployer, logger, err
}
case targetBytePlusCDN:
case domain.DeployProviderTypeBytePlusCDN:
{
access := &domain.BytePlusAccessConfig{}
access := &domain.AccessConfigForBytePlus{}
if err := json.Unmarshal([]byte(accessConfig), access); err != nil {
return nil, nil, fmt.Errorf("failed to unmarshal access config: %w", err)
}
@@ -144,9 +144,9 @@ func createDeployer(target string, accessConfig string, deployConfig map[string]
return deployer, logger, err
}
case targetDogeCloudCDN:
case domain.DeployProviderTypeDogeCloudCDN:
{
access := &domain.DogeCloudAccessConfig{}
access := &domain.AccessConfigForDogeCloud{}
if err := json.Unmarshal([]byte(accessConfig), access); err != nil {
return nil, nil, fmt.Errorf("failed to unmarshal access config: %w", err)
}
@@ -159,15 +159,15 @@ func createDeployer(target string, accessConfig string, deployConfig map[string]
return deployer, logger, err
}
case targetHuaweiCloudCDN, targetHuaweiCloudELB:
case domain.DeployProviderTypeHuaweiCloudCDN, domain.DeployProviderTypeHuaweiCloudELB:
{
access := &domain.HuaweiCloudAccessConfig{}
access := &domain.AccessConfigForHuaweiCloud{}
if err := json.Unmarshal([]byte(accessConfig), access); err != nil {
return nil, nil, fmt.Errorf("failed to unmarshal access config: %w", err)
}
switch target {
case targetHuaweiCloudCDN:
switch provider {
case domain.DeployProviderTypeHuaweiCloudCDN:
deployer, err := providerHuaweiCloudCDN.NewWithLogger(&providerHuaweiCloudCDN.HuaweiCloudCDNDeployerConfig{
AccessKeyId: access.AccessKeyId,
SecretAccessKey: access.SecretAccessKey,
@@ -176,7 +176,7 @@ func createDeployer(target string, accessConfig string, deployConfig map[string]
}, logger)
return deployer, logger, err
case targetHuaweiCloudELB:
case domain.DeployProviderTypeHuaweiCloudELB:
deployer, err := providerHuaweiCloudELB.NewWithLogger(&providerHuaweiCloudELB.HuaweiCloudELBDeployerConfig{
AccessKeyId: access.AccessKeyId,
SecretAccessKey: access.SecretAccessKey,
@@ -193,7 +193,7 @@ func createDeployer(target string, accessConfig string, deployConfig map[string]
}
}
case targetLocal:
case domain.DeployProviderTypeLocal:
{
deployer, err := providerLocal.NewWithLogger(&providerLocal.LocalDeployerConfig{
ShellEnv: providerLocal.ShellEnvType(maps.GetValueAsString(deployConfig, "shellEnv")),
@@ -210,9 +210,9 @@ func createDeployer(target string, accessConfig string, deployConfig map[string]
return deployer, logger, err
}
case targetK8sSecret:
case domain.DeployProviderTypeK8sSecret:
{
access := &domain.KubernetesAccessConfig{}
access := &domain.AccessConfigForKubernetes{}
if err := json.Unmarshal([]byte(accessConfig), access); err != nil {
return nil, nil, fmt.Errorf("failed to unmarshal access config: %w", err)
}
@@ -228,9 +228,9 @@ func createDeployer(target string, accessConfig string, deployConfig map[string]
return deployer, logger, err
}
case targetQiniuCDN:
case domain.DeployProviderTypeQiniuCDN:
{
access := &domain.QiniuAccessConfig{}
access := &domain.AccessConfigForQiniu{}
if err := json.Unmarshal([]byte(accessConfig), access); err != nil {
return nil, nil, fmt.Errorf("failed to unmarshal access config: %w", err)
}
@@ -243,9 +243,9 @@ func createDeployer(target string, accessConfig string, deployConfig map[string]
return deployer, logger, err
}
case targetSSH:
case domain.DeployProviderTypeSSH:
{
access := &domain.SSHAccessConfig{}
access := &domain.AccessConfigForSSH{}
if err := json.Unmarshal([]byte(accessConfig), access); err != nil {
return nil, nil, fmt.Errorf("failed to unmarshal access config: %w", err)
}
@@ -271,15 +271,15 @@ func createDeployer(target string, accessConfig string, deployConfig map[string]
return deployer, logger, err
}
case targetTencentCloudCDN, targetTencentCloudCLB, targetTencentCloudCOS, targetTencentCloudECDN, targetTencentCloudEO:
case domain.DeployProviderTypeTencentCloudCDN, domain.DeployProviderTypeTencentCloudCLB, domain.DeployProviderTypeTencentCloudCOS, domain.DeployProviderTypeTencentCloudECDN, domain.DeployProviderTypeTencentCloudEO:
{
access := &domain.TencentCloudAccessConfig{}
access := &domain.AccessConfigForTencentCloud{}
if err := json.Unmarshal([]byte(accessConfig), access); err != nil {
return nil, nil, fmt.Errorf("failed to unmarshal access config: %w", err)
}
switch target {
case targetTencentCloudCDN:
switch provider {
case domain.DeployProviderTypeTencentCloudCDN:
deployer, err := providerTencentCloudCDN.NewWithLogger(&providerTencentCloudCDN.TencentCloudCDNDeployerConfig{
SecretId: access.SecretId,
SecretKey: access.SecretKey,
@@ -287,7 +287,7 @@ func createDeployer(target string, accessConfig string, deployConfig map[string]
}, logger)
return deployer, logger, err
case targetTencentCloudCLB:
case domain.DeployProviderTypeTencentCloudCLB:
deployer, err := providerTencentCloudCLB.NewWithLogger(&providerTencentCloudCLB.TencentCloudCLBDeployerConfig{
SecretId: access.SecretId,
SecretKey: access.SecretKey,
@@ -299,7 +299,7 @@ func createDeployer(target string, accessConfig string, deployConfig map[string]
}, logger)
return deployer, logger, err
case targetTencentCloudCOS:
case domain.DeployProviderTypeTencentCloudCOS:
deployer, err := providerTencentCloudCOD.NewWithLogger(&providerTencentCloudCOD.TencentCloudCOSDeployerConfig{
SecretId: access.SecretId,
SecretKey: access.SecretKey,
@@ -309,7 +309,7 @@ func createDeployer(target string, accessConfig string, deployConfig map[string]
}, logger)
return deployer, logger, err
case targetTencentCloudECDN:
case domain.DeployProviderTypeTencentCloudECDN:
deployer, err := providerTencentCloudECDN.NewWithLogger(&providerTencentCloudECDN.TencentCloudECDNDeployerConfig{
SecretId: access.SecretId,
SecretKey: access.SecretKey,
@@ -317,7 +317,7 @@ func createDeployer(target string, accessConfig string, deployConfig map[string]
}, logger)
return deployer, logger, err
case targetTencentCloudEO:
case domain.DeployProviderTypeTencentCloudEO:
deployer, err := providerTencentCloudEO.NewWithLogger(&providerTencentCloudEO.TencentCloudEODeployerConfig{
SecretId: access.SecretId,
SecretKey: access.SecretKey,
@@ -331,15 +331,15 @@ func createDeployer(target string, accessConfig string, deployConfig map[string]
}
}
case targetVolcEngineCDN, targetVolcEngineLive:
case domain.DeployProviderTypeVolcEngineCDN, domain.DeployProviderTypeVolcEngineLive:
{
access := &domain.VolcEngineAccessConfig{}
access := &domain.AccessConfigForVolcEngine{}
if err := json.Unmarshal([]byte(accessConfig), access); err != nil {
return nil, nil, fmt.Errorf("failed to unmarshal access config: %w", err)
}
switch target {
case targetVolcEngineCDN:
switch provider {
case domain.DeployProviderTypeVolcEngineCDN:
deployer, err := providerVolcEngineCDN.NewWithLogger(&providerVolcEngineCDN.VolcEngineCDNDeployerConfig{
AccessKey: access.AccessKeyId,
SecretKey: access.SecretAccessKey,
@@ -347,7 +347,7 @@ func createDeployer(target string, accessConfig string, deployConfig map[string]
}, logger)
return deployer, logger, err
case targetVolcEngineLive:
case domain.DeployProviderTypeVolcEngineLive:
deployer, err := providerVolcEngineLive.NewWithLogger(&providerVolcEngineLive.VolcEngineLiveDeployerConfig{
AccessKey: access.AccessKeyId,
SecretKey: access.SecretAccessKey,
@@ -360,9 +360,9 @@ func createDeployer(target string, accessConfig string, deployConfig map[string]
}
}
case targetWebhook:
case domain.DeployProviderTypeWebhook:
{
access := &domain.WebhookAccessConfig{}
access := &domain.AccessConfigForWebhook{}
if err := json.Unmarshal([]byte(accessConfig), access); err != nil {
return nil, nil, fmt.Errorf("failed to unmarshal access config: %w", err)
}
@@ -375,5 +375,5 @@ func createDeployer(target string, accessConfig string, deployConfig map[string]
}
}
return nil, nil, fmt.Errorf("unsupported deployer target: %s", target)
return nil, nil, fmt.Errorf("unsupported deployer provider: %s", provider)
}