github.com/vmware/govmomi@v0.51.0/object/virtual_disk_manager_internal.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/internal" 11 "github.com/vmware/govmomi/vim25/soap" 12 "github.com/vmware/govmomi/vim25/types" 13 ) 14 15 type VirtualDiskInfo = internal.VirtualDiskInfo 16 17 func (m VirtualDiskManager) QueryVirtualDiskInfo(ctx context.Context, name string, dc *Datacenter, includeParents bool) ([]VirtualDiskInfo, error) { 18 req := internal.QueryVirtualDiskInfoTaskRequest{ 19 This: m.Reference(), 20 Name: name, 21 IncludeParents: includeParents, 22 } 23 24 if dc != nil { 25 ref := dc.Reference() 26 req.Datacenter = &ref 27 } 28 29 res, err := internal.QueryVirtualDiskInfoTask(ctx, m.Client(), &req) 30 if err != nil { 31 return nil, err 32 } 33 34 info, err := NewTask(m.Client(), res.Returnval).WaitForResult(ctx, nil) 35 if err != nil { 36 return nil, err 37 } 38 39 return info.Result.(internal.ArrayOfVirtualDiskInfo).VirtualDiskInfo, nil 40 } 41 42 type createChildDiskTaskRequest struct { 43 This types.ManagedObjectReference `xml:"_this"` 44 ChildName string `xml:"childName"` 45 ChildDatacenter *types.ManagedObjectReference `xml:"childDatacenter,omitempty"` 46 ParentName string `xml:"parentName"` 47 ParentDatacenter *types.ManagedObjectReference `xml:"parentDatacenter,omitempty"` 48 IsLinkedClone bool `xml:"isLinkedClone"` 49 } 50 51 type createChildDiskTaskResponse struct { 52 Returnval types.ManagedObjectReference `xml:"returnval"` 53 } 54 55 type createChildDiskTaskBody struct { 56 Req *createChildDiskTaskRequest `xml:"urn:internalvim25 CreateChildDisk_Task,omitempty"` 57 Res *createChildDiskTaskResponse `xml:"urn:vim25 CreateChildDisk_TaskResponse,omitempty"` 58 InternalRes *createChildDiskTaskResponse `xml:"urn:internalvim25 CreateChildDisk_TaskResponse,omitempty"` 59 Err *soap.Fault `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"` 60 } 61 62 func (b *createChildDiskTaskBody) Fault() *soap.Fault { return b.Err } 63 64 func createChildDiskTask(ctx context.Context, r soap.RoundTripper, req *createChildDiskTaskRequest) (*createChildDiskTaskResponse, error) { 65 var reqBody, resBody createChildDiskTaskBody 66 67 reqBody.Req = req 68 69 if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil { 70 return nil, err 71 } 72 73 if resBody.Res != nil { 74 return resBody.Res, nil // vim-version <= 6.5 75 } 76 77 return resBody.InternalRes, nil // vim-version >= 6.7 78 } 79 80 func (m VirtualDiskManager) CreateChildDisk(ctx context.Context, parent string, pdc *Datacenter, name string, dc *Datacenter, linked bool) (*Task, error) { 81 req := createChildDiskTaskRequest{ 82 This: m.Reference(), 83 ChildName: name, 84 ParentName: parent, 85 IsLinkedClone: linked, 86 } 87 88 if dc != nil { 89 ref := dc.Reference() 90 req.ChildDatacenter = &ref 91 } 92 93 if pdc != nil { 94 ref := pdc.Reference() 95 req.ParentDatacenter = &ref 96 } 97 98 res, err := createChildDiskTask(ctx, m.Client(), &req) 99 if err != nil { 100 return nil, err 101 } 102 103 return NewTask(m.Client(), res.Returnval), nil 104 }