Blame vendor/github.com/vmware/govmomi/govc/datastore/download.go

Packit Service 4d2de5
/*
Packit Service 4d2de5
Copyright (c) 2014-2015 VMware, Inc. All Rights Reserved.
Packit Service 4d2de5
Packit Service 4d2de5
Licensed under the Apache License, Version 2.0 (the "License");
Packit Service 4d2de5
you may not use this file except in compliance with the License.
Packit Service 4d2de5
You may obtain a copy of the License at
Packit Service 4d2de5
Packit Service 4d2de5
    http://www.apache.org/licenses/LICENSE-2.0
Packit Service 4d2de5
Packit Service 4d2de5
Unless required by applicable law or agreed to in writing, software
Packit Service 4d2de5
distributed under the License is distributed on an "AS IS" BASIS,
Packit Service 4d2de5
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Packit Service 4d2de5
See the License for the specific language governing permissions and
Packit Service 4d2de5
limitations under the License.
Packit Service 4d2de5
*/
Packit Service 4d2de5
Packit Service 4d2de5
package datastore
Packit Service 4d2de5
Packit Service 4d2de5
import (
Packit Service 4d2de5
	"context"
Packit Service 4d2de5
	"errors"
Packit Service 4d2de5
	"flag"
Packit Service 4d2de5
	"fmt"
Packit Service 4d2de5
	"io"
Packit Service 4d2de5
	"os"
Packit Service 4d2de5
Packit Service 4d2de5
	"github.com/vmware/govmomi/govc/cli"
Packit Service 4d2de5
	"github.com/vmware/govmomi/govc/flags"
Packit Service 4d2de5
	"github.com/vmware/govmomi/vim25/soap"
Packit Service 4d2de5
)
Packit Service 4d2de5
Packit Service 4d2de5
type download struct {
Packit Service 4d2de5
	*flags.DatastoreFlag
Packit Service 4d2de5
	*flags.HostSystemFlag
Packit Service 4d2de5
}
Packit Service 4d2de5
Packit Service 4d2de5
func init() {
Packit Service 4d2de5
	cli.Register("datastore.download", &download{})
Packit Service 4d2de5
}
Packit Service 4d2de5
Packit Service 4d2de5
func (cmd *download) Register(ctx context.Context, f *flag.FlagSet) {
Packit Service 4d2de5
	cmd.DatastoreFlag, ctx = flags.NewDatastoreFlag(ctx)
Packit Service 4d2de5
	cmd.DatastoreFlag.Register(ctx, f)
Packit Service 4d2de5
Packit Service 4d2de5
	cmd.HostSystemFlag, ctx = flags.NewHostSystemFlag(ctx)
Packit Service 4d2de5
	cmd.HostSystemFlag.Register(ctx, f)
Packit Service 4d2de5
}
Packit Service 4d2de5
Packit Service 4d2de5
func (cmd *download) Process(ctx context.Context) error {
Packit Service 4d2de5
	if err := cmd.DatastoreFlag.Process(ctx); err != nil {
Packit Service 4d2de5
		return err
Packit Service 4d2de5
	}
Packit Service 4d2de5
	if err := cmd.HostSystemFlag.Process(ctx); err != nil {
Packit Service 4d2de5
		return err
Packit Service 4d2de5
	}
Packit Service 4d2de5
	return nil
Packit Service 4d2de5
}
Packit Service 4d2de5
Packit Service 4d2de5
func (cmd *download) Usage() string {
Packit Service 4d2de5
	return "SOURCE DEST"
Packit Service 4d2de5
}
Packit Service 4d2de5
Packit Service 4d2de5
func (cmd *download) Description() string {
Packit Service 4d2de5
	return `Copy SOURCE from DS to DEST on the local system.
Packit Service 4d2de5
Packit Service 4d2de5
If DEST name is "-", source is written to stdout.
Packit Service 4d2de5
Packit Service 4d2de5
Examples:
Packit Service 4d2de5
  govc datastore.download vm-name/vmware.log ./local.log
Packit Service 4d2de5
  govc datastore.download vm-name/vmware.log - | grep -i error`
Packit Service 4d2de5
}
Packit Service 4d2de5
Packit Service 4d2de5
func (cmd *download) Run(ctx context.Context, f *flag.FlagSet) error {
Packit Service 4d2de5
	args := f.Args()
Packit Service 4d2de5
	if len(args) != 2 {
Packit Service 4d2de5
		return errors.New("invalid arguments")
Packit Service 4d2de5
	}
Packit Service 4d2de5
Packit Service 4d2de5
	ds, err := cmd.Datastore()
Packit Service 4d2de5
	if err != nil {
Packit Service 4d2de5
		return err
Packit Service 4d2de5
	}
Packit Service 4d2de5
Packit Service 4d2de5
	h, err := cmd.HostSystemIfSpecified()
Packit Service 4d2de5
	if err != nil {
Packit Service 4d2de5
		return err
Packit Service 4d2de5
	}
Packit Service 4d2de5
Packit Service 4d2de5
	var via string
Packit Service 4d2de5
Packit Service 4d2de5
	if h != nil {
Packit Service 4d2de5
		via = fmt.Sprintf(" via %s", h.InventoryPath)
Packit Service 4d2de5
		ctx = ds.HostContext(ctx, h)
Packit Service 4d2de5
	}
Packit Service 4d2de5
Packit Service 4d2de5
	p := soap.DefaultDownload
Packit Service 4d2de5
Packit Service 4d2de5
	src := args[0]
Packit Service 4d2de5
	dst := args[1]
Packit Service 4d2de5
Packit Service 4d2de5
	if dst == "-" {
Packit Service 4d2de5
		f, _, err := ds.Download(ctx, src, &p)
Packit Service 4d2de5
		if err != nil {
Packit Service 4d2de5
			return err
Packit Service 4d2de5
		}
Packit Service 4d2de5
		_, err = io.Copy(os.Stdout, f)
Packit Service 4d2de5
		return err
Packit Service 4d2de5
	}
Packit Service 4d2de5
Packit Service 4d2de5
	if cmd.DatastoreFlag.OutputFlag.TTY {
Packit Service 4d2de5
		logger := cmd.DatastoreFlag.ProgressLogger(fmt.Sprintf("Downloading%s... ", via))
Packit Service 4d2de5
		p.Progress = logger
Packit Service 4d2de5
		defer logger.Wait()
Packit Service 4d2de5
	}
Packit Service 4d2de5
Packit Service 4d2de5
	return ds.DownloadFile(ctx, src, dst, &p)
Packit Service 4d2de5
}