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

     1  package cluster
     2  
     3  import (
     4  	"errors"
     5  	"fmt"
     6  	"os"
     7  	"sort"
     8  	"text/tabwriter"
     9  
    10  	"github.com/docker/swarmkit/api"
    11  	"github.com/docker/swarmkit/cmd/swarmctl/common"
    12  	gogotypes "github.com/gogo/protobuf/types"
    13  	"github.com/spf13/cobra"
    14  )
    15  
    16  func printClusterSummary(cluster *api.Cluster) {
    17  	w := tabwriter.NewWriter(os.Stdout, 8, 8, 8, ' ', 0)
    18  	defer w.Flush()
    19  
    20  	common.FprintfIfNotEmpty(w, "ID\t: %s\n", cluster.ID)
    21  	common.FprintfIfNotEmpty(w, "Name\t: %s\n", cluster.Spec.Annotations.Name)
    22  	fmt.Fprintln(w, "Orchestration settings:")
    23  	fmt.Fprintf(w, "  Task history entries: %d\n", cluster.Spec.Orchestration.TaskHistoryRetentionLimit)
    24  
    25  	heartbeatPeriod, err := gogotypes.DurationFromProto(cluster.Spec.Dispatcher.HeartbeatPeriod)
    26  	if err == nil {
    27  		fmt.Fprintln(w, "Dispatcher settings:")
    28  		fmt.Fprintf(w, "  Dispatcher heartbeat period: %s\n", heartbeatPeriod.String())
    29  	}
    30  
    31  	fmt.Fprintln(w, "Certificate Authority settings:")
    32  	if cluster.Spec.CAConfig.NodeCertExpiry != nil {
    33  		clusterDuration, err := gogotypes.DurationFromProto(cluster.Spec.CAConfig.NodeCertExpiry)
    34  		if err != nil {
    35  			fmt.Fprintln(w, "  Certificate Validity Duration: [ERROR PARSING DURATION]")
    36  		} else {
    37  			fmt.Fprintf(w, "  Certificate Validity Duration: %s\n", clusterDuration.String())
    38  		}
    39  	}
    40  	if len(cluster.Spec.CAConfig.ExternalCAs) > 0 {
    41  		fmt.Fprintln(w, "  External CAs:")
    42  		for _, ca := range cluster.Spec.CAConfig.ExternalCAs {
    43  			fmt.Fprintf(w, "    %s: %s\n", ca.Protocol, ca.URL)
    44  		}
    45  	}
    46  
    47  	fmt.Fprintln(w, "  Join Tokens:")
    48  	fmt.Fprintln(w, "    Worker:", cluster.RootCA.JoinTokens.Worker)
    49  	fmt.Fprintln(w, "    Manager:", cluster.RootCA.JoinTokens.Manager)
    50  
    51  	if cluster.Spec.TaskDefaults.LogDriver != nil {
    52  		fmt.Fprintf(w, "Default Log Driver\t: %s\n", cluster.Spec.TaskDefaults.LogDriver.Name)
    53  		var keys []string
    54  
    55  		if len(cluster.Spec.TaskDefaults.LogDriver.Options) != 0 {
    56  			for k := range cluster.Spec.TaskDefaults.LogDriver.Options {
    57  				keys = append(keys, k)
    58  			}
    59  			sort.Strings(keys)
    60  
    61  			for _, k := range keys {
    62  				v := cluster.Spec.TaskDefaults.LogDriver.Options[k]
    63  				if v != "" {
    64  					fmt.Fprintf(w, "  %s\t: %s\n", k, v)
    65  				} else {
    66  					fmt.Fprintf(w, "  %s\t\n", k)
    67  				}
    68  			}
    69  		}
    70  	}
    71  }
    72  
    73  var (
    74  	inspectCmd = &cobra.Command{
    75  		Use:   "inspect <cluster name>",
    76  		Short: "Inspect a cluster",
    77  		RunE: func(cmd *cobra.Command, args []string) error {
    78  			if len(args) == 0 {
    79  				return errors.New("cluster name missing")
    80  			}
    81  
    82  			if len(args) > 1 {
    83  				return errors.New("inspect command takes exactly 1 argument")
    84  			}
    85  
    86  			c, err := common.Dial(cmd)
    87  			if err != nil {
    88  				return err
    89  			}
    90  
    91  			cluster, err := getCluster(common.Context(cmd), c, args[0])
    92  			if err != nil {
    93  				return err
    94  			}
    95  
    96  			printClusterSummary(cluster)
    97  
    98  			return nil
    99  		},
   100  	}
   101  )