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 }