github.com/vmware/govmomi@v0.51.0/cli/datastore/disk/extend.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/units"
    13  
    14  	"github.com/vmware/govmomi/cli"
    15  	"github.com/vmware/govmomi/cli/flags"
    16  	"github.com/vmware/govmomi/object"
    17  )
    18  
    19  type extend struct {
    20  	*flags.DatastoreFlag
    21  	Bytes     units.ByteSize
    22  	EagerZero bool
    23  }
    24  
    25  func init() {
    26  	cli.Register("datastore.disk.extend", &extend{})
    27  }
    28  
    29  func (cmd *extend) Register(ctx context.Context, f *flag.FlagSet) {
    30  	cmd.DatastoreFlag, ctx = flags.NewDatastoreFlag(ctx)
    31  	cmd.DatastoreFlag.Register(ctx, f)
    32  
    33  	f.Var(&cmd.Bytes, "size", "New capacity for the disk")
    34  	f.BoolVar(&cmd.EagerZero, "eagerZero", false, "If true, the extended part of the disk will be explicitly filled with zeroes")
    35  }
    36  
    37  func (cmd *extend) Process(ctx context.Context) error {
    38  	return cmd.DatastoreFlag.Process(ctx)
    39  }
    40  
    41  func (cmd *extend) Usage() string {
    42  	return "VMDK"
    43  }
    44  
    45  func (cmd *extend) Description() string {
    46  	return `Extend VMDK on DS.
    47  
    48  Examples:
    49    govc datastore.disk.extend disks/disk1.vmdk -size=24G
    50    govc datastore.disk.extend disks/disk1.vmdk -size=24G -eagerZero=true`
    51  }
    52  
    53  func (cmd *extend) Run(ctx context.Context, f *flag.FlagSet) error {
    54  	if f.NArg() == 0 {
    55  		return flag.ErrHelp
    56  	}
    57  
    58  	dc, err := cmd.Datacenter()
    59  	if err != nil {
    60  		return err
    61  	}
    62  
    63  	ds, err := cmd.Datastore()
    64  	if err != nil {
    65  		return err
    66  	}
    67  
    68  	m := object.NewVirtualDiskManager(ds.Client())
    69  	path := ds.Path(f.Arg(0))
    70  	task, err := m.ExtendVirtualDisk(ctx, path, dc, int64(cmd.Bytes/1024), &cmd.EagerZero)
    71  	if err != nil {
    72  		return err
    73  	}
    74  
    75  	logger := cmd.ProgressLogger(fmt.Sprintf("Extending %s...", path))
    76  	defer logger.Wait()
    77  
    78  	_, err = task.WaitForResult(ctx, logger)
    79  	return err
    80  }