github.com/vmware/govmomi@v0.51.0/cli/cluster/group/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 group
     6  
     7  import (
     8  	"context"
     9  	"flag"
    10  
    11  	"github.com/vmware/govmomi/cli"
    12  	"github.com/vmware/govmomi/vim25/types"
    13  )
    14  
    15  type create struct {
    16  	*InfoFlag
    17  
    18  	vm   bool
    19  	host bool
    20  }
    21  
    22  func init() {
    23  	cli.Register("cluster.group.create", &create{})
    24  }
    25  
    26  func (cmd *create) Register(ctx context.Context, f *flag.FlagSet) {
    27  	cmd.InfoFlag, ctx = NewInfoFlag(ctx)
    28  	cmd.InfoFlag.Register(ctx, f)
    29  
    30  	f.BoolVar(&cmd.vm, "vm", false, "Create cluster VM group")
    31  	f.BoolVar(&cmd.host, "host", false, "Create cluster Host group")
    32  }
    33  
    34  func (cmd *create) Process(ctx context.Context) error {
    35  	if cmd.name == "" {
    36  		return flag.ErrHelp
    37  	}
    38  	return cmd.InfoFlag.Process(ctx)
    39  }
    40  
    41  func (cmd *create) Description() string {
    42  	return `Create cluster group.
    43  
    44  One of '-vm' or '-host' must be provided to specify the group type.
    45  
    46  Examples:
    47    govc cluster.group.create -name my_vm_group -vm vm_a vm_b vm_c
    48    govc cluster.group.create -name my_host_group -host host_a host_b host_c`
    49  }
    50  
    51  func (cmd *create) Run(ctx context.Context, f *flag.FlagSet) error {
    52  	update := types.ArrayUpdateSpec{Operation: types.ArrayUpdateOperationAdd}
    53  	var info types.BaseClusterGroupInfo
    54  	var err error
    55  
    56  	switch {
    57  	case cmd.vm:
    58  		info = new(types.ClusterVmGroup)
    59  	case cmd.host:
    60  		info = new(types.ClusterHostGroup)
    61  	default:
    62  		return flag.ErrHelp
    63  	}
    64  
    65  	info.GetClusterGroupInfo().Name = cmd.name
    66  
    67  	group := newGroupInfo(info)
    68  	*group.refs, err = cmd.ObjectList(ctx, group.kind, f.Args())
    69  	if err != nil {
    70  		return err
    71  	}
    72  
    73  	return cmd.Apply(ctx, update, info)
    74  }