github.com/vmware/govmomi@v0.51.0/cli/datastore/disk/shrink.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 disk 6 7 import ( 8 "context" 9 "flag" 10 "fmt" 11 12 "github.com/vmware/govmomi/cli" 13 "github.com/vmware/govmomi/cli/flags" 14 "github.com/vmware/govmomi/object" 15 ) 16 17 type shrink struct { 18 *flags.DatastoreFlag 19 20 copy *bool 21 } 22 23 func init() { 24 cli.Register("datastore.disk.shrink", &shrink{}) 25 } 26 27 func (cmd *shrink) Register(ctx context.Context, f *flag.FlagSet) { 28 cmd.DatastoreFlag, ctx = flags.NewDatastoreFlag(ctx) 29 cmd.DatastoreFlag.Register(ctx, f) 30 31 f.Var(flags.NewOptionalBool(&cmd.copy), "copy", "Perform shrink in-place mode if false, copy-shrink mode otherwise") 32 } 33 34 func (cmd *shrink) Process(ctx context.Context) error { 35 return cmd.DatastoreFlag.Process(ctx) 36 } 37 38 func (cmd *shrink) Usage() string { 39 return "VMDK" 40 } 41 42 func (cmd *shrink) Description() string { 43 return `Shrink VMDK on DS. 44 45 Examples: 46 govc datastore.disk.shrink disks/disk1.vmdk` 47 } 48 49 func (cmd *shrink) Run(ctx context.Context, f *flag.FlagSet) error { 50 if f.NArg() == 0 { 51 return flag.ErrHelp 52 } 53 54 dc, err := cmd.Datacenter() 55 if err != nil { 56 return err 57 } 58 59 ds, err := cmd.Datastore() 60 if err != nil { 61 return err 62 } 63 64 m := object.NewVirtualDiskManager(ds.Client()) 65 path := ds.Path(f.Arg(0)) 66 task, err := m.ShrinkVirtualDisk(ctx, path, dc, cmd.copy) 67 if err != nil { 68 return err 69 } 70 71 logger := cmd.ProgressLogger(fmt.Sprintf("Shrinking %s...", path)) 72 defer logger.Wait() 73 74 _, err = task.WaitForResult(ctx, logger) 75 return err 76 }