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  }