github.com/vmware/govmomi@v0.51.0/cli/tags/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 tags
     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/vapi/tags"
    17  )
    18  
    19  type ls struct {
    20  	*flags.ClientFlag
    21  	*flags.OutputFlag
    22  	c string
    23  }
    24  
    25  func init() {
    26  	cli.Register("tags.ls", &ls{})
    27  }
    28  
    29  func (cmd *ls) Register(ctx context.Context, f *flag.FlagSet) {
    30  	cmd.ClientFlag, ctx = flags.NewClientFlag(ctx)
    31  	cmd.OutputFlag, ctx = flags.NewOutputFlag(ctx)
    32  	cmd.ClientFlag.Register(ctx, f)
    33  	cmd.OutputFlag.Register(ctx, f)
    34  	f.StringVar(&cmd.c, "c", "", "Category name")
    35  }
    36  
    37  func (cmd *ls) Process(ctx context.Context) error {
    38  	if err := cmd.ClientFlag.Process(ctx); err != nil {
    39  		return err
    40  	}
    41  	return nil
    42  }
    43  
    44  func (cmd *ls) Description() string {
    45  	return `List tags.
    46  
    47  Examples:
    48    govc tags.ls
    49    govc tags.ls -c k8s-zone
    50    govc tags.ls -json | jq .
    51    govc tags.ls -c k8s-region -json | jq .`
    52  }
    53  
    54  type lsResult []tags.Tag
    55  
    56  func (r lsResult) Write(w io.Writer) error {
    57  	tw := tabwriter.NewWriter(w, 2, 0, 2, ' ', 0)
    58  
    59  	for i := range r {
    60  		fmt.Fprintf(tw, "%s\t%s\n", r[i].Name, r[i].CategoryID)
    61  	}
    62  
    63  	return tw.Flush()
    64  }
    65  
    66  func (cmd *ls) Run(ctx context.Context, f *flag.FlagSet) error {
    67  	c, err := cmd.RestClient()
    68  	if err != nil {
    69  		return err
    70  	}
    71  
    72  	m := tags.NewManager(c)
    73  	var res lsResult
    74  
    75  	if cmd.c == "" {
    76  		res, err = m.GetTags(ctx)
    77  	} else {
    78  		res, err = m.GetTagsForCategory(ctx, cmd.c)
    79  	}
    80  
    81  	if err != nil {
    82  		return err
    83  	}
    84  
    85  	categories, err := m.GetCategories(ctx)
    86  	if err != nil {
    87  		return err
    88  	}
    89  	cats := make(map[string]tags.Category)
    90  	for _, category := range categories {
    91  		cats[category.ID] = category
    92  	}
    93  
    94  	for i, tag := range res {
    95  		res[i].CategoryID = cats[tag.CategoryID].Name
    96  	}
    97  
    98  	return cmd.WriteResult(res)
    99  }