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 }