github.com/vmware/govmomi@v0.51.0/cli/extension/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 extension 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/object" 17 "github.com/vmware/govmomi/vim25/types" 18 ) 19 20 type info struct { 21 *flags.ClientFlag 22 *flags.OutputFlag 23 } 24 25 func init() { 26 cli.Register("extension.info", &info{}) 27 } 28 29 func (cmd *info) Register(ctx context.Context, f *flag.FlagSet) { 30 cmd.ClientFlag, ctx = flags.NewClientFlag(ctx) 31 cmd.ClientFlag.Register(ctx, f) 32 33 cmd.OutputFlag, ctx = flags.NewOutputFlag(ctx) 34 cmd.OutputFlag.Register(ctx, f) 35 } 36 37 func (cmd *info) Process(ctx context.Context) error { 38 if err := cmd.ClientFlag.Process(ctx); err != nil { 39 return err 40 } 41 if err := cmd.OutputFlag.Process(ctx); err != nil { 42 return err 43 } 44 return nil 45 } 46 47 func (cmd *info) Usage() string { 48 return "[KEY]..." 49 } 50 51 func (cmd *info) Run(ctx context.Context, f *flag.FlagSet) error { 52 c, err := cmd.Client() 53 if err != nil { 54 return err 55 } 56 57 m, err := object.GetExtensionManager(c) 58 if err != nil { 59 return err 60 } 61 62 var res infoResult 63 exts := make(map[string]types.Extension) 64 65 if f.NArg() == 1 { 66 e, err := m.Find(ctx, f.Arg(0)) 67 if err != nil { 68 return err 69 } 70 if e != nil { 71 exts[f.Arg(0)] = *e 72 } 73 } else { 74 list, err := m.List(ctx) 75 if err != nil { 76 return err 77 } 78 if f.NArg() == 0 { 79 res.Extensions = list 80 } else { 81 for _, e := range list { 82 exts[e.Key] = e 83 } 84 } 85 } 86 87 for _, key := range f.Args() { 88 if e, ok := exts[key]; ok { 89 res.Extensions = append(res.Extensions, e) 90 } else { 91 return fmt.Errorf("extension %s not found", key) 92 } 93 } 94 95 return cmd.WriteResult(&res) 96 } 97 98 type infoResult struct { 99 Extensions []types.Extension `json:"extensions"` 100 } 101 102 func (r *infoResult) Write(w io.Writer) error { 103 tw := tabwriter.NewWriter(w, 2, 0, 2, ' ', 0) 104 105 for _, e := range r.Extensions { 106 fmt.Fprintf(tw, "Name:\t%s\n", e.Key) 107 fmt.Fprintf(tw, " Version:\t%s\n", e.Version) 108 fmt.Fprintf(tw, " Description:\t%s\n", e.Description.GetDescription().Summary) 109 fmt.Fprintf(tw, " Company:\t%s\n", e.Company) 110 fmt.Fprintf(tw, " Last heartbeat time:\t%s\n", e.LastHeartbeatTime) 111 fmt.Fprintf(tw, " Subject name:\t%s\n", e.SubjectName) 112 fmt.Fprintf(tw, " Type:\t%s\n", e.Type) 113 } 114 115 return tw.Flush() 116 }