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  }