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 )