diff --git a/cmd/control/console_init.go b/cmd/control/console_init.go index d014fd31..5d5b0990 100644 --- a/cmd/control/console_init.go +++ b/cmd/control/console_init.go @@ -104,7 +104,7 @@ func consoleInitFunc() error { continue } if _, ok := serviceConfig.Labels[config.UserDockerLabel]; ok { - err = util.GenerateEngineScript(serviceConfig.Labels[config.UserDockerLabel]) + err = util.GenerateDindEngineScript(serviceConfig.Labels[config.UserDockerLabel]) if err != nil { log.Errorf("Failed to generate engine script: %v", err) continue diff --git a/cmd/control/engine.go b/cmd/control/engine.go index 5e41f164..158bf607 100644 --- a/cmd/control/engine.go +++ b/cmd/control/engine.go @@ -39,7 +39,7 @@ func engineSubcommands() []cli.Command { return []cli.Command{ { Name: "switch", - Usage: "switch Docker engine without a reboot", + Usage: "switch user Docker engine without a reboot", Action: engineSwitch, Flags: []cli.Flag{ cli.BoolFlag{ @@ -54,7 +54,7 @@ func engineSubcommands() []cli.Command { }, { Name: "create", - Usage: "create Docker engine without a reboot", + Usage: "create user Docker engine without a reboot", ArgsUsage: "", Before: preFlightValidate, Action: engineCreate, @@ -85,7 +85,7 @@ func engineSubcommands() []cli.Command { }, { Name: "rm", - Usage: "remove Docker engine without a reboot", + Usage: "remove Dind engine without a reboot", ArgsUsage: "", Before: func(c *cli.Context) error { if len(c.Args()) != 1 { @@ -93,31 +93,27 @@ func engineSubcommands() []cli.Command { } return nil }, - Action: engineRemove, + Action: dindEngineRemove, Flags: []cli.Flag{ cli.IntFlag{ Name: "timeout,t", - Usage: "Specify a shutdown timeout in seconds.", + Usage: "specify a shutdown timeout in seconds", Value: 10, }, cli.BoolFlag{ - Name: "force,f", - Usage: "Allow deletion of all services", - }, - cli.BoolFlag{ - Name: "v", - Usage: "Remove volumes associated with containers", + Name: "force, f", + Usage: "do not prompt for input", }, }, }, { Name: "enable", - Usage: "set Docker engine to be switched on next reboot", + Usage: "set user Docker engine to be switched on next reboot", Action: engineEnable, }, { Name: "list", - Usage: "list available Docker engines", + Usage: "list available Docker engines (include the Dind engines)", Action: engineList, }, } @@ -189,7 +185,7 @@ func engineCreate(c *cli.Context) error { } // generate engine script - err = util.GenerateEngineScript(name) + err = util.GenerateDindEngineScript(name) if err != nil { log.Fatal(err) } @@ -197,7 +193,19 @@ func engineCreate(c *cli.Context) error { return nil } -func engineRemove(c *cli.Context) error { +func dindEngineRemove(c *cli.Context) error { + if !c.Bool("force") { + if !yes("Continue") { + return nil + } + } + + // app.ProjectDelete needs to use this flag + // Allow deletion of the Dind engine + c.Set("force", "true") + // Remove volumes associated with the Dind engine container + c.Set("v", "true") + name := c.Args()[0] cfg := config.LoadConfig() p, err := compose.GetProject(cfg, true, false) @@ -239,6 +247,12 @@ func engineRemove(c *cli.Context) error { log.Fatal(err) } + // 5. remove dind engine script + err = util.RemoveDindEngineScript(name) + if err != nil { + return err + } + return nil } diff --git a/util/util.go b/util/util.go index e0fd538a..e1413cc8 100644 --- a/util/util.go +++ b/util/util.go @@ -296,12 +296,9 @@ func RunCommandSequence(commandSequence []osYaml.StringandSlice) error { return nil } -func GenerateEngineScript(name string) error { - if _, err := os.Stat("/usr/bin/docker-" + name); err == nil { - err = os.Remove("/usr/bin/docker-" + name) - if err != nil { - return err - } +func GenerateDindEngineScript(name string) error { + if err := RemoveDindEngineScript(name); err != nil { + return err } bytes := []byte("/usr/bin/docker -H unix:///var/lib/m-user-docker/" + name + "/docker-" + name + ".sock $@") @@ -313,3 +310,13 @@ func GenerateEngineScript(name string) error { return nil } + +func RemoveDindEngineScript(name string) error { + if _, err := os.Stat("/usr/bin/docker-" + name); err == nil { + err = os.Remove("/usr/bin/docker-" + name) + if err != nil { + return err + } + } + return nil +}