github.com/kobeld/docker@v1.12.0-rc1/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 ) 13 14 type initOptions struct { 15 listenAddr NodeAddrOption 16 autoAccept AutoAcceptOption 17 forceNewCluster bool 18 secret string 19 } 20 21 func newInitCommand(dockerCli *client.DockerCli) *cobra.Command { 22 opts := initOptions{ 23 listenAddr: NewNodeAddrOption(), 24 autoAccept: NewAutoAcceptOption(), 25 } 26 27 cmd := &cobra.Command{ 28 Use: "init", 29 Short: "Initialize a Swarm.", 30 Args: cli.NoArgs, 31 RunE: func(cmd *cobra.Command, args []string) error { 32 return runInit(dockerCli, opts) 33 }, 34 } 35 36 flags := cmd.Flags() 37 flags.Var(&opts.listenAddr, "listen-addr", "Listen address") 38 flags.Var(&opts.autoAccept, "auto-accept", "Auto acceptance policy (worker, manager, or none)") 39 flags.StringVar(&opts.secret, "secret", "", "Set secret value needed to accept nodes into cluster") 40 flags.BoolVar(&opts.forceNewCluster, "force-new-cluster", false, "Force create a new cluster from current state.") 41 return cmd 42 } 43 44 func runInit(dockerCli *client.DockerCli, opts initOptions) error { 45 client := dockerCli.Client() 46 ctx := context.Background() 47 48 req := swarm.InitRequest{ 49 ListenAddr: opts.listenAddr.String(), 50 ForceNewCluster: opts.forceNewCluster, 51 } 52 53 req.Spec.AcceptancePolicy.Policies = opts.autoAccept.Policies(opts.secret) 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 }