github.com/vmware/govmomi@v0.51.0/cli/tags/info.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 info struct { 20 *flags.ClientFlag 21 *flags.OutputFlag 22 c string 23 C bool 24 } 25 26 func init() { 27 cli.Register("tags.info", &info{}) 28 } 29 30 func (cmd *info) Register(ctx context.Context, f *flag.FlagSet) { 31 cmd.ClientFlag, ctx = flags.NewClientFlag(ctx) 32 cmd.OutputFlag, ctx = flags.NewOutputFlag(ctx) 33 cmd.ClientFlag.Register(ctx, f) 34 cmd.OutputFlag.Register(ctx, f) 35 f.StringVar(&cmd.c, "c", "", "Category name") 36 f.BoolVar(&cmd.C, "C", true, "Display category name instead of ID") 37 } 38 39 func (cmd *info) Process(ctx context.Context) error { 40 if err := cmd.ClientFlag.Process(ctx); err != nil { 41 return err 42 } 43 return cmd.OutputFlag.Process(ctx) 44 } 45 46 func (cmd *info) Usage() string { 47 return "NAME" 48 } 49 50 func (cmd *info) Description() string { 51 return `Display tags info. 52 53 If NAME is provided, display info for only that tag. Otherwise display info for all tags. 54 55 Examples: 56 govc tags.info 57 govc tags.info k8s-zone-us-ca1 58 govc tags.info -c k8s-zone` 59 } 60 61 type infoResult []tags.Tag 62 63 func (t infoResult) Write(w io.Writer) error { 64 tw := tabwriter.NewWriter(w, 2, 0, 2, ' ', 0) 65 66 for _, item := range t { 67 fmt.Fprintf(tw, "Name:\t%s\n", item.Name) 68 fmt.Fprintf(tw, " ID:\t%s\n", item.ID) 69 fmt.Fprintf(tw, " Description:\t%s\n", item.Description) 70 fmt.Fprintf(tw, " Category:\t%s\n", item.CategoryID) 71 fmt.Fprintf(tw, " UsedBy: %s\n", item.UsedBy) 72 } 73 74 return tw.Flush() 75 } 76 77 func (cmd *info) Run(ctx context.Context, f *flag.FlagSet) error { 78 c, err := cmd.RestClient() 79 if err != nil { 80 return err 81 } 82 83 m := tags.NewManager(c) 84 var res lsResult 85 86 if cmd.c == "" { 87 res, err = m.GetTags(ctx) 88 } else { 89 res, err = m.GetTagsForCategory(ctx, cmd.c) 90 } 91 if err != nil { 92 return err 93 } 94 95 if f.NArg() == 1 { 96 arg := f.Arg(0) 97 src := res 98 res = nil 99 for i := range src { 100 if src[i].Name == arg || src[i].ID == arg { 101 res = append(res, src[i]) 102 } 103 } 104 if len(res) == 0 { 105 return fmt.Errorf("tag %q not found", arg) 106 } 107 } 108 109 if cmd.C { 110 categories, err := m.GetCategories(ctx) 111 if err != nil { 112 return err 113 } 114 m := make(map[string]tags.Category) 115 for _, category := range categories { 116 m[category.ID] = category 117 } 118 for i := range res { 119 res[i].CategoryID = m[res[i].CategoryID].Name 120 } 121 } 122 123 return cmd.WriteResult(infoResult(res)) 124 }