github.com/vmware/govmomi@v0.51.0/cli/namespace/cluster/ls.go (about) 1 // © Broadcom. All Rights Reserved. 2 // The term “Broadcom” refers to Broadcom Inc. and/or its subsidiaries. 3 // SPDX-License-Identifier: Apache-2.0 4 5 package cluster 6 7 import ( 8 "context" 9 "encoding/json" 10 "flag" 11 "fmt" 12 "io" 13 "os" 14 "text/tabwriter" 15 16 "github.com/vmware/govmomi/cli" 17 "github.com/vmware/govmomi/cli/flags" 18 "github.com/vmware/govmomi/find" 19 "github.com/vmware/govmomi/object" 20 "github.com/vmware/govmomi/vapi/namespace" 21 ) 22 23 type ls struct { 24 *flags.ClientFlag 25 *flags.OutputFlag 26 27 long bool 28 } 29 30 func init() { 31 cli.Register("namespace.cluster.ls", &ls{}) 32 } 33 34 func (cmd *ls) Register(ctx context.Context, f *flag.FlagSet) { 35 cmd.ClientFlag, ctx = flags.NewClientFlag(ctx) 36 cmd.OutputFlag, ctx = flags.NewOutputFlag(ctx) 37 cmd.ClientFlag.Register(ctx, f) 38 cmd.OutputFlag.Register(ctx, f) 39 40 f.BoolVar(&cmd.long, "l", false, "Long listing format") 41 } 42 43 func (cmd *ls) Process(ctx context.Context) error { 44 if err := cmd.ClientFlag.Process(ctx); err != nil { 45 return err 46 } 47 return cmd.OutputFlag.Process(ctx) 48 } 49 50 func (cmd *ls) Description() string { 51 return `List namepace enabled clusters. 52 53 Examples: 54 govc namespace.cluster.ls 55 govc namespace.cluster.ls -l 56 govc namespace.cluster.ls -json | jq .` 57 } 58 59 type lsWriter struct { 60 cmd *ls 61 Cluster []namespace.ClusterSummary `json:"cluster"` 62 } 63 64 func (r *lsWriter) Write(w io.Writer) error { 65 tw := tabwriter.NewWriter(os.Stdout, 2, 0, 2, ' ', 0) 66 67 for _, cluster := range r.Cluster { 68 path, err := r.path(cluster) 69 if err != nil { 70 return err 71 } 72 fmt.Fprintf(tw, "%s", path) 73 if r.cmd.long { 74 fmt.Fprintf(tw, "\t%s", cluster.ConfigStatus) 75 fmt.Fprintf(tw, "\t%s", cluster.KubernetesStatus) 76 } 77 fmt.Fprintf(tw, "\n") 78 } 79 return tw.Flush() 80 } 81 82 func (r *lsWriter) path(cluster namespace.ClusterSummary) (string, error) { 83 ref := cluster.Reference() 84 85 c, err := r.cmd.Client() 86 if err != nil { 87 return "", err 88 } 89 90 finder := find.NewFinder(c, false) 91 obj, err := finder.ObjectReference(context.Background(), ref) 92 if err != nil { 93 return "", err 94 } 95 96 return obj.(*object.ClusterComputeResource).InventoryPath, nil 97 } 98 99 func (r *lsWriter) MarshalJSON() ([]byte, error) { 100 return json.Marshal(r.Cluster) 101 } 102 103 func (r *lsWriter) Dump() any { 104 return r.Cluster 105 } 106 107 func (cmd *ls) Run(ctx context.Context, f *flag.FlagSet) error { 108 c, err := cmd.RestClient() 109 if err != nil { 110 return err 111 } 112 113 m := namespace.NewManager(c) 114 clusters, err := m.ListClusters(ctx) 115 if err != nil { 116 return err 117 } 118 119 return cmd.WriteResult(&lsWriter{cmd, clusters}) 120 }