github.com/vmware/govmomi@v0.51.0/cli/pool/change.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 pool 6 7 import ( 8 "context" 9 "flag" 10 11 "github.com/vmware/govmomi/cli" 12 "github.com/vmware/govmomi/cli/flags" 13 "github.com/vmware/govmomi/vim25/types" 14 ) 15 16 type change struct { 17 *flags.DatacenterFlag 18 *ResourceConfigSpecFlag 19 20 name string 21 } 22 23 func init() { 24 cli.Register("pool.change", &change{}) 25 } 26 27 func (cmd *change) Register(ctx context.Context, f *flag.FlagSet) { 28 cmd.DatacenterFlag, ctx = flags.NewDatacenterFlag(ctx) 29 cmd.DatacenterFlag.Register(ctx, f) 30 cmd.ResourceConfigSpecFlag = &ResourceConfigSpecFlag{ 31 ResourceConfigSpec: types.ResourceConfigSpec{ 32 CpuAllocation: types.ResourceAllocationInfo{ 33 Shares: new(types.SharesInfo), 34 }, 35 MemoryAllocation: types.ResourceAllocationInfo{ 36 Shares: new(types.SharesInfo), 37 }, 38 }, 39 } 40 cmd.ResourceConfigSpecFlag.Register(ctx, f) 41 42 f.StringVar(&cmd.name, "name", "", "Resource pool name") 43 } 44 45 func (cmd *change) Process(ctx context.Context) error { 46 if err := cmd.DatacenterFlag.Process(ctx); err != nil { 47 return err 48 } 49 if err := cmd.ResourceConfigSpecFlag.Process(ctx); err != nil { 50 return err 51 } 52 return nil 53 } 54 55 func (cmd *change) Usage() string { 56 return "POOL..." 57 } 58 59 func (cmd *change) Description() string { 60 return "Change the configuration of one or more resource POOLs.\n" + poolNameHelp 61 } 62 63 func (cmd *change) Run(ctx context.Context, f *flag.FlagSet) error { 64 if f.NArg() == 0 { 65 return flag.ErrHelp 66 } 67 68 finder, err := cmd.Finder() 69 if err != nil { 70 return err 71 } 72 73 for _, ra := range []*types.ResourceAllocationInfo{&cmd.CpuAllocation, &cmd.MemoryAllocation} { 74 if ra.Shares.Level == "" { 75 ra.Shares = nil 76 } 77 } 78 79 for _, arg := range f.Args() { 80 pools, err := finder.ResourcePoolListAll(ctx, arg) 81 if err != nil { 82 return err 83 } 84 85 for _, pool := range pools { 86 err := pool.UpdateConfig(ctx, cmd.name, &cmd.ResourceConfigSpec) 87 if err != nil { 88 return err 89 } 90 } 91 } 92 93 return nil 94 }