github.com/vmware/govmomi@v0.51.0/cli/disk/snapshot/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 snapshot 6 7 import ( 8 "context" 9 "flag" 10 "fmt" 11 "io" 12 "os" 13 "text/tabwriter" 14 "time" 15 16 "github.com/vmware/govmomi/cli" 17 "github.com/vmware/govmomi/cli/disk" 18 "github.com/vmware/govmomi/cli/flags" 19 "github.com/vmware/govmomi/vim25/types" 20 ) 21 22 type ls struct { 23 *flags.DatastoreFlag 24 long bool 25 } 26 27 func init() { 28 cli.Register("disk.snapshot.ls", &ls{}) 29 } 30 31 func (cmd *ls) Register(ctx context.Context, f *flag.FlagSet) { 32 cmd.DatastoreFlag, ctx = flags.NewDatastoreFlag(ctx) 33 cmd.DatastoreFlag.Register(ctx, f) 34 35 f.BoolVar(&cmd.long, "l", false, "Long listing format") 36 } 37 38 func (cmd *ls) Usage() string { 39 return "ID" 40 } 41 42 func (cmd *ls) Description() string { 43 return `List snapshots for disk ID on DS. 44 45 Examples: 46 govc disk.snapshot.ls -l 9b06a8b-d047-4d3c-b15b-43ea9608b1a6` 47 } 48 49 type lsResult struct { 50 Info *types.VStorageObjectSnapshotInfo `json:"info"` 51 cmd *ls 52 } 53 54 func (r *lsResult) Write(w io.Writer) error { 55 tw := tabwriter.NewWriter(os.Stdout, 2, 0, 2, ' ', 0) 56 57 for _, o := range r.Info.Snapshots { 58 _, _ = fmt.Fprintf(tw, "%s\t%s", o.Id.Id, o.Description) 59 if r.cmd.long { 60 created := o.CreateTime.Format(time.Stamp) 61 _, _ = fmt.Fprintf(tw, "\t%s", created) 62 } 63 _, _ = fmt.Fprintln(tw) 64 } 65 66 return tw.Flush() 67 } 68 69 func (r *lsResult) Dump() any { 70 return r.Info 71 } 72 73 func (cmd *ls) Run(ctx context.Context, f *flag.FlagSet) error { 74 m, err := disk.NewManagerFromFlag(ctx, cmd.DatastoreFlag) 75 if err != nil { 76 return err 77 } 78 79 snapshots, err := m.RetrieveSnapshotInfo(ctx, f.Arg(0)) 80 if err != nil { 81 return err 82 } 83 84 info := &types.VStorageObjectSnapshotInfo{Snapshots: snapshots} 85 res := lsResult{Info: info, cmd: cmd} 86 87 return cmd.WriteResult(&res) 88 }