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  }