github.com/vmware/govmomi@v0.51.0/cli/namespace/service/version/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 version 6 7 import ( 8 "context" 9 "encoding/json" 10 "flag" 11 "fmt" 12 "io" 13 "os" 14 "text/tabwriter" 15 16 "github.com/vmware/govmomi/cli" 17 "github.com/vmware/govmomi/cli/flags" 18 "github.com/vmware/govmomi/vapi/namespace" 19 ) 20 21 type ls struct { 22 *flags.ClientFlag 23 *flags.OutputFlag 24 25 long bool 26 } 27 28 func init() { 29 cli.Register("namespace.service.version.ls", &ls{}) 30 } 31 32 func (cmd *ls) Register(ctx context.Context, f *flag.FlagSet) { 33 cmd.ClientFlag, ctx = flags.NewClientFlag(ctx) 34 cmd.OutputFlag, ctx = flags.NewOutputFlag(ctx) 35 cmd.ClientFlag.Register(ctx, f) 36 cmd.OutputFlag.Register(ctx, f) 37 38 f.BoolVar(&cmd.long, "l", false, "Long listing format") 39 } 40 41 func (cmd *ls) Process(ctx context.Context) error { 42 if err := cmd.ClientFlag.Process(ctx); err != nil { 43 return err 44 } 45 return cmd.OutputFlag.Process(ctx) 46 } 47 48 func (cmd *ls) Description() string { 49 return `List all registered versions for a given vSphere Supervisor Service. 50 51 Examples: 52 govc namespace.service.version.ls my-service 53 govc namespace.service.version.ls -l my-service 54 govc namespace.service.version.ls -json my-service | jq .` 55 } 56 57 func (cmd *ls) Usage() string { 58 return "NAME" 59 } 60 61 type lsWriter struct { 62 cmd *ls 63 service string 64 Versions []namespace.SupervisorServiceVersionSummary `json:"versions"` 65 } 66 67 func (r *lsWriter) Write(w io.Writer) error { 68 tw := tabwriter.NewWriter(os.Stdout, 2, 0, 2, ' ', 0) 69 fmt.Fprintf(tw, "%s:\n", r.service) 70 for _, svc := range r.Versions { 71 fmt.Fprintf(tw, "%s", svc.Version) 72 if r.cmd.long { 73 fmt.Fprintf(tw, "\t%s", svc.Name) 74 fmt.Fprintf(tw, "\t%s", svc.State) 75 fmt.Fprintf(tw, "\t%s", svc.Description) 76 } 77 fmt.Fprintf(tw, "\n") 78 } 79 return tw.Flush() 80 } 81 82 func (r *lsWriter) MarshalJSON() ([]byte, error) { 83 return json.Marshal(r.Versions) 84 } 85 86 func (r *lsWriter) Dump() any { 87 return r.Versions 88 } 89 90 func (cmd *ls) Run(ctx context.Context, f *flag.FlagSet) error { 91 service := f.Arg(0) 92 if len(service) == 0 { 93 return flag.ErrHelp 94 } 95 c, err := cmd.RestClient() 96 if err != nil { 97 return err 98 } 99 100 m := namespace.NewManager(c) 101 versions, err := m.ListSupervisorServiceVersions(ctx, service) 102 if err != nil { 103 return err 104 } 105 106 return cmd.WriteResult(&lsWriter{cmd, service, versions}) 107 }