github.com/vmware/govmomi@v0.43.0/object/file_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 FileManager struct {
    28  	Common
    29  }
    30  
    31  func NewFileManager(c *vim25.Client) *FileManager {
    32  	f := FileManager{
    33  		Common: NewCommon(c, *c.ServiceContent.FileManager),
    34  	}
    35  
    36  	return &f
    37  }
    38  
    39  func (f FileManager) CopyDatastoreFile(ctx context.Context, sourceName string, sourceDatacenter *Datacenter, destinationName string, destinationDatacenter *Datacenter, force bool) (*Task, error) {
    40  	req := types.CopyDatastoreFile_Task{
    41  		This:            f.Reference(),
    42  		SourceName:      sourceName,
    43  		DestinationName: destinationName,
    44  		Force:           types.NewBool(force),
    45  	}
    46  
    47  	if sourceDatacenter != nil {
    48  		ref := sourceDatacenter.Reference()
    49  		req.SourceDatacenter = &ref
    50  	}
    51  
    52  	if destinationDatacenter != nil {
    53  		ref := destinationDatacenter.Reference()
    54  		req.DestinationDatacenter = &ref
    55  	}
    56  
    57  	res, err := methods.CopyDatastoreFile_Task(ctx, f.c, &req)
    58  	if err != nil {
    59  		return nil, err
    60  	}
    61  
    62  	return NewTask(f.c, res.Returnval), nil
    63  }
    64  
    65  // DeleteDatastoreFile deletes the specified file or folder from the datastore.
    66  func (f FileManager) DeleteDatastoreFile(ctx context.Context, name string, dc *Datacenter) (*Task, error) {
    67  	req := types.DeleteDatastoreFile_Task{
    68  		This: f.Reference(),
    69  		Name: name,
    70  	}
    71  
    72  	if dc != nil {
    73  		ref := dc.Reference()
    74  		req.Datacenter = &ref
    75  	}
    76  
    77  	res, err := methods.DeleteDatastoreFile_Task(ctx, f.c, &req)
    78  	if err != nil {
    79  		return nil, err
    80  	}
    81  
    82  	return NewTask(f.c, res.Returnval), nil
    83  }
    84  
    85  // MakeDirectory creates a folder using the specified name.
    86  func (f FileManager) MakeDirectory(ctx context.Context, name string, dc *Datacenter, createParentDirectories bool) error {
    87  	req := types.MakeDirectory{
    88  		This:                    f.Reference(),
    89  		Name:                    name,
    90  		CreateParentDirectories: types.NewBool(createParentDirectories),
    91  	}
    92  
    93  	if dc != nil {
    94  		ref := dc.Reference()
    95  		req.Datacenter = &ref
    96  	}
    97  
    98  	_, err := methods.MakeDirectory(ctx, f.c, &req)
    99  	return err
   100  }
   101  
   102  func (f FileManager) MoveDatastoreFile(ctx context.Context, sourceName string, sourceDatacenter *Datacenter, destinationName string, destinationDatacenter *Datacenter, force bool) (*Task, error) {
   103  	req := types.MoveDatastoreFile_Task{
   104  		This:            f.Reference(),
   105  		SourceName:      sourceName,
   106  		DestinationName: destinationName,
   107  		Force:           types.NewBool(force),
   108  	}
   109  
   110  	if sourceDatacenter != nil {
   111  		ref := sourceDatacenter.Reference()
   112  		req.SourceDatacenter = &ref
   113  	}
   114  
   115  	if destinationDatacenter != nil {
   116  		ref := destinationDatacenter.Reference()
   117  		req.DestinationDatacenter = &ref
   118  	}
   119  
   120  	res, err := methods.MoveDatastoreFile_Task(ctx, f.c, &req)
   121  	if err != nil {
   122  		return nil, err
   123  	}
   124  
   125  	return NewTask(f.c, res.Returnval), nil
   126  }