github.com/noxiouz/docker@v0.7.3-0.20160629055221-3d231c78e8c5/api/client/swarm/init.go (about) 1 package swarm 2 3 import ( 4 "fmt" 5 6 "golang.org/x/net/context" 7 8 "github.com/docker/docker/api/client" 9 "github.com/docker/docker/cli" 10 "github.com/docker/engine-api/types/swarm" 11 "github.com/spf13/cobra" 12 "github.com/spf13/pflag" 13 ) 14 15 type initOptions struct { 16 swarmOptions 17 listenAddr NodeAddrOption 18 forceNewCluster bool 19 } 20 21 func newInitCommand(dockerCli *client.DockerCli) *cobra.Command { 22 opts := initOptions{ 23 listenAddr: NewListenAddrOption(), 24 swarmOptions: swarmOptions{ 25 autoAccept: NewAutoAcceptOption(), 26 }, 27 } 28 29 cmd := &cobra.Command{ 30 Use: "init", 31 Short: "Initialize a Swarm", 32 Args: cli.NoArgs, 33 RunE: func(cmd *cobra.Command, args []string) error { 34 return runInit(dockerCli, cmd.Flags(), opts) 35 }, 36 } 37 38 flags := cmd.Flags() 39 flags.Var(&opts.listenAddr, "listen-addr", "Listen address") 40 flags.BoolVar(&opts.forceNewCluster, "force-new-cluster", false, "Force create a new cluster from current state.") 41 addSwarmFlags(flags, &opts.swarmOptions) 42 return cmd 43 } 44 45 func runInit(dockerCli *client.DockerCli, flags *pflag.FlagSet, opts initOptions) error { 46 client := dockerCli.Client() 47 ctx := context.Background() 48 49 req := swarm.InitRequest{ 50 ListenAddr: opts.listenAddr.String(), 51 ForceNewCluster: opts.forceNewCluster, 52 Spec: opts.swarmOptions.ToSpec(), 53 } 54 55 nodeID, err := client.SwarmInit(ctx, req) 56 if err != nil { 57 return err 58 } 59 fmt.Printf("Swarm initialized: current node (%s) is now a manager.\n", nodeID) 60 return nil 61 }