github.com/vmware/govmomi@v0.51.0/object/virtual_disk_manager.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/vim25"
    11  	"github.com/vmware/govmomi/vim25/methods"
    12  	"github.com/vmware/govmomi/vim25/types"
    13  )
    14  
    15  type VirtualDiskManager struct {
    16  	Common
    17  }
    18  
    19  func NewVirtualDiskManager(c *vim25.Client) *VirtualDiskManager {
    20  	m := VirtualDiskManager{
    21  		Common: NewCommon(c, *c.ServiceContent.VirtualDiskManager),
    22  	}
    23  
    24  	return &m
    25  }
    26  
    27  // CopyVirtualDisk copies a virtual disk, performing conversions as specified in the spec.
    28  func (m VirtualDiskManager) CopyVirtualDisk(
    29  	ctx context.Context,
    30  	sourceName string, sourceDatacenter *Datacenter,
    31  	destName string, destDatacenter *Datacenter,
    32  	destSpec types.BaseVirtualDiskSpec, force bool) (*Task, error) {
    33  
    34  	req := types.CopyVirtualDisk_Task{
    35  		This:       m.Reference(),
    36  		SourceName: sourceName,
    37  		DestName:   destName,
    38  		DestSpec:   destSpec,
    39  		Force:      types.NewBool(force),
    40  	}
    41  
    42  	if sourceDatacenter != nil {
    43  		ref := sourceDatacenter.Reference()
    44  		req.SourceDatacenter = &ref
    45  	}
    46  
    47  	if destDatacenter != nil {
    48  		ref := destDatacenter.Reference()
    49  		req.DestDatacenter = &ref
    50  	}
    51  
    52  	res, err := methods.CopyVirtualDisk_Task(ctx, m.c, &req)
    53  	if err != nil {
    54  		return nil, err
    55  	}
    56  
    57  	return NewTask(m.c, res.Returnval), nil
    58  }
    59  
    60  // CreateVirtualDisk creates a new virtual disk.
    61  func (m VirtualDiskManager) CreateVirtualDisk(
    62  	ctx context.Context,
    63  	name string, datacenter *Datacenter,
    64  	spec types.BaseVirtualDiskSpec) (*Task, error) {
    65  
    66  	req := types.CreateVirtualDisk_Task{
    67  		This: m.Reference(),
    68  		Name: name,
    69  		Spec: spec,
    70  	}
    71  
    72  	if datacenter != nil {
    73  		ref := datacenter.Reference()
    74  		req.Datacenter = &ref
    75  	}
    76  
    77  	res, err := methods.CreateVirtualDisk_Task(ctx, m.c, &req)
    78  	if err != nil {
    79  		return nil, err
    80  	}
    81  
    82  	return NewTask(m.c, res.Returnval), nil
    83  }
    84  
    85  // ExtendVirtualDisk extends an existing virtual disk.
    86  func (m VirtualDiskManager) ExtendVirtualDisk(
    87  	ctx context.Context,
    88  	name string, datacenter *Datacenter,
    89  	capacityKb int64,
    90  	eagerZero *bool) (*Task, error) {
    91  
    92  	req := types.ExtendVirtualDisk_Task{
    93  		This:          m.Reference(),
    94  		Name:          name,
    95  		NewCapacityKb: capacityKb,
    96  		EagerZero:     eagerZero,
    97  	}
    98  
    99  	if datacenter != nil {
   100  		ref := datacenter.Reference()
   101  		req.Datacenter = &ref
   102  	}
   103  
   104  	res, err := methods.ExtendVirtualDisk_Task(ctx, m.c, &req)
   105  	if err != nil {
   106  		return nil, err
   107  	}
   108  
   109  	return NewTask(m.c, res.Returnval), nil
   110  }
   111  
   112  // MoveVirtualDisk moves a virtual disk.
   113  func (m VirtualDiskManager) MoveVirtualDisk(
   114  	ctx context.Context,
   115  	sourceName string, sourceDatacenter *Datacenter,
   116  	destName string, destDatacenter *Datacenter,
   117  	force bool) (*Task, error) {
   118  	req := types.MoveVirtualDisk_Task{
   119  		This:       m.Reference(),
   120  		SourceName: sourceName,
   121  		DestName:   destName,
   122  		Force:      types.NewBool(force),
   123  	}
   124  
   125  	if sourceDatacenter != nil {
   126  		ref := sourceDatacenter.Reference()
   127  		req.SourceDatacenter = &ref
   128  	}
   129  
   130  	if destDatacenter != nil {
   131  		ref := destDatacenter.Reference()
   132  		req.DestDatacenter = &ref
   133  	}
   134  
   135  	res, err := methods.MoveVirtualDisk_Task(ctx, m.c, &req)
   136  	if err != nil {
   137  		return nil, err
   138  	}
   139  
   140  	return NewTask(m.c, res.Returnval), nil
   141  }
   142  
   143  // DeleteVirtualDisk deletes a virtual disk.
   144  func (m VirtualDiskManager) DeleteVirtualDisk(ctx context.Context, name string, dc *Datacenter) (*Task, error) {
   145  	req := types.DeleteVirtualDisk_Task{
   146  		This: m.Reference(),
   147  		Name: name,
   148  	}
   149  
   150  	if dc != nil {
   151  		ref := dc.Reference()
   152  		req.Datacenter = &ref
   153  	}
   154  
   155  	res, err := methods.DeleteVirtualDisk_Task(ctx, m.c, &req)
   156  	if err != nil {
   157  		return nil, err
   158  	}
   159  
   160  	return NewTask(m.c, res.Returnval), nil
   161  }
   162  
   163  // InflateVirtualDisk inflates a virtual disk.
   164  func (m VirtualDiskManager) InflateVirtualDisk(ctx context.Context, name string, dc *Datacenter) (*Task, error) {
   165  	req := types.InflateVirtualDisk_Task{
   166  		This: m.Reference(),
   167  		Name: name,
   168  	}
   169  
   170  	if dc != nil {
   171  		ref := dc.Reference()
   172  		req.Datacenter = &ref
   173  	}
   174  
   175  	res, err := methods.InflateVirtualDisk_Task(ctx, m.c, &req)
   176  	if err != nil {
   177  		return nil, err
   178  	}
   179  
   180  	return NewTask(m.c, res.Returnval), nil
   181  }
   182  
   183  // ShrinkVirtualDisk shrinks a virtual disk.
   184  func (m VirtualDiskManager) ShrinkVirtualDisk(ctx context.Context, name string, dc *Datacenter, copy *bool) (*Task, error) {
   185  	req := types.ShrinkVirtualDisk_Task{
   186  		This: m.Reference(),
   187  		Name: name,
   188  		Copy: copy,
   189  	}
   190  
   191  	if dc != nil {
   192  		ref := dc.Reference()
   193  		req.Datacenter = &ref
   194  	}
   195  
   196  	res, err := methods.ShrinkVirtualDisk_Task(ctx, m.c, &req)
   197  	if err != nil {
   198  		return nil, err
   199  	}
   200  
   201  	return NewTask(m.c, res.Returnval), nil
   202  }
   203  
   204  // Queries virtual disk uuid
   205  func (m VirtualDiskManager) QueryVirtualDiskUuid(ctx context.Context, name string, dc *Datacenter) (string, error) {
   206  	req := types.QueryVirtualDiskUuid{
   207  		This: m.Reference(),
   208  		Name: name,
   209  	}
   210  
   211  	if dc != nil {
   212  		ref := dc.Reference()
   213  		req.Datacenter = &ref
   214  	}
   215  
   216  	res, err := methods.QueryVirtualDiskUuid(ctx, m.c, &req)
   217  	if err != nil {
   218  		return "", err
   219  	}
   220  
   221  	if res == nil {
   222  		return "", nil
   223  	}
   224  
   225  	return res.Returnval, nil
   226  }
   227  
   228  func (m VirtualDiskManager) SetVirtualDiskUuid(ctx context.Context, name string, dc *Datacenter, uuid string) error {
   229  	req := types.SetVirtualDiskUuid{
   230  		This: m.Reference(),
   231  		Name: name,
   232  		Uuid: uuid,
   233  	}
   234  
   235  	if dc != nil {
   236  		ref := dc.Reference()
   237  		req.Datacenter = &ref
   238  	}
   239  
   240  	_, err := methods.SetVirtualDiskUuid(ctx, m.c, &req)
   241  	return err
   242  }