github.com/vmware/govmomi@v0.51.0/cli/host/portgroup/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 portgroup
     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.ClientFlag
    18  	*flags.HostSystemFlag
    19  
    20  	types.HostPortGroupSpec
    21  	types.HostNetworkSecurityPolicy
    22  }
    23  
    24  func init() {
    25  	cli.Register("host.portgroup.change", &change{})
    26  }
    27  
    28  func (cmd *change) Register(ctx context.Context, f *flag.FlagSet) {
    29  	cmd.ClientFlag, ctx = flags.NewClientFlag(ctx)
    30  	cmd.ClientFlag.Register(ctx, f)
    31  	cmd.HostSystemFlag, ctx = flags.NewHostSystemFlag(ctx)
    32  	cmd.HostSystemFlag.Register(ctx, f)
    33  
    34  	cmd.VlanId = -1
    35  	f.Var(flags.NewInt32(&cmd.VlanId), "vlan-id", "VLAN ID")
    36  	f.StringVar(&cmd.Name, "name", "", "Portgroup name")
    37  	f.StringVar(&cmd.VswitchName, "vswitch-name", "", "vSwitch name")
    38  
    39  	f.Var(flags.NewOptionalBool(&cmd.AllowPromiscuous), "allow-promiscuous", "Allow promiscuous mode")
    40  	f.Var(flags.NewOptionalBool(&cmd.ForgedTransmits), "forged-transmits", "Allow forged transmits")
    41  	f.Var(flags.NewOptionalBool(&cmd.MacChanges), "mac-changes", "Allow MAC changes")
    42  }
    43  
    44  func (cmd *change) Description() string {
    45  	return `Change configuration of HOST portgroup NAME.
    46  
    47  Examples:
    48    govc host.portgroup.change -allow-promiscuous -forged-transmits -mac-changes "VM Network"
    49    govc host.portgroup.change -vswitch-name vSwitch1 "Management Network"`
    50  }
    51  
    52  func (cmd *change) Usage() string {
    53  	return "NAME"
    54  }
    55  
    56  func (cmd *change) Process(ctx context.Context) error {
    57  	if err := cmd.ClientFlag.Process(ctx); err != nil {
    58  		return err
    59  	}
    60  	if err := cmd.HostSystemFlag.Process(ctx); err != nil {
    61  		return err
    62  	}
    63  	return nil
    64  }
    65  
    66  func (cmd *change) Run(ctx context.Context, f *flag.FlagSet) error {
    67  	if f.NArg() != 1 {
    68  		return flag.ErrHelp
    69  	}
    70  
    71  	pg, err := networkInfoPortgroup(ctx, cmd.ClientFlag, cmd.HostSystemFlag)
    72  	if err != nil {
    73  		return err
    74  	}
    75  
    76  	ns, err := cmd.HostNetworkSystem()
    77  	if err != nil {
    78  		return err
    79  	}
    80  
    81  	name := f.Arg(0)
    82  	var current *types.HostPortGroupSpec
    83  
    84  	for _, g := range pg {
    85  		if g.Spec.Name == name {
    86  			current = &g.Spec
    87  			break
    88  		}
    89  	}
    90  
    91  	if current != nil {
    92  		if cmd.Name == "" {
    93  			cmd.Name = current.Name
    94  		}
    95  		if cmd.VswitchName == "" {
    96  			cmd.VswitchName = current.VswitchName
    97  		}
    98  		if cmd.VlanId < 0 {
    99  			cmd.VlanId = current.VlanId
   100  		}
   101  	}
   102  
   103  	cmd.HostPortGroupSpec.Policy.Security = &cmd.HostNetworkSecurityPolicy
   104  
   105  	return ns.UpdatePortGroup(ctx, name, cmd.HostPortGroupSpec)
   106  }