Skip to content

Commit

Permalink
refactor: rename runner -> system
Browse files Browse the repository at this point in the history
  • Loading branch information
jnsgruk committed Oct 31, 2024
1 parent deec1c0 commit 56d224e
Show file tree
Hide file tree
Showing 26 changed files with 329 additions and 329 deletions.
16 changes: 8 additions & 8 deletions internal/concierge/manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,27 +6,27 @@ import (
"path"

"github.com/jnsgruk/concierge/internal/config"
"github.com/jnsgruk/concierge/internal/runner"
"github.com/jnsgruk/concierge/internal/system"
"gopkg.in/yaml.v3"
)

// NewManager constructs a new instance of the concierge manager.
func NewManager(config *config.Config) (*Manager, error) {
runner, err := runner.NewRunner(config.Trace)
system, err := system.Newsystem(config.Trace)
if err != nil {
return nil, fmt.Errorf("failed to initialise runner: %w", err)
return nil, fmt.Errorf("failed to initialise system: %w", err)
}

return &Manager{
config: config,
runner: runner,
system: system,
}, nil
}

// Manager is a construct for controlling the main execution of concierge.
type Manager struct {
Plan *Plan
runner runner.CommandRunner
system system.Worker
config *config.Config
}

Expand Down Expand Up @@ -59,7 +59,7 @@ func (m *Manager) execute(action string) error {
}

// Create the installation/preparation plan
m.Plan = NewPlan(m.config, m.runner)
m.Plan = NewPlan(m.config, m.system)
return m.Plan.Execute(action)
}

Expand All @@ -72,7 +72,7 @@ func (m *Manager) recordRuntimeConfig() error {
}

