github.com/vmware/govmomi@v0.51.0/cli/sso/user/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 user 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 solution bool 26 group bool 27 search string 28 } 29 30 func init() { 31 cli.Register("sso.user.ls", &ls{}) 32 } 33 34 func (cmd *ls) Register(ctx context.Context, f *flag.FlagSet) { 35 cmd.ClientFlag, ctx = flags.NewClientFlag(ctx) 36 cmd.ClientFlag.Register(ctx, f) 37 38 cmd.OutputFlag, ctx = flags.NewOutputFlag(ctx) 39 cmd.OutputFlag.Register(ctx, f) 40 41 f.BoolVar(&cmd.solution, "s", false, "List solution users") 42 f.BoolVar(&cmd.group, "group", false, "List users in group") 43 f.StringVar(&cmd.search, "search", "", "Search users in group") 44 } 45 46 func (cmd *ls) Description() string { 47 return `List SSO users. 48 49 Examples: 50 govc sso.user.ls -s 51 govc sso.user.ls -group group-name` 52 } 53 54 func (cmd *ls) Process(ctx context.Context) error { 55 if err := cmd.ClientFlag.Process(ctx); err != nil { 56 return err 57 } 58 return cmd.OutputFlag.Process(ctx) 59 } 60 61 type userResult []types.AdminUser 62 63 func (r userResult) Dump() any { 64 return []types.AdminUser(r) 65 } 66 67 func (r userResult) Write(w io.Writer) error { 68 tw := tabwriter.NewWriter(w, 2, 0, 2, ' ', 0) 69 for _, info := range r { 70 fmt.Fprintf(tw, "%s\t%s\n", info.Id.Name, info.Description) 71 } 72 return tw.Flush() 73 } 74 75 type solutionResult []types.AdminSolutionUser 76 77 func (r solutionResult) Dump() any { 78 return []types.AdminSolutionUser(r) 79 } 80 81 func (r solutionResult) Write(w io.Writer) error { 82 tw := tabwriter.NewWriter(w, 2, 0, 2, ' ', 0) 83 for _, info := range r { 84 fmt.Fprintf(tw, "%s\t%s\n", info.Id.Name, info.Details.Description) 85 } 86 return tw.Flush() 87 } 88 89 type personResult []types.AdminPersonUser 90 91 func (r personResult) Dump() any { 92 return []types.AdminPersonUser(r) 93 } 94 95 func (r personResult) Write(w io.Writer) error { 96 tw := tabwriter.NewWriter(w, 2, 0, 2, ' ', 0) 97 for _, info := range r { 98 fmt.Fprintf(tw, "%s\t%s\n", info.Id.Name, info.Details.Description) 99 } 100 return tw.Flush() 101 } 102 103 func (cmd *ls) Run(ctx context.Context, f *flag.FlagSet) error { 104 arg := f.Arg(0) 105 106 return sso.WithClient(ctx, cmd.ClientFlag, func(c *ssoadmin.Client) error { 107 if cmd.solution { 108 if f.NArg() != 0 { 109 return flag.ErrHelp 110 } 111 info, err := c.FindSolutionUsers(ctx, arg) 112 if err != nil { 113 return err 114 } 115 116 return cmd.WriteResult(solutionResult(info)) 117 } 118 if cmd.group { 119 if f.NArg() == 0 { 120 return flag.ErrHelp 121 } 122 info, err := c.FindUsersInGroup(ctx, f.Arg(0), cmd.search) 123 if err != nil { 124 return err 125 } 126 127 return cmd.WriteResult(userResult(info)) 128 } 129 info, err := c.FindPersonUsers(ctx, arg) 130 if err != nil { 131 return err 132 } 133 134 return cmd.WriteResult(personResult(info)) 135 }) 136 }