Blame vendor/github.com/vmware/govmomi/object/virtual_disk_manager_internal.go

Packit Service 4d2de5
/*
Packit Service 4d2de5
Copyright (c) 2017 VMware, Inc. All Rights Reserved.
Packit Service 4d2de5
Packit Service 4d2de5
Licensed under the Apache License, Version 2.0 (the "License");
Packit Service 4d2de5
you may not use this file except in compliance with the License.
Packit Service 4d2de5
You may obtain a copy of the License at
Packit Service 4d2de5
Packit Service 4d2de5
    http://www.apache.org/licenses/LICENSE-2.0
Packit Service 4d2de5
Packit Service 4d2de5
Unless required by applicable law or agreed to in writing, software
Packit Service 4d2de5
distributed under the License is distributed on an "AS IS" BASIS,
Packit Service 4d2de5
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Packit Service 4d2de5
See the License for the specific language governing permissions and
Packit Service 4d2de5
limitations under the License.
Packit Service 4d2de5
*/
Packit Service 4d2de5
Packit Service 4d2de5
package object
Packit Service 4d2de5
Packit Service 4d2de5
import (
Packit Service 4d2de5
	"context"
Packit Service 4d2de5
	"reflect"
Packit Service 4d2de5
Packit Service 4d2de5
	"github.com/vmware/govmomi/vim25/soap"
Packit Service 4d2de5
	"github.com/vmware/govmomi/vim25/types"
Packit Service 4d2de5
)
Packit Service 4d2de5
Packit Service 4d2de5
func init() {
Packit Service 4d2de5
	types.Add("ArrayOfVirtualDiskInfo", reflect.TypeOf((*arrayOfVirtualDiskInfo)(nil)).Elem())
Packit Service 4d2de5
Packit Service 4d2de5
	types.Add("VirtualDiskInfo", reflect.TypeOf((*VirtualDiskInfo)(nil)).Elem())
Packit Service 4d2de5
}
Packit Service 4d2de5
Packit Service 4d2de5
type arrayOfVirtualDiskInfo struct {
Packit Service 4d2de5
	VirtualDiskInfo []VirtualDiskInfo `xml:"VirtualDiskInfo,omitempty"`
Packit Service 4d2de5
}
Packit Service 4d2de5
Packit Service 4d2de5
type queryVirtualDiskInfoTaskRequest struct {
Packit Service 4d2de5
	This           types.ManagedObjectReference  `xml:"_this"`
Packit Service 4d2de5
	Name           string                        `xml:"name"`
Packit Service 4d2de5
	Datacenter     *types.ManagedObjectReference `xml:"datacenter,omitempty"`
Packit Service 4d2de5
	IncludeParents bool                          `xml:"includeParents"`
Packit Service 4d2de5
}
Packit Service 4d2de5
Packit Service 4d2de5
type queryVirtualDiskInfoTaskResponse struct {
Packit Service 4d2de5
	Returnval types.ManagedObjectReference `xml:"returnval"`
Packit Service 4d2de5
}
Packit Service 4d2de5
Packit Service 4d2de5
type queryVirtualDiskInfoTaskBody struct {
Packit Service 4d2de5
	Req         *queryVirtualDiskInfoTaskRequest  `xml:"urn:internalvim25 QueryVirtualDiskInfo_Task,omitempty"`
Packit Service 4d2de5
	Res         *queryVirtualDiskInfoTaskResponse `xml:"urn:vim25 QueryVirtualDiskInfo_TaskResponse,omitempty"`
Packit Service 4d2de5
	InternalRes *queryVirtualDiskInfoTaskResponse `xml:"urn:internalvim25 QueryVirtualDiskInfo_TaskResponse,omitempty"`
Packit Service 4d2de5
	Err         *soap.Fault                       `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
Packit Service 4d2de5
}
Packit Service 4d2de5
Packit Service 4d2de5
func (b *queryVirtualDiskInfoTaskBody) Fault() *soap.Fault { return b.Err }
Packit Service 4d2de5
Packit Service 4d2de5
func queryVirtualDiskInfoTask(ctx context.Context, r soap.RoundTripper, req *queryVirtualDiskInfoTaskRequest) (*queryVirtualDiskInfoTaskResponse, error) {
Packit Service 4d2de5
	var reqBody, resBody queryVirtualDiskInfoTaskBody
Packit Service 4d2de5
Packit Service 4d2de5
	reqBody.Req = req
Packit Service 4d2de5
Packit Service 4d2de5
	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
Packit Service 4d2de5
		return nil, err
Packit Service 4d2de5
	}
Packit Service 4d2de5
Packit Service 4d2de5
	if resBody.Res != nil {
Packit Service 4d2de5
		return resBody.Res, nil
Packit Service 4d2de5
	}
Packit Service 4d2de5
Packit Service 4d2de5
	return resBody.InternalRes, nil
Packit Service 4d2de5
}
Packit Service 4d2de5
Packit Service 4d2de5
type VirtualDiskInfo struct {
Packit Service 4d2de5
	Name     string `xml:"unit>name"`
Packit Service 4d2de5
	DiskType string `xml:"diskType"`
Packit Service 4d2de5
	Parent   string `xml:"parent,omitempty"`
Packit Service 4d2de5
}
Packit Service 4d2de5
Packit Service 4d2de5
func (m VirtualDiskManager) QueryVirtualDiskInfo(ctx context.Context, name string, dc *Datacenter, includeParents bool) ([]VirtualDiskInfo, error) {
Packit Service 4d2de5
	req := queryVirtualDiskInfoTaskRequest{
Packit Service 4d2de5
		This:           m.Reference(),
Packit Service 4d2de5
		Name:           name,
Packit Service 4d2de5
		IncludeParents: includeParents,
Packit Service 4d2de5
	}
Packit Service 4d2de5
Packit Service 4d2de5
	if dc != nil {
Packit Service 4d2de5
		ref := dc.Reference()
Packit Service 4d2de5
		req.Datacenter = &ref
Packit Service 4d2de5
	}
Packit Service 4d2de5
Packit Service 4d2de5
	res, err := queryVirtualDiskInfoTask(ctx, m.Client(), &req)
Packit Service 4d2de5
	if err != nil {
Packit Service 4d2de5
		return nil, err
Packit Service 4d2de5
	}
Packit Service 4d2de5
Packit Service 4d2de5
	info, err := NewTask(m.Client(), res.Returnval).WaitForResult(ctx, nil)
Packit Service 4d2de5
	if err != nil {
Packit Service 4d2de5
		return nil, err
Packit Service 4d2de5
	}
Packit Service 4d2de5
Packit Service 4d2de5
	return info.Result.(arrayOfVirtualDiskInfo).VirtualDiskInfo, nil
Packit Service 4d2de5
}
Packit Service 4d2de5
Packit Service 4d2de5
type createChildDiskTaskRequest struct {
Packit Service 4d2de5
	This             types.ManagedObjectReference  `xml:"_this"`
Packit Service 4d2de5
	ChildName        string                        `xml:"childName"`
Packit Service 4d2de5
	ChildDatacenter  *types.ManagedObjectReference `xml:"childDatacenter,omitempty"`
Packit Service 4d2de5
	ParentName       string                        `xml:"parentName"`
Packit Service 4d2de5
	ParentDatacenter *types.ManagedObjectReference `xml:"parentDatacenter,omitempty"`
Packit Service 4d2de5
	IsLinkedClone    bool                          `xml:"isLinkedClone"`
Packit Service 4d2de5
}
Packit Service 4d2de5
Packit Service 4d2de5
type createChildDiskTaskResponse struct {
Packit Service 4d2de5
	Returnval types.ManagedObjectReference `xml:"returnval"`
Packit Service 4d2de5
}
Packit Service 4d2de5
Packit Service 4d2de5
type createChildDiskTaskBody struct {
Packit Service 4d2de5
	Req         *createChildDiskTaskRequest  `xml:"urn:internalvim25 CreateChildDisk_Task,omitempty"`
Packit Service 4d2de5
	Res         *createChildDiskTaskResponse `xml:"urn:vim25 CreateChildDisk_TaskResponse,omitempty"`
Packit Service 4d2de5
	InternalRes *createChildDiskTaskResponse `xml:"urn:internalvim25 CreateChildDisk_TaskResponse,omitempty"`
Packit Service 4d2de5
	Err         *soap.Fault                  `xml:"http://schemas.xmlsoap.org/soap/envelope/ Fault,omitempty"`
Packit Service 4d2de5
}
Packit Service 4d2de5
Packit Service 4d2de5
func (b *createChildDiskTaskBody) Fault() *soap.Fault { return b.Err }
Packit Service 4d2de5
Packit Service 4d2de5
func createChildDiskTask(ctx context.Context, r soap.RoundTripper, req *createChildDiskTaskRequest) (*createChildDiskTaskResponse, error) {
Packit Service 4d2de5
	var reqBody, resBody createChildDiskTaskBody
Packit Service 4d2de5
Packit Service 4d2de5
	reqBody.Req = req
Packit Service 4d2de5
Packit Service 4d2de5
	if err := r.RoundTrip(ctx, &reqBody, &resBody); err != nil {
Packit Service 4d2de5
		return nil, err
Packit Service 4d2de5
	}
Packit Service 4d2de5
Packit Service 4d2de5
	if resBody.Res != nil {
Packit Service 4d2de5
		return resBody.Res, nil // vim-version <= 6.5
Packit Service 4d2de5
	}
Packit Service 4d2de5
Packit Service 4d2de5
	return resBody.InternalRes, nil // vim-version >= 6.7
Packit Service 4d2de5
}
Packit Service 4d2de5
Packit Service 4d2de5
func (m VirtualDiskManager) CreateChildDisk(ctx context.Context, parent string, pdc *Datacenter, name string, dc *Datacenter, linked bool) (*Task, error) {
Packit Service 4d2de5
	req := createChildDiskTaskRequest{
Packit Service 4d2de5
		This:          m.Reference(),
Packit Service 4d2de5
		ChildName:     name,
Packit Service 4d2de5
		ParentName:    parent,
Packit Service 4d2de5
		IsLinkedClone: linked,
Packit Service 4d2de5
	}
Packit Service 4d2de5
Packit Service 4d2de5
	if dc != nil {
Packit Service 4d2de5
		ref := dc.Reference()
Packit Service 4d2de5
		req.ChildDatacenter = &ref
Packit Service 4d2de5
	}
Packit Service 4d2de5
Packit Service 4d2de5
	if pdc != nil {
Packit Service 4d2de5
		ref := pdc.Reference()
Packit Service 4d2de5
		req.ParentDatacenter = &ref
Packit Service 4d2de5
	}
Packit Service 4d2de5
Packit Service 4d2de5
	res, err := createChildDiskTask(ctx, m.Client(), &req)
Packit Service 4d2de5
	if err != nil {
Packit Service 4d2de5
		return nil, err
Packit Service 4d2de5
	}
Packit Service 4d2de5
Packit Service 4d2de5
	return NewTask(m.Client(), res.Returnval), nil
Packit Service 4d2de5
}