filepath := path.Join(".cache", "concierge", "concierge.yaml")
err = m.runner.WriteHomeDirFile(filepath, configYaml)
err = m.system.WriteHomeDirFile(filepath, configYaml)
if err != nil {
return fmt.Errorf("failed to write runtime config file: %w", err)
}
Expand All @@ -86,7 +86,7 @@ func (m *Manager) recordRuntimeConfig() error {
func (m *Manager) loadRuntimeConfig() error {
recordPath := path.Join(".cache", "concierge", "concierge.yaml")

contents, err := m.runner.ReadHomeDirFile(recordPath)
contents, err := m.system.ReadHomeDirFile(recordPath)
if err != nil {
return fmt.Errorf("failed to read file: %w", err)
}
Expand Down
20 changes: 10 additions & 10 deletions internal/concierge/plan.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,26 +7,26 @@ import (
"github.com/jnsgruk/concierge/internal/juju"
"github.com/jnsgruk/concierge/internal/packages"
"github.com/jnsgruk/concierge/internal/providers"
"github.com/jnsgruk/concierge/internal/runner"
"github.com/jnsgruk/concierge/internal/system"
"golang.org/x/sync/errgroup"
)

// Plan represents a set of packages and providers that are to be prepared/restored.
type Plan struct {
Providers []providers.Provider
Snaps []*runner.Snap
Snaps []*system.Snap
Debs []*packages.Deb

config *config.Config
runner runner.CommandRunner
system system.Worker
}

// NewPlan constructs a new plan consisting of snaps/debs/providers & juju.
func NewPlan(config *config.Config, runner runner.CommandRunner) *Plan {
plan := &Plan{config: config, runner: runner}
func NewPlan(config *config.Config, system system.Worker) *Plan {
plan := &Plan{config: config, system: system}

for _, s := range append(config.Host.Snaps, config.Overrides.ExtraSnaps...) {
snap := runner.NewSnapFromString(s)
snap := system.NewSnapFromString(s)

// Check if the channel has been overridden by a CLI argument/env var
channelOverride := getSnapChannelOverride(config, snap.Name)
Expand All @@ -42,7 +42,7 @@ func NewPlan(config *config.Config, runner runner.CommandRunner) *Plan {
}

for _, providerName := range providers.SupportedProviders {
if p := providers.NewProvider(providerName, runner, config); p != nil {
if p := providers.NewProvider(providerName, system, config); p != nil {
plan.Providers = append(plan.Providers, p)
}
}
Expand All @@ -59,9 +59,9 @@ func (p *Plan) Execute(action string) error {

var eg errgroup.Group

snapHandler := packages.NewSnapHandler(p.runner, p.Snaps)
debHandler := packages.NewDebHandler(p.runner, p.Debs)
jujuHandler := juju.NewJujuHandler(p.config, p.runner, p.Providers)
snapHandler := packages.NewSnapHandler(p.system, p.Snaps)
debHandler := packages.NewDebHandler(p.system, p.Debs)
jujuHandler := juju.NewJujuHandler(p.config, p.system, p.Providers)

// Prepare/restore package handlers concurrently
eg.Go(func() error { return DoAction(snapHandler, action) })
Expand Down
10 changes: 5 additions & 5 deletions internal/concierge/plan_validators_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,33 +4,33 @@ import (
"testing"

"github.com/jnsgruk/concierge/internal/config"
"github.com/jnsgruk/concierge/internal/runner"
"github.com/jnsgruk/concierge/internal/system"
)

func TestSingleK8sValidator(t *testing.T) {
runner := runner.NewMockRunner()
system := system.NewMockSystem()

twoK8s := &config.Config{}
twoK8s.Providers.K8s.Enable = true
twoK8s.Providers.MicroK8s.Enable = true

plan := NewPlan(twoK8s, runner)
plan := NewPlan(twoK8s, system)
err := plan.validate()
if err == nil {
t.Fatalf("should not allow enabling two local kubernetes providers")
}

justK8s := &config.Config{}
justK8s.Providers.K8s.Enable = true
plan = NewPlan(justK8s, runner)
plan = NewPlan(justK8s, system)
err = plan.validate()
if err != nil {
t.Fatalf("single kubernetes provider should be permitted")
}

justMicroK8s := &config.Config{}
justMicroK8s.Providers.MicroK8s.Enable = true
plan = NewPlan(justMicroK8s, runner)
plan = NewPlan(justMicroK8s, system)
err = plan.validate()
if err != nil {
t.Fatalf("single kubernetes provider should be permitted")
Expand Down
42 changes: 21 additions & 21 deletions internal/juju/juju.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,13 @@ import (
"github.com/jnsgruk/concierge/internal/config"
"github.com/jnsgruk/concierge/internal/packages"
"github.com/jnsgruk/concierge/internal/providers"
"github.com/jnsgruk/concierge/internal/runner"
"github.com/jnsgruk/concierge/internal/system"
"golang.org/x/sync/errgroup"
"gopkg.in/yaml.v3"
)

// NewJujuHandler constructs a new JujuHandler instance.
func NewJujuHandler(config *config.Config, r runner.CommandRunner, providers []providers.Provider) *JujuHandler {
func NewJujuHandler(config *config.Config, r system.Worker, providers []providers.Provider) *JujuHandler {
var channel string
if config.Overrides.JujuChannel != "" {
channel = config.Overrides.JujuChannel
Expand All @@ -30,8 +30,8 @@ func NewJujuHandler(config *config.Config, r runner.CommandRunner, providers []p
bootstrapConstraints: config.Juju.BootstrapConstraints,
modelDefaults: config.Juju.ModelDefaults,
providers: providers,
runner: r,
snaps: []*runner.Snap{{Name: "juju", Channel: channel}},
system: r,
snaps: []*system.Snap{{Name: "juju", Channel: channel}},
}
}

Expand All @@ -41,8 +41,8 @@ type JujuHandler struct {
bootstrapConstraints map[string]string
modelDefaults map[string]string
providers []providers.Provider
runner runner.CommandRunner
snaps []*runner.Snap
system system.Worker
snaps []*system.Snap
}

// Prepare bootstraps Juju on the configured providers.
Expand All @@ -54,7 +54,7 @@ func (j *JujuHandler) Prepare() error {

dir := path.Join(".local", "share", "juju")

err = j.runner.MkHomeSubdirectory(dir)
err = j.system.MkHomeSubdirectory(dir)
if err != nil {
return fmt.Errorf("failed to create directory '%s': %w", dir, err)
}
Expand Down Expand Up @@ -86,12 +86,12 @@ func (j *JujuHandler) Restore() error {
}
}

err := j.runner.RemoveAllHome(path.Join(".local", "share", "juju"))
err := j.system.RemoveAllHome(path.Join(".local", "share", "juju"))
if err != nil {
return fmt.Errorf("failed to remove '.local/share/juju' subdirectory from user's home directory: %w", err)
}

snapHandler := packages.NewSnapHandler(j.runner, j.snaps)
snapHandler := packages.NewSnapHandler(j.system, j.snaps)

err = snapHandler.Restore()
if err != nil {
Expand All @@ -105,7 +105,7 @@ func (j *JujuHandler) Restore() error {

// install ensures that Juju is installed.
func (j *JujuHandler) install() error {
snapHandler := packages.NewSnapHandler(j.runner, j.snaps)
snapHandler := packages.NewSnapHandler(j.system, j.snaps)

err := snapHandler.Prepare()
if err != nil {
Expand Down Expand Up @@ -148,7 +148,7 @@ func (j *JujuHandler) writeCredentials() error {
return fmt.Errorf("failed to marshal juju credentials to yaml: %w", err)
}

err = j.runner.WriteHomeDirFile(path.Join(".local", "share", "juju", "credentials.yaml"), content)
err = j.system.WriteHomeDirFile(path.Join(".local", "share", "juju", "credentials.yaml"), content)
if err != nil {
return fmt.Errorf("failed to write credentials.yaml: %w", err)
}
Expand Down Expand Up @@ -209,16 +209,16 @@ func (j *JujuHandler) bootstrapProvider(provider providers.Provider) error {
bootstrapArgs = append(bootstrapArgs, "--bootstrap-constraints", fmt.Sprintf("%s=%s", k, j.bootstrapConstraints[k]))
}

user := j.runner.User().Username
user := j.system.User().Username

cmd := runner.NewCommandAs(user, provider.GroupName(), "juju", bootstrapArgs)
_, err = j.runner.RunWithRetries(cmd, (5 * time.Minute))
cmd := system.NewCommandAs(user, provider.GroupName(), "juju", bootstrapArgs)
_, err = j.system.RunWithRetries(cmd, (5 * time.Minute))
if err != nil {
return err
}

cmd = runner.NewCommandAs(user, "", "juju", []string{"add-model", "-c", controllerName, "testing"})
_, err = j.runner.Run(cmd)
cmd = system.NewCommandAs(user, "", "juju", []string{"add-model", "-c", controllerName, "testing"})
_, err = j.system.Run(cmd)
if err != nil {
return err
}
Expand All @@ -245,8 +245,8 @@ func (j *JujuHandler) killProvider(provider providers.Provider) error {

killArgs := []string{"kill-controller", "--verbose", "--no-prompt", controllerName}

cmd := runner.NewCommandAs(j.runner.User().Username, "", "juju", killArgs)
_, err = j.runner.Run(cmd)
cmd := system.NewCommandAs(j.system.User().Username, "", "juju", killArgs)
_, err = j.system.Run(cmd)
if err != nil {
return fmt.Errorf("failed to destroy controller: '%s': %w", controllerName, err)
}
Expand All @@ -257,10 +257,10 @@ func (j *JujuHandler) killProvider(provider providers.Provider) error {

// checkBootstrapped checks whether concierge has already been bootstrapped on a given provider.
func (j *JujuHandler) checkBootstrapped(controllerName string) (bool, error) {
user := j.runner.User().Username
cmd := runner.NewCommandAs(user, "", "juju", []string{"show-controller", controllerName})
user := j.system.User().Username
cmd := system.NewCommandAs(user, "", "juju", []string{"show-controller", controllerName})

result, err := j.runner.Run(cmd)
result, err := j.system.Run(cmd)
if err != nil && strings.Contains(string(result), "not found") {
return false, nil
} else if err != nil {
Expand Down
Loading

0 comments on commit 56d224e

Please sign in to comment.