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  }