94 lines
1.8 KiB
Go
94 lines
1.8 KiB
Go
package external
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
)
|
|
|
|
// Manager coordinates external tools
|
|
type Manager struct {
|
|
kubectl *KubectlTool
|
|
talosctl *TalosctlTool
|
|
restic *ResticTool
|
|
tools map[string]Tool
|
|
}
|
|
|
|
// NewManager creates a new tool manager
|
|
func NewManager() *Manager {
|
|
kubectl := NewKubectlTool()
|
|
talosctl := NewTalosctlTool()
|
|
restic := NewResticTool()
|
|
|
|
tools := map[string]Tool{
|
|
"kubectl": kubectl,
|
|
"talosctl": talosctl,
|
|
"restic": restic,
|
|
}
|
|
|
|
return &Manager{
|
|
kubectl: kubectl,
|
|
talosctl: talosctl,
|
|
restic: restic,
|
|
tools: tools,
|
|
}
|
|
}
|
|
|
|
// Kubectl returns the kubectl tool
|
|
func (m *Manager) Kubectl() *KubectlTool {
|
|
return m.kubectl
|
|
}
|
|
|
|
// Talosctl returns the talosctl tool
|
|
func (m *Manager) Talosctl() *TalosctlTool {
|
|
return m.talosctl
|
|
}
|
|
|
|
// Restic returns the restic tool
|
|
func (m *Manager) Restic() *ResticTool {
|
|
return m.restic
|
|
}
|
|
|
|
// CheckTools verifies that required tools are available
|
|
func (m *Manager) CheckTools(ctx context.Context, required []string) error {
|
|
missing := make([]string, 0)
|
|
|
|
for _, toolName := range required {
|
|
tool, exists := m.tools[toolName]
|
|
if !exists {
|
|
missing = append(missing, toolName)
|
|
continue
|
|
}
|
|
|
|
if !tool.IsInstalled() {
|
|
missing = append(missing, toolName)
|
|
}
|
|
}
|
|
|
|
if len(missing) > 0 {
|
|
return fmt.Errorf("missing required tools: %v", missing)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// GetToolVersion returns the version of a tool
|
|
func (m *Manager) GetToolVersion(toolName string) (string, error) {
|
|
tool, exists := m.tools[toolName]
|
|
if !exists {
|
|
return "", fmt.Errorf("tool %s not found", toolName)
|
|
}
|
|
|
|
return tool.Version()
|
|
}
|
|
|
|
// ListTools returns information about all tools
|
|
func (m *Manager) ListTools() map[string]bool {
|
|
status := make(map[string]bool)
|
|
|
|
for name, tool := range m.tools {
|
|
status[name] = tool.IsInstalled()
|
|
}
|
|
|
|
return status
|
|
}
|