github.com/vmware/govmomi@v0.51.0/object/virtual_disk_manager.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 object 6 7 import ( 8 "context" 9 10 "github.com/vmware/govmomi/vim25" 11 "github.com/vmware/govmomi/vim25/methods" 12 "github.com/vmware/govmomi/vim25/types" 13 ) 14 15 type VirtualDiskManager struct { 16 Common 17 } 18 19 func NewVirtualDiskManager(c *vim25.Client) *VirtualDiskManager { 20 m := VirtualDiskManager{ 21 Common: NewCommon(c, *c.ServiceContent.VirtualDiskManager), 22 } 23 24 return &m 25 } 26 27 // CopyVirtualDisk copies a virtual disk, performing conversions as specified in the spec. 28 func (m VirtualDiskManager) CopyVirtualDisk( 29 ctx context.Context, 30 sourceName string, sourceDatacenter *Datacenter, 31 destName string, destDatacenter *Datacenter, 32 destSpec types.BaseVirtualDiskSpec, force bool) (*Task, error) { 33 34 req := types.CopyVirtualDisk_Task{ 35 This: m.Reference(), 36 SourceName: sourceName, 37 DestName: destName, 38 DestSpec: destSpec, 39 Force: types.NewBool(force), 40 } 41 42 if sourceDatacenter != nil { 43 ref := sourceDatacenter.Reference() 44 req.SourceDatacenter = &ref 45 } 46 47 if destDatacenter != nil { 48 ref := destDatacenter.Reference() 49 req.DestDatacenter = &ref 50 } 51 52 res, err := methods.CopyVirtualDisk_Task(ctx, m.c, &req) 53 if err != nil { 54 return nil, err 55 } 56 57 return NewTask(m.c, res.Returnval), nil 58 } 59 60 // CreateVirtualDisk creates a new virtual disk. 61 func (m VirtualDiskManager) CreateVirtualDisk( 62 ctx context.Context, 63 name string, datacenter *Datacenter, 64 spec types.BaseVirtualDiskSpec) (*Task, error) { 65 66 req := types.CreateVirtualDisk_Task{ 67 This: m.Reference(), 68 Name: name, 69 Spec: spec, 70 } 71 72 if datacenter != nil { 73 ref := datacenter.Reference() 74 req.Datacenter = &ref 75 } 76 77 res, err := methods.CreateVirtualDisk_Task(ctx, m.c, &req) 78 if err != nil { 79 return nil, err 80 } 81 82 return NewTask(m.c, res.Returnval), nil 83 } 84 85 // ExtendVirtualDisk extends an existing virtual disk. 86 func (m VirtualDiskManager) ExtendVirtualDisk( 87 ctx context.Context, 88 name string, datacenter *Datacenter, 89 capacityKb int64, 90 eagerZero *bool) (*Task, error) { 91 92 req := types.ExtendVirtualDisk_Task{ 93 This: m.Reference(), 94 Name: name, 95 NewCapacityKb: capacityKb, 96 EagerZero: eagerZero, 97 } 98 99 if datacenter != nil { 100 ref := datacenter.Reference() 101 req.Datacenter = &ref 102 } 103 104 res, err := methods.ExtendVirtualDisk_Task(ctx, m.c, &req) 105 if err != nil { 106 return nil, err 107 } 108 109 return NewTask(m.c, res.Returnval), nil 110 } 111 112 // MoveVirtualDisk moves a virtual disk. 113 func (m VirtualDiskManager) MoveVirtualDisk( 114 ctx context.Context, 115 sourceName string, sourceDatacenter *Datacenter, 116 destName string, destDatacenter *Datacenter, 117 force bool) (*Task, error) { 118 req := types.MoveVirtualDisk_Task{ 119 This: m.Reference(), 120 SourceName: sourceName, 121 DestName: destName, 122 Force: types.NewBool(force), 123 } 124 125 if sourceDatacenter != nil { 126 ref := sourceDatacenter.Reference() 127 req.SourceDatacenter = &ref 128 } 129 130 if destDatacenter != nil { 131 ref := destDatacenter.Reference() 132 req.DestDatacenter = &ref 133 } 134 135 res, err := methods.MoveVirtualDisk_Task(ctx, m.c, &req) 136 if err != nil { 137 return nil, err 138 } 139 140 return NewTask(m.c, res.Returnval), nil 141 } 142 143 // DeleteVirtualDisk deletes a virtual disk. 144 func (m VirtualDiskManager) DeleteVirtualDisk(ctx context.Context, name string, dc *Datacenter) (*Task, error) { 145 req := types.DeleteVirtualDisk_Task{ 146 This: m.Reference(), 147 Name: name, 148 } 149 150 if dc != nil { 151 ref := dc.Reference() 152 req.Datacenter = &ref 153 } 154 155 res, err := methods.DeleteVirtualDisk_Task(ctx, m.c, &req) 156 if err != nil { 157 return nil, err 158 } 159 160 return NewTask(m.c, res.Returnval), nil 161 } 162 163 // InflateVirtualDisk inflates a virtual disk. 164 func (m VirtualDiskManager) InflateVirtualDisk(ctx context.Context, name string, dc *Datacenter) (*Task, error) { 165 req := types.InflateVirtualDisk_Task{ 166 This: m.Reference(), 167 Name: name, 168 } 169 170 if dc != nil { 171 ref := dc.Reference() 172 req.Datacenter = &ref 173 } 174 175 res, err := methods.InflateVirtualDisk_Task(ctx, m.c, &req) 176 if err != nil { 177 return nil, err 178 } 179 180 return NewTask(m.c, res.Returnval), nil 181 } 182 183 // ShrinkVirtualDisk shrinks a virtual disk. 184 func (m VirtualDiskManager) ShrinkVirtualDisk(ctx context.Context, name string, dc *Datacenter, copy *bool) (*Task, error) { 185 req := types.ShrinkVirtualDisk_Task{ 186 This: m.Reference(), 187 Name: name, 188 Copy: copy, 189 } 190 191 if dc != nil { 192 ref := dc.Reference() 193 req.Datacenter = &ref 194 } 195 196 res, err := methods.ShrinkVirtualDisk_Task(ctx, m.c, &req) 197 if err != nil { 198 return nil, err 199 } 200 201 return NewTask(m.c, res.Returnval), nil 202 } 203 204 // Queries virtual disk uuid 205 func (m VirtualDiskManager) QueryVirtualDiskUuid(ctx context.Context, name string, dc *Datacenter) (string, error) { 206 req := types.QueryVirtualDiskUuid{ 207 This: m.Reference(), 208 Name: name, 209 } 210 211 if dc != nil { 212 ref := dc.Reference() 213 req.Datacenter = &ref 214 } 215 216 res, err := methods.QueryVirtualDiskUuid(ctx, m.c, &req) 217 if err != nil { 218 return "", err 219 } 220 221 if res == nil { 222 return "", nil 223 } 224 225 return res.Returnval, nil 226 } 227 228 func (m VirtualDiskManager) SetVirtualDiskUuid(ctx context.Context, name string, dc *Datacenter, uuid string) error { 229 req := types.SetVirtualDiskUuid{ 230 This: m.Reference(), 231 Name: name, 232 Uuid: uuid, 233 } 234 235 if dc != nil { 236 ref := dc.Reference() 237 req.Datacenter = &ref 238 } 239 240 _, err := methods.SetVirtualDiskUuid(ctx, m.c, &req) 241 return err 242 }