github.com/vmware/govmomi@v0.51.0/cli/cluster/group/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 group 6 7 import ( 8 "context" 9 "flag" 10 "fmt" 11 "io" 12 "os" 13 "strings" 14 "text/tabwriter" 15 16 "github.com/vmware/govmomi/cli" 17 "github.com/vmware/govmomi/vim25/types" 18 ) 19 20 type ls struct { 21 *InfoFlag 22 23 long bool 24 } 25 26 func init() { 27 cli.Register("cluster.group.ls", &ls{}) 28 } 29 30 func (cmd *ls) Register(ctx context.Context, f *flag.FlagSet) { 31 cmd.InfoFlag, ctx = NewInfoFlag(ctx) 32 cmd.InfoFlag.Register(ctx, f) 33 34 f.BoolVar(&cmd.long, "l", false, "Long listing format") 35 } 36 37 func (cmd *ls) Process(ctx context.Context) error { 38 return cmd.InfoFlag.Process(ctx) 39 } 40 41 func (cmd *ls) Description() string { 42 return `List cluster groups and group members. 43 44 Examples: 45 govc cluster.group.ls -cluster my_cluster 46 govc cluster.group.ls -cluster my_cluster -l | grep ClusterHostGroup 47 govc cluster.group.ls -cluster my_cluster -name my_group` 48 } 49 50 type groupResult []string 51 52 func (r groupResult) Write(w io.Writer) error { 53 for i := range r { 54 fmt.Fprintln(w, r[i]) 55 } 56 57 return nil 58 } 59 60 type groupResultLong []types.BaseClusterGroupInfo 61 62 func (r groupResultLong) Write(w io.Writer) error { 63 tw := tabwriter.NewWriter(os.Stdout, 2, 0, 2, ' ', 0) 64 65 for i := range r { 66 info := r[i].GetClusterGroupInfo() 67 kind := fmt.Sprintf("%T", r[i]) 68 kind = strings.SplitN(kind, ".", 2)[1] 69 _, _ = fmt.Fprintf(tw, "%s\t%s\n", kind, info.Name) 70 } 71 72 return tw.Flush() 73 } 74 75 func (cmd *ls) Run(ctx context.Context, f *flag.FlagSet) error { 76 var res groupResult 77 78 if cmd.name == "" { 79 groups, err := cmd.Groups(ctx) 80 if err != nil { 81 return err 82 } 83 84 if cmd.long { 85 return cmd.WriteResult(groupResultLong(groups)) 86 } 87 88 for _, g := range groups { 89 res = append(res, g.GetClusterGroupInfo().Name) 90 } 91 } else { 92 group, err := cmd.Group(ctx) 93 if err != nil { 94 return err 95 } 96 97 names, err := cmd.Names(ctx, *group.refs) 98 if err != nil { 99 return err 100 } 101 102 for _, ref := range *group.refs { 103 res = append(res, names[ref]) 104 } 105 } 106 107 return cmd.WriteResult(res) 108 }