diff --git a/cmd/hepto/config.go b/cmd/hepto/config.go index 4048d22a989f050c94d0bb388d42d2829d3c1c50..d2f1e65e7a7d4855f5a511c5962d7723b39b7427 100644 --- a/cmd/hepto/config.go +++ b/cmd/hepto/config.go @@ -16,6 +16,7 @@ import ( type Config struct { DataDir string BypassIPCheck bool + Shell string Logger logr.Logger LogLevel int Cluster cluster.ClusterSettings @@ -26,6 +27,10 @@ type Config struct { var config Config func (c *Config) Complete() error { + // Mount a shell if required + if c.Shell != "" { + c.Container.Mounts[c.Shell] = c.Shell + } // Initialize logging, default to warn level zapLogger, err := NewLogger(c.LogLevel) if err != nil { @@ -61,6 +66,7 @@ func init() { // General config Hepto.Flags().CountVarP(&config.LogLevel, "verbose", "v", "Make logs more verbose") + Hepto.Flags().StringVar(&config.Shell, "shell", "", "Path to a debug shell instead of hepto") Hepto.Flags().StringVar(&config.DataDir, "data", "/var/lib", "Data root directory") Hepto.Flags().BoolVar(&config.BypassIPCheck, "bypass-ip-check", false, "Bypass initial IP check") diff --git a/cmd/hepto/root.go b/cmd/hepto/root.go index d8ec8e40b57e5b68c6757964ff62a2347eb993ab..83827368bd5438554ca166629c2b161408f37055 100644 --- a/cmd/hepto/root.go +++ b/cmd/hepto/root.go @@ -3,6 +3,8 @@ package hepto import ( "fmt" "net" + "os" + "os/exec" "time" "forge.tedomum.net/acides/hepto/hepto/pkg/cluster" @@ -18,6 +20,19 @@ var Hepto = &cobra.Command{ Run: func(cmd *cobra.Command, args []string) { config.Complete() err := selfcontain.RunFun(&config.Container, func() { + cluster.Sysctl() + }, func() { + if config.Shell != "" { + cmd := exec.Command(config.Shell) + cmd.Stdin = os.Stdin + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + err := cmd.Run() + if err != nil { + config.Logger.Error(err, "could not run shell") + } + return + } config.Node.IP = waitForIP() config.Logger.Info("found current IP", "ip", config.Node.IP.String()) c := cluster.New(&config.Cluster, &config.Node)