github.com/kaisenlinux/docker.io@v0.0.0-20230510090727-ea55db55fac7/swarmkit/cmd/swarmctl/service/create.go (about)

     1  package service
     2  
     3  import (
     4  	"errors"
     5  	"fmt"
     6  
     7  	"github.com/docker/swarmkit/api"
     8  	"github.com/docker/swarmkit/cmd/swarmctl/common"
     9  	"github.com/docker/swarmkit/cmd/swarmctl/service/flagparser"
    10  	"github.com/spf13/cobra"
    11  )
    12  
    13  var (
    14  	createCmd = &cobra.Command{
    15  		Use:   "create",
    16  		Short: "Create a service",
    17  		RunE: func(cmd *cobra.Command, args []string) error {
    18  			if len(args) != 0 {
    19  				return errors.New("create command takes no arguments")
    20  			}
    21  
    22  			if !cmd.Flags().Changed("name") || !cmd.Flags().Changed("image") {
    23  				return errors.New("--name and --image are mandatory")
    24  			}
    25  
    26  			c, err := common.Dial(cmd)
    27  			if err != nil {
    28  				return err
    29  			}
    30  
    31  			spec := &api.ServiceSpec{
    32  				Mode: &api.ServiceSpec_Replicated{
    33  					Replicated: &api.ReplicatedService{
    34  						Replicas: 1,
    35  					},
    36  				},
    37  				Task: api.TaskSpec{
    38  					Runtime: &api.TaskSpec_Container{
    39  						Container: &api.ContainerSpec{},
    40  					},
    41  				},
    42  			}
    43  
    44  			if err := flagparser.Merge(cmd, spec, c); err != nil {
    45  				return err
    46  			}
    47  
    48  			if err := flagparser.ParseAddSecret(cmd, spec, "secret"); err != nil {
    49  				return err
    50  			}
    51  
    52  			r, err := c.CreateService(common.Context(cmd), &api.CreateServiceRequest{Spec: spec})
    53  			if err != nil {
    54  				return err
    55  			}
    56  			fmt.Println(r.Service.ID)
    57  			return nil
    58  		},
    59  	}
    60  )
    61  
    62  func init() {
    63  	flags := createCmd.Flags()
    64  	flagparser.AddServiceFlags(flags)
    65  	flags.String("mode", "replicated", "one of replicated, global")
    66  	flags.StringSlice("secret", nil, "add a secret from swarm")
    67  }