github.com/vmware/govmomi@v0.51.0/cli/vsan/info.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 vsan 6 7 import ( 8 "context" 9 "flag" 10 "fmt" 11 "io" 12 "os" 13 "text/tabwriter" 14 15 "github.com/vmware/govmomi/cli" 16 "github.com/vmware/govmomi/cli/flags" 17 "github.com/vmware/govmomi/vsan" 18 "github.com/vmware/govmomi/vsan/types" 19 ) 20 21 type info struct { 22 *flags.DatacenterFlag 23 } 24 25 func init() { 26 cli.Register("vsan.info", &info{}) 27 } 28 29 func (cmd *info) Register(ctx context.Context, f *flag.FlagSet) { 30 cmd.DatacenterFlag, ctx = flags.NewDatacenterFlag(ctx) 31 cmd.DatacenterFlag.Register(ctx, f) 32 } 33 34 func (cmd *info) Usage() string { 35 return "CLUSTER..." 36 } 37 38 func (cmd *info) Description() string { 39 return `Display vSAN configuration. 40 41 Examples: 42 govc vsan.info 43 govc vsan.info ClusterA 44 govc vsan.info -json` 45 } 46 47 func (cmd *info) Run(ctx context.Context, f *flag.FlagSet) error { 48 vc, err := cmd.Client() 49 if err != nil { 50 return err 51 } 52 53 c, err := vsan.NewClient(ctx, vc) 54 if err != nil { 55 return err 56 } 57 58 finder, err := cmd.Finder() 59 if err != nil { 60 return err 61 } 62 63 args := f.Args() 64 if len(args) == 0 { 65 args = []string{"*"} 66 } 67 68 var res []Cluster 69 70 for _, arg := range args { 71 clusters, err := finder.ClusterComputeResourceList(ctx, arg) 72 if err != nil { 73 return err 74 } 75 76 for _, cluster := range clusters { 77 info, err := c.VsanClusterGetConfig(ctx, cluster.Reference()) 78 if err != nil { 79 return err 80 } 81 res = append(res, Cluster{cluster.InventoryPath, info}) 82 } 83 } 84 85 return cmd.WriteResult(&infoResult{res}) 86 } 87 88 type Cluster struct { 89 Path string `json:"path"` 90 Info *types.VsanConfigInfoEx `json:"info"` 91 } 92 93 type infoResult struct { 94 Clusters []Cluster `json:"clusters"` 95 } 96 97 func (r *infoResult) Write(w io.Writer) error { 98 tw := tabwriter.NewWriter(os.Stdout, 2, 0, 2, ' ', 0) 99 100 for _, cluster := range r.Clusters { 101 fmt.Fprintf(tw, "Path:\t%s\n", cluster.Path) 102 fmt.Fprintf(tw, " Enabled:\t%t\n", *cluster.Info.Enabled) 103 if unmap := cluster.Info.UnmapConfig; unmap != nil { 104 fmt.Fprintf(tw, " Unmap Enabled:\t%t\n", unmap.Enable) 105 } 106 if fs := cluster.Info.FileServiceConfig; fs != nil { 107 fmt.Fprintf(tw, " FileService Enabled:\t%t\n", fs.Enabled) 108 } 109 } 110 111 return tw.Flush() 112 }