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 }