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 }