github.com/vmware/govmomi@v0.51.0/cli/sso/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 "text/tabwriter" 13 14 "github.com/vmware/govmomi/cli" 15 "github.com/vmware/govmomi/cli/flags" 16 "github.com/vmware/govmomi/cli/sso" 17 "github.com/vmware/govmomi/ssoadmin" 18 "github.com/vmware/govmomi/ssoadmin/types" 19 ) 20 21 type ls struct { 22 *flags.ClientFlag 23 *flags.OutputFlag 24 25 search string 26 } 27 28 func init() { 29 cli.Register("sso.group.ls", &ls{}) 30 } 31 32 func (cmd *ls) Register(ctx context.Context, f *flag.FlagSet) { 33 cmd.ClientFlag, ctx = flags.NewClientFlag(ctx) 34 cmd.ClientFlag.Register(ctx, f) 35 36 cmd.OutputFlag, ctx = flags.NewOutputFlag(ctx) 37 cmd.OutputFlag.Register(ctx, f) 38 39 f.StringVar(&cmd.search, "search", "", "Search") 40 } 41 42 func (cmd *ls) Usage() string { 43 return "[NAME]" 44 } 45 46 func (cmd *ls) Description() string { 47 return `List SSO groups. 48 49 Examples: 50 govc sso.group.ls 51 govc sso.group.ls group-name # list groups in group-name 52 govc sso.group.ls -search Admin # search for groups` 53 } 54 55 func (cmd *ls) Process(ctx context.Context) error { 56 if err := cmd.ClientFlag.Process(ctx); err != nil { 57 return err 58 } 59 return cmd.OutputFlag.Process(ctx) 60 } 61 62 type groupResult []types.AdminGroup 63 64 func (r groupResult) Dump() any { 65 return []types.AdminGroup(r) 66 } 67 68 func (r groupResult) Write(w io.Writer) error { 69 tw := tabwriter.NewWriter(w, 2, 0, 2, ' ', 0) 70 for _, info := range r { 71 fmt.Fprintf(tw, "%s\t%s\n", info.Id.Name, info.Details.Description) 72 } 73 return tw.Flush() 74 } 75 76 func (cmd *ls) Run(ctx context.Context, f *flag.FlagSet) error { 77 return sso.WithClient(ctx, cmd.ClientFlag, func(c *ssoadmin.Client) error { 78 if f.NArg() == 0 { 79 info, err := c.FindGroups(ctx, cmd.search) 80 if err != nil { 81 return err 82 } 83 return cmd.WriteResult(groupResult(info)) 84 } 85 info, err := c.FindGroupsInGroup(ctx, f.Arg(0), cmd.search) 86 if err != nil { 87 return err 88 } 89 90 return cmd.WriteResult(groupResult(info)) 91 }) 92 }