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  }