mirror of
https://github.com/usual2970/certimate.git
synced 2025-06-07 21:19:51 +00:00
73 lines
1.9 KiB
Go
73 lines
1.9 KiB
Go
package deployer
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"log/slog"
|
|
|
|
"github.com/usual2970/certimate/internal/domain"
|
|
"github.com/usual2970/certimate/internal/pkg/core/deployer"
|
|
"github.com/usual2970/certimate/internal/repository"
|
|
)
|
|
|
|
type Deployer interface {
|
|
Deploy(ctx context.Context) error
|
|
}
|
|
|
|
type DeployerWithWorkflowNodeConfig struct {
|
|
Node *domain.WorkflowNode
|
|
Logger *slog.Logger
|
|
CertificatePEM string
|
|
PrivateKeyPEM string
|
|
}
|
|
|
|
func NewWithWorkflowNode(config DeployerWithWorkflowNodeConfig) (Deployer, error) {
|
|
if config.Node == nil {
|
|
return nil, fmt.Errorf("node is nil")
|
|
}
|
|
if config.Node.Type != domain.WorkflowNodeTypeDeploy {
|
|
return nil, fmt.Errorf("node type is not '%s'", string(domain.WorkflowNodeTypeDeploy))
|
|
}
|
|
|
|
nodeConfig := config.Node.GetConfigForDeploy()
|
|
options := &deployerProviderOptions{
|
|
Provider: domain.DeploymentProviderType(nodeConfig.Provider),
|
|
ProviderAccessConfig: make(map[string]any),
|
|
ProviderExtendedConfig: nodeConfig.ProviderConfig,
|
|
}
|
|
|
|
accessRepo := repository.NewAccessRepository()
|
|
if nodeConfig.ProviderAccessId != "" {
|
|
access, err := accessRepo.GetById(context.Background(), nodeConfig.ProviderAccessId)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to get access #%s record: %w", nodeConfig.ProviderAccessId, err)
|
|
} else {
|
|
options.ProviderAccessConfig = access.Config
|
|
}
|
|
}
|
|
|
|
deployerProvider, err := createDeployerProvider(options)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &deployerImpl{
|
|
provider: deployerProvider.WithLogger(config.Logger),
|
|
certPEM: config.CertificatePEM,
|
|
privkeyPEM: config.PrivateKeyPEM,
|
|
}, nil
|
|
}
|
|
|
|
type deployerImpl struct {
|
|
provider deployer.Deployer
|
|
certPEM string
|
|
privkeyPEM string
|
|
}
|
|
|
|
var _ Deployer = (*deployerImpl)(nil)
|
|
|
|
func (d *deployerImpl) Deploy(ctx context.Context) error {
|
|
_, err := d.provider.Deploy(ctx, d.certPEM, d.privkeyPEM)
|
|
return err
|
|
}
|