github.com/vmware/govmomi@v0.51.0/cli/folder/create.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 folder
     6  
     7  import (
     8  	"context"
     9  	"flag"
    10  	"path"
    11  
    12  	"github.com/vmware/govmomi/cli"
    13  	"github.com/vmware/govmomi/cli/flags"
    14  )
    15  
    16  type create struct {
    17  	*flags.DatacenterFlag
    18  
    19  	pod bool
    20  }
    21  
    22  func init() {
    23  	cli.Register("folder.create", &create{})
    24  }
    25  
    26  func (cmd *create) Register(ctx context.Context, f *flag.FlagSet) {
    27  	cmd.DatacenterFlag, ctx = flags.NewDatacenterFlag(ctx)
    28  	cmd.DatacenterFlag.Register(ctx, f)
    29  
    30  	f.BoolVar(&cmd.pod, "pod", false, "Create folder(s) of type StoragePod (DatastoreCluster)")
    31  }
    32  
    33  func (cmd *create) Usage() string {
    34  	return "PATH..."
    35  }
    36  
    37  func (cmd *create) Description() string {
    38  	return `Create folder with PATH.
    39  
    40  Examples:
    41    govc folder.create /dc1/vm/folder-foo
    42    govc object.mv /dc1/vm/vm-foo-* /dc1/vm/folder-foo
    43    govc folder.create -pod /dc1/datastore/sdrs
    44    govc object.mv /dc1/datastore/iscsi-* /dc1/datastore/sdrs`
    45  }
    46  
    47  func (cmd *create) Process(ctx context.Context) error {
    48  	if err := cmd.DatacenterFlag.Process(ctx); err != nil {
    49  		return err
    50  	}
    51  	return nil
    52  }
    53  
    54  func (cmd *create) Run(ctx context.Context, f *flag.FlagSet) error {
    55  	finder, err := cmd.Finder()
    56  	if err != nil {
    57  		return err
    58  	}
    59  
    60  	for _, arg := range f.Args() {
    61  		dir := path.Dir(arg)
    62  		name := path.Base(arg)
    63  
    64  		if dir == "" {
    65  			dir = "/"
    66  		}
    67  
    68  		folder, err := finder.Folder(ctx, dir)
    69  		if err != nil {
    70  			return err
    71  		}
    72  
    73  		var create func() error
    74  		if cmd.pod {
    75  			create = func() error {
    76  				_, err = folder.CreateStoragePod(ctx, name)
    77  				return err
    78  			}
    79  		} else {
    80  			create = func() error {
    81  				_, err = folder.CreateFolder(ctx, name)
    82  				return err
    83  			}
    84  		}
    85  
    86  		err = create()
    87  		if err != nil {
    88  			return err
    89  		}
    90  	}
    91  
    92  	return nil
    93  }