From 8ed715fd4f847bfb4e39a049071c25cf675ff756 Mon Sep 17 00:00:00 2001 From: Nicolas De Loof Date: Mon, 25 Apr 2016 09:43:03 +0200 Subject: [PATCH] Fixes #2302 Possibility to create master with manager, but without agent Signed-off-by: Nicolas De Loof --- commands/create.go | 5 ++- libmachine/provision/configure_swarm.go | 56 ++++++++++++++----------- libmachine/swarm/swarm.go | 1 + 3 files changed, 35 insertions(+), 27 deletions(-) diff --git a/commands/create.go b/commands/create.go index 4db9358308..49a633e8a1 100644 --- a/commands/create.go +++ b/commands/create.go @@ -81,7 +81,7 @@ var ( }, cli.BoolFlag{ Name: "swarm", - Usage: "Configure Machine with Swarm", + Usage: "Configure Machine to join a Swarm cluster", }, cli.StringFlag{ Name: "swarm-image", @@ -193,8 +193,9 @@ func cmdCreateInner(c CommandLine, api libmachine.API) error { InstallURL: c.String("engine-install-url"), }, SwarmOptions: &swarm.Options{ - IsSwarm: c.Bool("swarm"), + IsSwarm: c.Bool("swarm") || c.Bool("swarm-master"), Image: c.String("swarm-image"), + Agent: c.Bool("swarm"), Master: c.Bool("swarm-master"), Discovery: c.String("swarm-discovery"), Address: c.String("swarm-addr"), diff --git a/libmachine/provision/configure_swarm.go b/libmachine/provision/configure_swarm.go index 4243b990c2..8870ddd513 100644 --- a/libmachine/provision/configure_swarm.go +++ b/libmachine/provision/configure_swarm.go @@ -112,32 +112,38 @@ func configureSwarm(p Provisioner, swarmOptions swarm.Options, authOptions auth. } } - workerHostConfig := dockerclient.HostConfig{ - RestartPolicy: dockerclient.RestartPolicy{ - Name: "always", - MaximumRetryCount: 0, - }, - } + if swarmOptions.Agent { + workerHostConfig := dockerclient.HostConfig{ + RestartPolicy: dockerclient.RestartPolicy{ + Name: "always", + MaximumRetryCount: 0, + }, + } - cmdWorker := []string{ - "join", - "--advertise", - advertiseInfo, - } - for _, option := range swarmOptions.ArbitraryJoinFlags { - cmdWorker = append(cmdWorker, "--"+option) - } - cmdWorker = append(cmdWorker, swarmOptions.Discovery) + cmdWorker := []string{ + "join", + "--advertise", + advertiseInfo, + } + for _, option := range swarmOptions.ArbitraryJoinFlags { + cmdWorker = append(cmdWorker, "--"+option) + } + cmdWorker = append(cmdWorker, swarmOptions.Discovery) - swarmWorkerConfig := &dockerclient.ContainerConfig{ - Image: swarmOptions.Image, - Env: swarmOptions.Env, - Cmd: cmdWorker, - HostConfig: workerHostConfig, - } - if swarmOptions.IsExperimental { - swarmWorkerConfig.Cmd = append([]string{"--experimental"}, swarmWorkerConfig.Cmd...) - } + swarmWorkerConfig := &dockerclient.ContainerConfig{ + Image: swarmOptions.Image, + Env: swarmOptions.Env, + Cmd: cmdWorker, + HostConfig: workerHostConfig, + } + if swarmOptions.IsExperimental { + swarmWorkerConfig.Cmd = append([]string{"--experimental"}, swarmWorkerConfig.Cmd...) + } - return mcndockerclient.CreateContainer(dockerHost, swarmWorkerConfig, "swarm-agent") + err = mcndockerclient.CreateContainer(dockerHost, swarmWorkerConfig, "swarm-agent") + if err != nil { + return err + } + } + return nil } diff --git a/libmachine/swarm/swarm.go b/libmachine/swarm/swarm.go index ac2025aea1..ee45288390 100644 --- a/libmachine/swarm/swarm.go +++ b/libmachine/swarm/swarm.go @@ -8,6 +8,7 @@ type Options struct { IsSwarm bool Address string Discovery string + Agent bool Master bool Host string Image string