github.com/vmware/govmomi@v0.51.0/cli/object/mv.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  	"flag"
    10  	"fmt"
    11  
    12  	"github.com/vmware/govmomi/cli"
    13  	"github.com/vmware/govmomi/cli/flags"
    14  )
    15  
    16  type mv struct {
    17  	*flags.DatacenterFlag
    18  }
    19  
    20  func init() {
    21  	cli.Register("object.mv", &mv{})
    22  }
    23  
    24  func (cmd *mv) Register(ctx context.Context, f *flag.FlagSet) {
    25  	cmd.DatacenterFlag, ctx = flags.NewDatacenterFlag(ctx)
    26  	cmd.DatacenterFlag.Register(ctx, f)
    27  }
    28  
    29  func (cmd *mv) Usage() string {
    30  	return "PATH... FOLDER"
    31  }
    32  
    33  func (cmd *mv) Description() string {
    34  	return `Move managed entities to FOLDER.
    35  
    36  Examples:
    37    govc folder.create /dc1/host/example
    38    govc object.mv /dc2/host/*.example.com /dc1/host/example`
    39  }
    40  
    41  func (cmd *mv) Process(ctx context.Context) error {
    42  	if err := cmd.DatacenterFlag.Process(ctx); err != nil {
    43  		return err
    44  	}
    45  	return nil
    46  }
    47  
    48  func (cmd *mv) Run(ctx context.Context, f *flag.FlagSet) error {
    49  	if f.NArg() < 2 {
    50  		return flag.ErrHelp
    51  	}
    52  
    53  	finder, err := cmd.Finder()
    54  	if err != nil {
    55  		return err
    56  	}
    57  
    58  	n := f.NArg() - 1
    59  
    60  	folder, err := finder.Folder(ctx, f.Arg(n))
    61  	if err != nil {
    62  		return err
    63  	}
    64  
    65  	objs, err := cmd.ManagedObjects(ctx, f.Args()[:n])
    66  	if err != nil {
    67  		return err
    68  	}
    69  
    70  	task, err := folder.MoveInto(ctx, objs)
    71  	if err != nil {
    72  		return err
    73  	}
    74  
    75  	logger := cmd.ProgressLogger(fmt.Sprintf("moving %d objects to %s... ", len(objs), folder.InventoryPath))
    76  	_, err = task.WaitForResult(ctx, logger)
    77  	logger.Wait()
    78  
    79  	return err
    80  }