github.com/vmware/govmomi@v0.51.0/cli/vm/dataset/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 dataset 6 7 import ( 8 "context" 9 "errors" 10 "flag" 11 "fmt" 12 "io" 13 "text/tabwriter" 14 15 "github.com/vmware/govmomi/cli" 16 "github.com/vmware/govmomi/cli/flags" 17 "github.com/vmware/govmomi/vapi/vm/dataset" 18 ) 19 20 type info struct { 21 *flags.VirtualMachineFlag 22 *flags.OutputFlag 23 } 24 25 func init() { 26 cli.Register("vm.dataset.info", &info{}) 27 } 28 29 func (cmd *info) Register(ctx context.Context, f *flag.FlagSet) { 30 cmd.OutputFlag, ctx = flags.NewOutputFlag(ctx) 31 cmd.OutputFlag.Register(ctx, f) 32 cmd.VirtualMachineFlag, ctx = flags.NewVirtualMachineFlag(ctx) 33 cmd.VirtualMachineFlag.Register(ctx, f) 34 } 35 36 func (cmd *info) Process(ctx context.Context) error { 37 if err := cmd.VirtualMachineFlag.Process(ctx); err != nil { 38 return err 39 } 40 return cmd.OutputFlag.Process(ctx) 41 } 42 43 func (cmd *info) Usage() string { 44 return "NAME" 45 } 46 47 func (cmd *info) Description() string { 48 return `Display data set information. 49 50 Examples: 51 govc vm.dataset.info -vm $vm 52 govc vm.dataset.info -vm $vm com.example.project2` 53 } 54 55 type infoResult []*dataset.Info 56 57 func (r infoResult) Write(w io.Writer) error { 58 tw := tabwriter.NewWriter(w, 2, 0, 2, ' ', 0) 59 60 for _, item := range r { 61 fmt.Fprintf(tw, "Name:\t%s\n", item.Name) 62 fmt.Fprintf(tw, " Description:\t%s\n", item.Description) 63 fmt.Fprintf(tw, " Host:\t%s\n", item.Host) 64 fmt.Fprintf(tw, " Guest:\t%s\n", item.Guest) 65 fmt.Fprintf(tw, " Used: \t%d\n", item.Used) 66 fmt.Fprintf(tw, " OmitFromSnapshotAndClone: \t%t\n", item.OmitFromSnapshotAndClone) 67 } 68 69 return tw.Flush() 70 } 71 72 func (cmd *info) Run(ctx context.Context, f *flag.FlagSet) error { 73 if f.NArg() > 1 { 74 return errors.New("please specify at most one data set") 75 } 76 77 vm, err := cmd.VirtualMachineFlag.VirtualMachine() 78 if err != nil { 79 return err 80 } 81 if vm == nil { 82 return flag.ErrHelp 83 } 84 vmId := vm.Reference().Value 85 86 c, err := cmd.RestClient() 87 if err != nil { 88 return err 89 } 90 91 mgr := dataset.NewManager(c) 92 93 // Discover the relevant data set id(s) 94 var ids []string 95 if f.NArg() == 1 { 96 // single data set 97 id, err := FindDataSetId(ctx, mgr, vmId, f.Arg(0)) 98 if err != nil { 99 return err 100 } 101 ids = []string{id} 102 } else { 103 // all data sets 104 l, err := mgr.ListDataSets(ctx, vmId) 105 if err != nil { 106 return err 107 } 108 for _, summary := range l { 109 ids = append(ids, summary.DataSet) 110 } 111 } 112 113 // Fetch the information for each data set id 114 var res []*dataset.Info 115 for _, id := range ids { 116 inf, err := mgr.GetDataSet(ctx, vmId, id) 117 if err != nil { 118 return err 119 } 120 res = append(res, inf) 121 } 122 123 return cmd.WriteResult(infoResult(res)) 124 }