github.com/vmware/govmomi@v0.51.0/cli/datastore/upload.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 datastore
     6  
     7  import (
     8  	"context"
     9  	"errors"
    10  	"flag"
    11  	"os"
    12  
    13  	"github.com/vmware/govmomi/cli"
    14  	"github.com/vmware/govmomi/cli/flags"
    15  	"github.com/vmware/govmomi/vim25/soap"
    16  )
    17  
    18  type upload struct {
    19  	*flags.OutputFlag
    20  	*flags.DatastoreFlag
    21  }
    22  
    23  func init() {
    24  	cli.Register("datastore.upload", &upload{})
    25  }
    26  
    27  func (cmd *upload) Register(ctx context.Context, f *flag.FlagSet) {
    28  	cmd.OutputFlag, ctx = flags.NewOutputFlag(ctx)
    29  	cmd.OutputFlag.Register(ctx, f)
    30  
    31  	cmd.DatastoreFlag, ctx = flags.NewDatastoreFlag(ctx)
    32  	cmd.DatastoreFlag.Register(ctx, f)
    33  }
    34  
    35  func (cmd *upload) Process(ctx context.Context) error {
    36  	if err := cmd.OutputFlag.Process(ctx); err != nil {
    37  		return err
    38  	}
    39  	if err := cmd.DatastoreFlag.Process(ctx); err != nil {
    40  		return err
    41  	}
    42  	return nil
    43  }
    44  
    45  func (cmd *upload) Usage() string {
    46  	return "SOURCE DEST"
    47  }
    48  
    49  func (cmd *upload) Description() string {
    50  	return `Copy SOURCE from the local system to DEST on DS.
    51  
    52  If SOURCE name is "-", read source from stdin.
    53  
    54  Examples:
    55    govc datastore.upload -ds datastore1 ./config.iso vm-name/config.iso
    56    genisoimage ... | govc datastore.upload -ds datastore1 - vm-name/config.iso`
    57  }
    58  
    59  func (cmd *upload) Run(ctx context.Context, f *flag.FlagSet) error {
    60  	args := f.Args()
    61  	if len(args) != 2 {
    62  		return errors.New("invalid arguments")
    63  	}
    64  
    65  	ds, err := cmd.Datastore()
    66  	if err != nil {
    67  		return err
    68  	}
    69  
    70  	p := soap.DefaultUpload
    71  
    72  	src := args[0]
    73  	dst := args[1]
    74  
    75  	if src == "-" {
    76  		return ds.Upload(ctx, os.Stdin, dst, &p)
    77  	}
    78  
    79  	if cmd.OutputFlag.TTY {
    80  		logger := cmd.ProgressLogger("Uploading... ")
    81  		p.Progress = logger
    82  		defer logger.Wait()
    83  	}
    84  
    85  	return ds.UploadFile(ctx, src, dst, &p)
    86  }