github.com/vmware/govmomi@v0.51.0/cli/disk/metadata/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 metadata 6 7 import ( 8 "context" 9 "flag" 10 "fmt" 11 "io" 12 "os" 13 "text/tabwriter" 14 15 "github.com/vmware/govmomi/cli" 16 "github.com/vmware/govmomi/cli/flags" 17 "github.com/vmware/govmomi/vim25/types" 18 "github.com/vmware/govmomi/vslm" 19 ) 20 21 type ls struct { 22 *flags.OutputFlag 23 *flags.ClientFlag 24 25 key string 26 prefix string 27 snapshot string 28 } 29 30 func init() { 31 cli.Register("disk.metadata.ls", &ls{}) 32 } 33 34 func (cmd *ls) Register(ctx context.Context, f *flag.FlagSet) { 35 cmd.OutputFlag, ctx = flags.NewOutputFlag(ctx) 36 cmd.OutputFlag.Register(ctx, f) 37 cmd.ClientFlag, ctx = flags.NewClientFlag(ctx) 38 cmd.ClientFlag.Register(ctx, f) 39 40 f.StringVar(&cmd.key, "K", "", "Get value for key only") 41 f.StringVar(&cmd.prefix, "p", "", "Key filter prefix") 42 f.StringVar(&cmd.snapshot, "s", "", "Snapshot ID") 43 } 44 45 func (cmd *ls) Process(ctx context.Context) error { 46 if err := cmd.OutputFlag.Process(ctx); err != nil { 47 return err 48 } 49 return cmd.ClientFlag.Process(ctx) 50 } 51 52 func (cmd *ls) Usage() string { 53 return "ID" 54 } 55 56 func (cmd *ls) Description() string { 57 return `List metadata for disk ID. 58 59 Examples: 60 govc disk.metadata.ls 9b06a8b-d047-4d3c-b15b-43ea9608b1a6` 61 } 62 63 type lsResult []types.KeyValue 64 65 func (r lsResult) Write(w io.Writer) error { 66 tw := tabwriter.NewWriter(os.Stdout, 2, 0, 2, ' ', 0) 67 for _, data := range r { 68 fmt.Fprintf(tw, "%s\t%s\n", data.Key, data.Value) 69 } 70 return tw.Flush() 71 } 72 73 func (r lsResult) Dump() any { 74 return []types.KeyValue(r) 75 } 76 77 func (cmd *ls) Run(ctx context.Context, f *flag.FlagSet) error { 78 if f.NArg() != 1 { 79 return flag.ErrHelp 80 } 81 82 c, err := cmd.Client() 83 if err != nil { 84 return err 85 } 86 87 vc, err := vslm.NewClient(ctx, c) 88 if err != nil { 89 return err 90 } 91 92 m := vslm.NewGlobalObjectManager(vc) 93 94 id := types.ID{Id: f.Arg(0)} 95 var data []types.KeyValue 96 var sid *types.ID 97 if cmd.snapshot != "" { 98 sid = &types.ID{Id: cmd.snapshot} 99 } 100 101 if cmd.key != "" { 102 val, err := m.RetrieveMetadataValue(ctx, id, sid, cmd.key) 103 if err != nil { 104 return err 105 } 106 data = []types.KeyValue{{Key: cmd.key, Value: val}} 107 } else { 108 data, err = m.RetrieveMetadata(ctx, id, sid, cmd.prefix) 109 if err != nil { 110 return err 111 } 112 } 113 114 return cmd.WriteResult(lsResult(data)) 115 }