github.com/vmware/govmomi@v0.51.0/cli/datastore/disk/create.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 "github.com/vmware/govmomi/units" 16 "github.com/vmware/govmomi/vim25/types" 17 ) 18 19 type spec struct { 20 types.FileBackedVirtualDiskSpec 21 force bool 22 uuid string 23 } 24 25 func (s *spec) Register(ctx context.Context, f *flag.FlagSet) { 26 f.StringVar(&s.AdapterType, "a", string(types.VirtualDiskAdapterTypeLsiLogic), "Disk adapter") 27 f.StringVar(&s.DiskType, "d", string(types.VirtualDiskTypeThin), "Disk format") 28 f.BoolVar(&s.force, "f", false, "Force") 29 f.StringVar(&s.uuid, "uuid", "", "Disk UUID") 30 } 31 32 type create struct { 33 *flags.DatastoreFlag 34 35 Bytes units.ByteSize 36 spec 37 } 38 39 func init() { 40 cli.Register("datastore.disk.create", &create{}) 41 } 42 43 func (cmd *create) Register(ctx context.Context, f *flag.FlagSet) { 44 cmd.DatastoreFlag, ctx = flags.NewDatastoreFlag(ctx) 45 cmd.DatastoreFlag.Register(ctx, f) 46 47 _ = cmd.Bytes.Set("10G") 48 f.Var(&cmd.Bytes, "size", "Size of new disk") 49 50 cmd.spec.Register(ctx, f) 51 } 52 53 func (cmd *create) Usage() string { 54 return "VMDK" 55 } 56 57 func (cmd *create) Description() string { 58 return `Create VMDK on DS. 59 60 Examples: 61 govc datastore.mkdir disks 62 govc datastore.disk.create -size 24G disks/disk1.vmdk 63 govc datastore.disk.create disks/parent.vmdk disk/child.vmdk` 64 } 65 66 func (cmd *create) Run(ctx context.Context, f *flag.FlagSet) error { 67 if f.NArg() == 0 { 68 return flag.ErrHelp 69 } 70 71 dc, err := cmd.Datacenter() 72 if err != nil { 73 return err 74 } 75 76 ds, err := cmd.Datastore() 77 if err != nil { 78 return err 79 } 80 81 m := object.NewVirtualDiskManager(ds.Client()) 82 83 var task *object.Task 84 var dst string 85 86 if f.NArg() == 1 { 87 cmd.spec.CapacityKb = int64(cmd.Bytes) / 1024 88 dst = ds.Path(f.Arg(0)) 89 task, err = m.CreateVirtualDisk(ctx, dst, dc, &cmd.spec.FileBackedVirtualDiskSpec) 90 } else { 91 dst = ds.Path(f.Arg(0)) 92 task, err = m.CreateChildDisk(ctx, ds.Path(f.Arg(0)), dc, dst, dc, cmd.force) 93 } 94 95 if err != nil { 96 return err 97 } 98 99 logger := cmd.ProgressLogger(fmt.Sprintf("Creating %s...", dst)) 100 defer logger.Wait() 101 102 if _, err = task.WaitForResult(ctx, logger); err != nil { 103 return err 104 } 105 106 if cmd.uuid != "" { 107 return m.SetVirtualDiskUuid(ctx, dst, dc, cmd.uuid) 108 } 109 110 return nil 111 }