Skip to content

Commit

Permalink
Add --auto-restart flag for the create command
Browse files Browse the repository at this point in the history
When creating clusters with the --auto-restart flag, any running cluster
will remain "running" up on docker daemon restart.

By default, without this flag, a "running" cluster becomes "stopped"
after docker daemon restart.

Clusters stopped with 'k3d stop' command will remain stopped after
docker daemon restart regardless the settings of this flag.
  • Loading branch information
andyz-dev committed May 21, 2019
1 parent ba231f5 commit b9713c4
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 2 deletions.
2 changes: 2 additions & 0 deletions cli/commands.go
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,7 @@ func CreateCluster(c *cli.Context) error {
c.String("name"),
c.StringSlice("volume"),
portmap,
c.Bool("auto-restart"),
)
if err != nil {
log.Printf("ERROR: failed to create cluster\n%+v", err)
Expand Down Expand Up @@ -196,6 +197,7 @@ func CreateCluster(c *cli.Context) error {
c.String("api-port"),
portmap,
c.Int("port-auto-offset"),
c.Bool("auto-restart"),
)
if err != nil {
return fmt.Errorf("ERROR: failed to create worker node for cluster %s\n%+v", c.String("name"), err)
Expand Down
12 changes: 10 additions & 2 deletions cli/container.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ func startContainer(verbose bool, config *container.Config, hostConfig *containe
}

func createServer(verbose bool, image string, apiPort string, args []string, env []string,
name string, volumes []string, nodeToPortSpecMap map[string][]string) (string, error) {
name string, volumes []string, nodeToPortSpecMap map[string][]string, autoRestart bool) (string, error) {
log.Printf("Creating server using %s...\n", image)

containerLabels := make(map[string]string)
Expand Down Expand Up @@ -95,6 +95,10 @@ func createServer(verbose bool, image string, apiPort string, args []string, env
Privileged: true,
}

if autoRestart {
hostConfig.RestartPolicy.Name = "unless-stopped"
}

if len(volumes) > 0 && volumes[0] != "" {
hostConfig.Binds = volumes
}
Expand Down Expand Up @@ -125,7 +129,7 @@ func createServer(verbose bool, image string, apiPort string, args []string, env

// createWorker creates/starts a k3s agent node that connects to the server
func createWorker(verbose bool, image string, args []string, env []string, name string, volumes []string,
postfix int, serverPort string, nodeToPortSpecMap map[string][]string, portAutoOffset int) (string, error) {
postfix int, serverPort string, nodeToPortSpecMap map[string][]string, portAutoOffset int, autoRestart bool) (string, error) {
containerLabels := make(map[string]string)
containerLabels["app"] = "k3d"
containerLabels["component"] = "worker"
Expand Down Expand Up @@ -161,6 +165,10 @@ func createWorker(verbose bool, image string, args []string, env []string, name
Privileged: true,
}

if autoRestart {
hostConfig.RestartPolicy.Name = "unless-stopped"
}

if len(volumes) > 0 && volumes[0] != "" {
hostConfig.Binds = volumes
}
Expand Down
4 changes: 4 additions & 0 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,10 @@ func main() {
Value: 0,
Usage: "Specify how many worker nodes you want to spawn",
},
cli.BoolFlag{
Name: "auto-restart",
Usage: "Set docker's --restart=unless-stopped flag on the containers",
},
},
Action: run.CreateCluster,
},
Expand Down

0 comments on commit b9713c4

Please sign in to comment.