github.com/kaisenlinux/docker.io@v0.0.0-20230510090727-ea55db55fac7/swarmkit/cmd/swarmctl/common/common.go (about) 1 package common 2 3 import ( 4 "context" 5 "crypto/tls" 6 "net" 7 "strings" 8 "time" 9 10 "github.com/docker/swarmkit/api" 11 "github.com/docker/swarmkit/xnet" 12 "github.com/spf13/cobra" 13 "github.com/spf13/pflag" 14 "google.golang.org/grpc" 15 "google.golang.org/grpc/credentials" 16 ) 17 18 // Dial establishes a connection and creates a client. 19 // It infers connection parameters from CLI options. 20 func Dial(cmd *cobra.Command) (api.ControlClient, error) { 21 conn, err := DialConn(cmd) 22 if err != nil { 23 return nil, err 24 } 25 26 return api.NewControlClient(conn), nil 27 } 28 29 // DialConn establishes a connection to SwarmKit. 30 func DialConn(cmd *cobra.Command) (*grpc.ClientConn, error) { 31 addr, err := cmd.Flags().GetString("socket") 32 if err != nil { 33 return nil, err 34 } 35 36 opts := []grpc.DialOption{} 37 insecureCreds := credentials.NewTLS(&tls.Config{InsecureSkipVerify: true}) 38 opts = append(opts, grpc.WithTransportCredentials(insecureCreds)) 39 opts = append(opts, grpc.WithDialer( 40 func(addr string, timeout time.Duration) (net.Conn, error) { 41 return xnet.DialTimeoutLocal(addr, timeout) 42 })) 43 conn, err := grpc.Dial(addr, opts...) 44 if err != nil { 45 return nil, err 46 } 47 48 return conn, nil 49 } 50 51 // Context returns a request context based on CLI arguments. 52 func Context(cmd *cobra.Command) context.Context { 53 // TODO(aluzzardi): Actually create a context. 54 return context.TODO() 55 } 56 57 // ParseLogDriverFlags parses a silly string format for log driver and options. 58 // Fully baked log driver config should be returned. 59 // 60 // If no log driver is available, nil, nil will be returned. 61 func ParseLogDriverFlags(flags *pflag.FlagSet) (*api.Driver, error) { 62 if !flags.Changed("log-driver") { 63 return nil, nil 64 } 65 66 name, err := flags.GetString("log-driver") 67 if err != nil { 68 return nil, err 69 } 70 71 var opts map[string]string 72 if flags.Changed("log-opt") { 73 rawOpts, err := flags.GetStringSlice("log-opt") 74 if err != nil { 75 return nil, err 76 } 77 78 opts = make(map[string]string, len(rawOpts)) 79 for _, rawOpt := range rawOpts { 80 parts := strings.SplitN(rawOpt, "=", 2) 81 if len(parts) == 1 { 82 opts[parts[0]] = "" 83 continue 84 } 85 86 opts[parts[0]] = parts[1] 87 } 88 } 89 90 return &api.Driver{ 91 Name: name, 92 Options: opts, 93 }, nil 94 }