github.com/vmware/govmomi@v0.51.0/cli/vm/guest/df.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 guest 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/units" 17 "github.com/vmware/govmomi/vim25/mo" 18 "github.com/vmware/govmomi/vim25/types" 19 ) 20 21 type df struct { 22 *flags.VirtualMachineFlag 23 } 24 25 func init() { 26 cli.Register("guest.df", &df{}) 27 } 28 29 func (cmd *df) Register(ctx context.Context, f *flag.FlagSet) { 30 cmd.VirtualMachineFlag, ctx = flags.NewVirtualMachineFlag(ctx) 31 cmd.VirtualMachineFlag.Register(ctx, f) 32 } 33 34 func (cmd *df) Description() string { 35 return `Report file system disk space usage. 36 37 Examples: 38 govc guest.df -vm $name` 39 } 40 41 type dfResult []types.GuestDiskInfo 42 43 func (r dfResult) Write(w io.Writer) error { 44 tw := tabwriter.NewWriter(w, 2, 0, 2, ' ', 0) 45 _, _ = fmt.Fprintf(tw, "%s\t%s\t%s\t%s\t%s\n", "Filesystem", "Size", "Used", "Avail", "Use%") 46 for _, disk := range r { 47 used := disk.Capacity - disk.FreeSpace 48 use := 100.0 * float32(used) / float32(disk.Capacity) 49 _, _ = fmt.Fprintf(tw, "%s\t%s\t%s\t%s\t%.0f%%\n", disk.DiskPath, 50 units.ByteSize(disk.Capacity), units.ByteSize(used), units.ByteSize(disk.FreeSpace), use) 51 } 52 return tw.Flush() 53 } 54 55 func (cmd *df) Run(ctx context.Context, f *flag.FlagSet) error { 56 obj, err := cmd.VirtualMachine() 57 if err != nil { 58 return err 59 } 60 61 var vm mo.VirtualMachine 62 err = obj.Properties(ctx, obj.Reference(), []string{"guest.disk"}, &vm) 63 if err != nil { 64 return err 65 } 66 67 return cmd.WriteResult(dfResult(vm.Guest.Disk)) 68 }