github.com/vmware/govmomi@v0.43.0/object/virtual_disk_manager.go (about) 1 /* 2 Copyright (c) 2015 VMware, Inc. All Rights Reserved. 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 package object 18 19 import ( 20 "context" 21 22 "github.com/vmware/govmomi/vim25" 23 "github.com/vmware/govmomi/vim25/methods" 24 "github.com/vmware/govmomi/vim25/types" 25 ) 26 27 type VirtualDiskManager struct { 28 Common 29 } 30 31 func NewVirtualDiskManager(c *vim25.Client) *VirtualDiskManager { 32 m := VirtualDiskManager{ 33 Common: NewCommon(c, *c.ServiceContent.VirtualDiskManager), 34 } 35 36 return &m 37 } 38 39 // CopyVirtualDisk copies a virtual disk, performing conversions as specified in the spec. 40 func (m VirtualDiskManager) CopyVirtualDisk( 41 ctx context.Context, 42 sourceName string, sourceDatacenter *Datacenter, 43 destName string, destDatacenter *Datacenter, 44 destSpec *types.VirtualDiskSpec, force bool) (*Task, error) { 45 46 req := types.CopyVirtualDisk_Task{ 47 This: m.Reference(), 48 SourceName: sourceName, 49 DestName: destName, 50 DestSpec: destSpec, 51 Force: types.NewBool(force), 52 } 53 54 if sourceDatacenter != nil { 55 ref := sourceDatacenter.Reference() 56 req.SourceDatacenter = &ref 57 } 58 59 if destDatacenter != nil { 60 ref := destDatacenter.Reference() 61 req.DestDatacenter = &ref 62 } 63 64 res, err := methods.CopyVirtualDisk_Task(ctx, m.c, &req) 65 if err != nil { 66 return nil, err 67 } 68 69 return NewTask(m.c, res.Returnval), nil 70 } 71 72 // CreateVirtualDisk creates a new virtual disk. 73 func (m VirtualDiskManager) CreateVirtualDisk( 74 ctx context.Context, 75 name string, datacenter *Datacenter, 76 spec types.BaseVirtualDiskSpec) (*Task, error) { 77 78 req := types.CreateVirtualDisk_Task{ 79 This: m.Reference(), 80 Name: name, 81 Spec: spec, 82 } 83 84 if datacenter != nil { 85 ref := datacenter.Reference() 86 req.Datacenter = &ref 87 } 88 89 res, err := methods.CreateVirtualDisk_Task(ctx, m.c, &req) 90 if err != nil { 91 return nil, err 92 } 93 94 return NewTask(m.c, res.Returnval), nil 95 } 96 97 // ExtendVirtualDisk extends an existing virtual disk. 98 func (m VirtualDiskManager) ExtendVirtualDisk( 99 ctx context.Context, 100 name string, datacenter *Datacenter, 101 capacityKb int64, 102 eagerZero *bool) (*Task, error) { 103 104 req := types.ExtendVirtualDisk_Task{ 105 This: m.Reference(), 106 Name: name, 107 NewCapacityKb: capacityKb, 108 EagerZero: eagerZero, 109 } 110 111 if datacenter != nil { 112 ref := datacenter.Reference() 113 req.Datacenter = &ref 114 } 115 116 res, err := methods.ExtendVirtualDisk_Task(ctx, m.c, &req) 117 if err != nil { 118 return nil, err 119 } 120 121 return NewTask(m.c, res.Returnval), nil 122 } 123 124 // MoveVirtualDisk moves a virtual disk. 125 func (m VirtualDiskManager) MoveVirtualDisk( 126 ctx context.Context, 127 sourceName string, sourceDatacenter *Datacenter, 128 destName string, destDatacenter *Datacenter, 129 force bool) (*Task, error) { 130 req := types.MoveVirtualDisk_Task{ 131 This: m.Reference(), 132 SourceName: sourceName, 133 DestName: destName, 134 Force: types.NewBool(force), 135 } 136 137 if sourceDatacenter != nil { 138 ref := sourceDatacenter.Reference() 139 req.SourceDatacenter = &ref 140 } 141 142 if destDatacenter != nil { 143 ref := destDatacenter.Reference() 144 req.DestDatacenter = &ref 145 } 146 147 res, err := methods.MoveVirtualDisk_Task(ctx, m.c, &req) 148 if err != nil { 149 return nil, err 150 } 151 152 return NewTask(m.c, res.Returnval), nil 153 } 154 155 // DeleteVirtualDisk deletes a virtual disk. 156 func (m VirtualDiskManager) DeleteVirtualDisk(ctx context.Context, name string, dc *Datacenter) (*Task, error) { 157 req := types.DeleteVirtualDisk_Task{ 158 This: m.Reference(), 159 Name: name, 160 } 161 162 if dc != nil { 163 ref := dc.Reference() 164 req.Datacenter = &ref 165 } 166 167 res, err := methods.DeleteVirtualDisk_Task(ctx, m.c, &req) 168 if err != nil { 169 return nil, err 170 } 171 172 return NewTask(m.c, res.Returnval), nil 173 } 174 175 // InflateVirtualDisk inflates a virtual disk. 176 func (m VirtualDiskManager) InflateVirtualDisk(ctx context.Context, name string, dc *Datacenter) (*Task, error) { 177 req := types.InflateVirtualDisk_Task{ 178 This: m.Reference(), 179 Name: name, 180 } 181 182 if dc != nil { 183 ref := dc.Reference() 184 req.Datacenter = &ref 185 } 186 187 res, err := methods.InflateVirtualDisk_Task(ctx, m.c, &req) 188 if err != nil { 189 return nil, err 190 } 191 192 return NewTask(m.c, res.Returnval), nil 193 } 194 195 // ShrinkVirtualDisk shrinks a virtual disk. 196 func (m VirtualDiskManager) ShrinkVirtualDisk(ctx context.Context, name string, dc *Datacenter, copy *bool) (*Task, error) { 197 req := types.ShrinkVirtualDisk_Task{ 198 This: m.Reference(), 199 Name: name, 200 Copy: copy, 201 } 202 203 if dc != nil { 204 ref := dc.Reference() 205 req.Datacenter = &ref 206 } 207 208 res, err := methods.ShrinkVirtualDisk_Task(ctx, m.c, &req) 209 if err != nil { 210 return nil, err 211 } 212 213 return NewTask(m.c, res.Returnval), nil 214 } 215 216 // Queries virtual disk uuid 217 func (m VirtualDiskManager) QueryVirtualDiskUuid(ctx context.Context, name string, dc *Datacenter) (string, error) { 218 req := types.QueryVirtualDiskUuid{ 219 This: m.Reference(), 220 Name: name, 221 } 222 223 if dc != nil { 224 ref := dc.Reference() 225 req.Datacenter = &ref 226 } 227 228 res, err := methods.QueryVirtualDiskUuid(ctx, m.c, &req) 229 if err != nil { 230 return "", err 231 } 232 233 if res == nil { 234 return "", nil 235 } 236 237 return res.Returnval, nil 238 } 239 240 func (m VirtualDiskManager) SetVirtualDiskUuid(ctx context.Context, name string, dc *Datacenter, uuid string) error { 241 req := types.SetVirtualDiskUuid{ 242 This: m.Reference(), 243 Name: name, 244 Uuid: uuid, 245 } 246 247 if dc != nil { 248 ref := dc.Reference() 249 req.Datacenter = &ref 250 } 251 252 _, err := methods.SetVirtualDiskUuid(ctx, m.c, &req) 253 return err 254 }