github.com/vmware/govmomi@v0.51.0/cli/datastore/mkdir.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  	"fmt"
    12  
    13  	"github.com/vmware/govmomi/cli"
    14  	"github.com/vmware/govmomi/cli/flags"
    15  	"github.com/vmware/govmomi/fault"
    16  	"github.com/vmware/govmomi/object"
    17  	"github.com/vmware/govmomi/vim25/types"
    18  )
    19  
    20  type mkdir struct {
    21  	*flags.DatastoreFlag
    22  
    23  	createParents bool
    24  	isNamespace   bool
    25  }
    26  
    27  func init() {
    28  	cli.Register("datastore.mkdir", &mkdir{})
    29  }
    30  
    31  func (cmd *mkdir) Register(ctx context.Context, f *flag.FlagSet) {
    32  	cmd.DatastoreFlag, ctx = flags.NewDatastoreFlag(ctx)
    33  	cmd.DatastoreFlag.Register(ctx, f)
    34  
    35  	f.BoolVar(&cmd.createParents, "p", false, "Create intermediate directories as needed")
    36  	f.BoolVar(&cmd.isNamespace, "namespace", false, "Return uuid of namespace created on vsan datastore")
    37  }
    38  
    39  func (cmd *mkdir) Process(ctx context.Context) error {
    40  	if err := cmd.DatastoreFlag.Process(ctx); err != nil {
    41  		return err
    42  	}
    43  	return nil
    44  }
    45  
    46  func (cmd *mkdir) Usage() string {
    47  	return "DIRECTORY"
    48  }
    49  
    50  func (cmd *mkdir) Run(ctx context.Context, f *flag.FlagSet) error {
    51  	args := f.Args()
    52  	if len(args) == 0 {
    53  		return errors.New("missing operand")
    54  	}
    55  
    56  	c, err := cmd.Client()
    57  	if err != nil {
    58  		return err
    59  	}
    60  
    61  	if cmd.isNamespace {
    62  		var uuid string
    63  		var ds *object.Datastore
    64  
    65  		if ds, err = cmd.Datastore(); err != nil {
    66  			return err
    67  		}
    68  
    69  		path := args[0]
    70  
    71  		nm := object.NewDatastoreNamespaceManager(c)
    72  		if uuid, err = nm.CreateDirectory(ctx, ds, path, ""); err != nil {
    73  			return err
    74  		}
    75  
    76  		fmt.Println(uuid)
    77  	} else {
    78  		var dc *object.Datacenter
    79  		var path string
    80  
    81  		dc, err = cmd.Datacenter()
    82  		if err != nil {
    83  			return err
    84  		}
    85  
    86  		path, err = cmd.DatastorePath(args[0])
    87  		if err != nil {
    88  			return err
    89  		}
    90  
    91  		m := object.NewFileManager(c)
    92  		err = m.MakeDirectory(ctx, path, dc, cmd.createParents)
    93  
    94  		// ignore EEXIST if -p flag is given
    95  		if err != nil && cmd.createParents {
    96  			if fault.Is(err, &types.FileAlreadyExists{}) {
    97  				return nil
    98  			}
    99  		}
   100  	}
   101  
   102  	return err
   103  }