chore: add k8s and docker as service to agent and update logic for ansible deploy
ci-agent / build (push) Failing after 2m35s
ci-agent / build (push) Failing after 2m35s
This commit is contained in:
@@ -7,32 +7,39 @@ import (
|
||||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"sync"
|
||||
)
|
||||
|
||||
// ErrUnknownDeployType is returned when an unsupported deployment type is specified
|
||||
var ErrUnknownDeployType = fmt.Errorf("unknown deploy type, expected 'docker' or 'binary'")
|
||||
|
||||
// Executor handles running Ansible playbooks
|
||||
type Executor struct {
|
||||
workDir string
|
||||
grpcServerHost string
|
||||
grpcServerPort string
|
||||
backendURL string
|
||||
workDir string
|
||||
grpcServerHost string
|
||||
grpcServerPort string
|
||||
backendURL string
|
||||
giteaReleasesURL string
|
||||
}
|
||||
|
||||
// ExecutorConfig holds configuration for the Executor
|
||||
type ExecutorConfig struct {
|
||||
WorkDir string
|
||||
GRPCServerHost string
|
||||
GRPCServerPort string
|
||||
BackendURL string
|
||||
WorkDir string
|
||||
GRPCServerHost string
|
||||
GRPCServerPort string
|
||||
BackendURL string
|
||||
GiteaReleasesURL string
|
||||
}
|
||||
|
||||
// NewExecutor creates a new Ansible executor
|
||||
func NewExecutor(cfg ExecutorConfig) *Executor {
|
||||
return &Executor{
|
||||
workDir: cfg.WorkDir,
|
||||
grpcServerHost: cfg.GRPCServerHost,
|
||||
grpcServerPort: cfg.GRPCServerPort,
|
||||
backendURL: cfg.BackendURL,
|
||||
workDir: cfg.WorkDir,
|
||||
grpcServerHost: cfg.GRPCServerHost,
|
||||
grpcServerPort: cfg.GRPCServerPort,
|
||||
backendURL: cfg.BackendURL,
|
||||
giteaReleasesURL: cfg.GiteaReleasesURL,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -55,12 +62,42 @@ func (e *Executor) GRPCURL() string {
|
||||
return e.grpcServerHost + ":" + e.grpcServerPort
|
||||
}
|
||||
|
||||
// CheckDockerCollection verifies that the community.docker Ansible collection is installed.
|
||||
// Returns an error if the collection is not found.
|
||||
func (e *Executor) CheckDockerCollection() error {
|
||||
cmd := exec.Command("ansible-galaxy", "collection", "list", "community.docker")
|
||||
var stdout, stderr bytes.Buffer
|
||||
cmd.Stdout = &stdout
|
||||
cmd.Stderr = &stderr
|
||||
|
||||
if err := cmd.Run(); err != nil {
|
||||
return fmt.Errorf("community.docker collection not found: %s", stderr.String())
|
||||
}
|
||||
|
||||
// ansible-galaxy collection list returns output like:
|
||||
// # /usr/share/ansible/collections/ansible_collections
|
||||
// Collection Version
|
||||
// ---------------- -------
|
||||
// community.docker 3.10.0
|
||||
//
|
||||
// If the collection is not installed, it won't appear in the output.
|
||||
if !strings.Contains(stdout.String(), "community.docker") {
|
||||
return fmt.Errorf("community.docker collection is not installed. Run: ansible-galaxy collection install community.docker")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// Deploy runs Ansible playbook for the given inventory
|
||||
func (e *Executor) Deploy(
|
||||
ctx context.Context,
|
||||
inventoryPath string,
|
||||
deployType string,
|
||||
) ([]DeployResult, error) {
|
||||
if deployType != "docker" && deployType != "binary" {
|
||||
return nil, fmt.Errorf("invalid deploy type %q: %w", deployType, ErrUnknownDeployType)
|
||||
}
|
||||
|
||||
playbookName := "binary_deploy.yml"
|
||||
if deployType == "docker" {
|
||||
playbookName = "docker_deploy.yml"
|
||||
@@ -72,6 +109,7 @@ func (e *Executor) Deploy(
|
||||
"-i", inventoryPath,
|
||||
"-e", fmt.Sprintf("backend_url=%s", e.backendURL),
|
||||
"-e", fmt.Sprintf("grpc_url=%s", e.grpcServerHost+":"+e.grpcServerPort),
|
||||
"-e", fmt.Sprintf("gitea_releases_url=%s", e.giteaReleasesURL),
|
||||
playbookPath,
|
||||
)
|
||||
|
||||
@@ -100,6 +138,7 @@ func (e *Executor) DeployParallel(
|
||||
deployType string,
|
||||
) (map[string][]DeployResult, error) {
|
||||
var wg sync.WaitGroup
|
||||
var mu sync.Mutex
|
||||
results := make(map[string][]DeployResult)
|
||||
errCh := make(chan error, len(inventoryPaths))
|
||||
|
||||
@@ -111,7 +150,9 @@ func (e *Executor) DeployParallel(
|
||||
if err != nil {
|
||||
errCh <- err
|
||||
}
|
||||
mu.Lock()
|
||||
results[p] = res
|
||||
mu.Unlock()
|
||||
}(path)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user