diff --git a/internal/agent/reset.go b/internal/agent/reset.go index 56509b6..1e5963b 100644 --- a/internal/agent/reset.go +++ b/internal/agent/reset.go @@ -3,10 +3,6 @@ package agent import ( "encoding/json" "fmt" - "os" - "sync" - "time" - hook "github.com/kairos-io/kairos-agent/v2/internal/agent/hooks" "github.com/kairos-io/kairos-agent/v2/internal/bus" "github.com/kairos-io/kairos-agent/v2/internal/cmd" @@ -16,43 +12,48 @@ import ( "github.com/kairos-io/kairos-sdk/collector" "github.com/kairos-io/kairos-sdk/machine" "github.com/kairos-io/kairos-sdk/utils" + "os" + "sync" + "time" "github.com/mudler/go-pluggable" ) -func Reset(dir ...string) error { +func Reset(reboot, unattended bool, dir ...string) error { bus.Manager.Initialize() - - cmd.PrintBranding(DefaultBanner) - + // This config is only for reset branding. agentConfig, err := LoadConfig() if err != nil { return err } - cmd.PrintText(agentConfig.Branding.Reset, "Reset") + if !unattended { + cmd.PrintBranding(DefaultBanner) + cmd.PrintText(agentConfig.Branding.Reset, "Reset") - // We don't close the lock, as none of the following actions are expected to return - lock := sync.Mutex{} - go func() { - // Wait for user input and go back to shell - utils.Prompt("") //nolint:errcheck - // give tty1 back - svc, err := machine.Getty(1) - if err == nil { - svc.Start() //nolint:errcheck + // We don't close the lock, as none of the following actions are expected to return + lock := sync.Mutex{} + go func() { + // Wait for user input and go back to shell + utils.Prompt("") //nolint:errcheck + // give tty1 back + svc, err := machine.Getty(1) + if err == nil { + svc.Start() //nolint:errcheck + } + + lock.Lock() + fmt.Println("Reset aborted") + panic(utils.Shell().Run()) + }() + + if !agentConfig.Fast { + time.Sleep(60 * time.Second) } lock.Lock() - fmt.Println("Reset aborted") - panic(utils.Shell().Run()) - }() - - if !agentConfig.Fast { - time.Sleep(60 * time.Second) } - lock.Lock() ensureDataSourceReady() @@ -95,6 +96,11 @@ func Reset(dir ...string) error { } } + // Override with flags + if reboot { + resetSpec.Reboot = reboot + } + resetAction := action.NewResetAction(c, resetSpec) if err := resetAction.Run(); err != nil { fmt.Println(err) diff --git a/main.go b/main.go index 9235b42..60d9b76 100644 --- a/main.go +++ b/main.go @@ -446,9 +446,21 @@ This command is meant to be used from the boot GRUB menu, but can likely be used }, { Name: "reset", + Flags: []cli.Flag{ + &cli.BoolFlag{ + Name: "reboot", + Usage: "Enable automated reboot after reset. Has precedence over any config in the system.", + }, + &cli.BoolFlag{ + Name: "unattended", + Usage: "Do not wait for user input and provide ttys after reset. Also sets the fast mode (do not wait 60 seconds before reset)", + }, + }, Action: func(c *cli.Context) error { + reboot := c.Bool("reboot") + unattended := c.Bool("unattended") - return agent.Reset(configScanDir...) + return agent.Reset(reboot, unattended, configScanDir...) }, Usage: "Starts kairos reset mode", Description: `