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  }