github.com/vmware/govmomi@v0.37.1/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 // MoveVirtualDisk moves a virtual disk. 98 func (m VirtualDiskManager) MoveVirtualDisk( 99 ctx context.Context, 100 sourceName string, sourceDatacenter *Datacenter, 101 destName string, destDatacenter *Datacenter, 102 force bool) (*Task, error) { 103 req := types.MoveVirtualDisk_Task{ 104 This: m.Reference(), 105 SourceName: sourceName, 106 DestName: destName, 107 Force: types.NewBool(force), 108 } 109 110 if sourceDatacenter != nil { 111 ref := sourceDatacenter.Reference() 112 req.SourceDatacenter = &ref 113 } 114 115 if destDatacenter != nil { 116 ref := destDatacenter.Reference() 117 req.DestDatacenter = &ref 118 } 119 120 res, err := methods.MoveVirtualDisk_Task(ctx, m.c, &req) 121 if err != nil { 122 return nil, err 123 } 124 125 return NewTask(m.c, res.Returnval), nil 126 } 127 128 // DeleteVirtualDisk deletes a virtual disk. 129 func (m VirtualDiskManager) DeleteVirtualDisk(ctx context.Context, name string, dc *Datacenter) (*Task, error) { 130 req := types.DeleteVirtualDisk_Task{ 131 This: m.Reference(), 132 Name: name, 133 } 134 135 if dc != nil { 136 ref := dc.Reference() 137 req.Datacenter = &ref 138 } 139 140 res, err := methods.DeleteVirtualDisk_Task(ctx, m.c, &req) 141 if err != nil { 142 return nil, err 143 } 144 145 return NewTask(m.c, res.Returnval), nil 146 } 147 148 // InflateVirtualDisk inflates a virtual disk. 149 func (m VirtualDiskManager) InflateVirtualDisk(ctx context.Context, name string, dc *Datacenter) (*Task, error) { 150 req := types.InflateVirtualDisk_Task{ 151 This: m.Reference(), 152 Name: name, 153 } 154 155 if dc != nil { 156 ref := dc.Reference() 157 req.Datacenter = &ref 158 } 159 160 res, err := methods.InflateVirtualDisk_Task(ctx, m.c, &req) 161 if err != nil { 162 return nil, err 163 } 164 165 return NewTask(m.c, res.Returnval), nil 166 } 167 168 // ShrinkVirtualDisk shrinks a virtual disk. 169 func (m VirtualDiskManager) ShrinkVirtualDisk(ctx context.Context, name string, dc *Datacenter, copy *bool) (*Task, error) { 170 req := types.ShrinkVirtualDisk_Task{ 171 This: m.Reference(), 172 Name: name, 173 Copy: copy, 174 } 175 176 if dc != nil { 177 ref := dc.Reference() 178 req.Datacenter = &ref 179 } 180 181 res, err := methods.ShrinkVirtualDisk_Task(ctx, m.c, &req) 182 if err != nil { 183 return nil, err 184 } 185 186 return NewTask(m.c, res.Returnval), nil 187 } 188 189 // Queries virtual disk uuid 190 func (m VirtualDiskManager) QueryVirtualDiskUuid(ctx context.Context, name string, dc *Datacenter) (string, error) { 191 req := types.QueryVirtualDiskUuid{ 192 This: m.Reference(), 193 Name: name, 194 } 195 196 if dc != nil { 197 ref := dc.Reference() 198 req.Datacenter = &ref 199 } 200 201 res, err := methods.QueryVirtualDiskUuid(ctx, m.c, &req) 202 if err != nil { 203 return "", err 204 } 205 206 if res == nil { 207 return "", nil 208 } 209 210 return res.Returnval, nil 211 } 212 213 func (m VirtualDiskManager) SetVirtualDiskUuid(ctx context.Context, name string, dc *Datacenter, uuid string) error { 214 req := types.SetVirtualDiskUuid{ 215 This: m.Reference(), 216 Name: name, 217 Uuid: uuid, 218 } 219 220 if dc != nil { 221 ref := dc.Reference() 222 req.Datacenter = &ref 223 } 224 225 _, err := methods.SetVirtualDiskUuid(ctx, m.c, &req) 226 return err 227 }