github.com/vmware/govmomi@v0.51.0/cli/volume/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 volume 6 7 import ( 8 "context" 9 "errors" 10 "flag" 11 12 "github.com/vmware/govmomi/cli" 13 "github.com/vmware/govmomi/cli/flags" 14 "github.com/vmware/govmomi/cns" 15 "github.com/vmware/govmomi/cns/types" 16 "github.com/vmware/govmomi/units" 17 ) 18 19 type extend struct { 20 *flags.ClientFlag 21 22 size units.ByteSize 23 } 24 25 func init() { 26 cli.Register("volume.extend", &extend{}) 27 } 28 29 func (cmd *extend) Register(ctx context.Context, f *flag.FlagSet) { 30 cmd.ClientFlag, ctx = flags.NewClientFlag(ctx) 31 cmd.ClientFlag.Register(ctx, f) 32 33 f.Var(&cmd.size, "size", "New size of new volume") 34 } 35 36 func (cmd *extend) Usage() string { 37 return "ID" 38 } 39 40 func (cmd *extend) Description() string { 41 return `Extend CNS volume. 42 43 Examples: 44 govc volume.extend -size 10GB f75989dc-95b9-4db7-af96-8583f24bc59d` 45 } 46 47 func (cmd *extend) Run(ctx context.Context, f *flag.FlagSet) error { 48 if f.NArg() != 1 { 49 return flag.ErrHelp 50 } 51 52 c, err := cmd.CnsClient() 53 if err != nil { 54 return err 55 } 56 57 spec := []types.CnsVolumeExtendSpec{{ 58 VolumeId: types.CnsVolumeId{ 59 Id: f.Arg(0), 60 }, 61 CapacityInMb: int64(cmd.size) / units.MB, 62 }} 63 64 task, err := c.ExtendVolume(ctx, spec) 65 if err != nil { 66 return err 67 } 68 69 info, err := cns.GetTaskInfo(ctx, task) 70 if err != nil { 71 return err 72 } 73 74 res, err := cns.GetTaskResult(ctx, info) 75 if err != nil { 76 return err 77 } 78 79 fault := res.GetCnsVolumeOperationResult().Fault 80 if fault != nil { 81 return errors.New(fault.LocalizedMessage) 82 } 83 84 return nil 85 }