github.com/vmware/govmomi@v0.51.0/cli/dvs/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 "fmt" 11 12 "github.com/vmware/govmomi/cli" 13 "github.com/vmware/govmomi/cli/flags" 14 "github.com/vmware/govmomi/object" 15 "github.com/vmware/govmomi/vim25/mo" 16 ) 17 18 type change struct { 19 *flags.DatacenterFlag 20 21 DVPortgroupConfigSpec 22 } 23 24 func init() { 25 cli.Register("dvs.portgroup.change", &change{}) 26 } 27 28 func (cmd *change) Register(ctx context.Context, f *flag.FlagSet) { 29 cmd.DatacenterFlag, ctx = flags.NewDatacenterFlag(ctx) 30 cmd.DatacenterFlag.Register(ctx, f) 31 32 cmd.DVPortgroupConfigSpec.Register(ctx, f) 33 } 34 35 func (cmd *change) Description() string { 36 return `Change DVS portgroup configuration. 37 38 Examples: 39 govc dvs.portgroup.change -nports 26 ExternalNetwork 40 govc dvs.portgroup.change -vlan 3214 ExternalNetwork` 41 } 42 43 func (cmd *change) Process(ctx context.Context) error { 44 if err := cmd.DatacenterFlag.Process(ctx); err != nil { 45 return err 46 } 47 return nil 48 } 49 50 func (cmd *change) Usage() string { 51 return "PATH" 52 } 53 54 func (cmd *change) Run(ctx context.Context, f *flag.FlagSet) error { 55 if f.NArg() != 1 { 56 return flag.ErrHelp 57 } 58 59 path := f.Arg(0) 60 61 finder, err := cmd.Finder() 62 if err != nil { 63 return err 64 } 65 66 net, err := finder.Network(ctx, path) 67 if err != nil { 68 return err 69 } 70 71 pg, ok := net.(*object.DistributedVirtualPortgroup) 72 if !ok { 73 return fmt.Errorf("%s (%T) is not of type %T", path, net, pg) 74 } 75 76 var s mo.DistributedVirtualPortgroup 77 err = pg.Properties(ctx, pg.Reference(), []string{"config.configVersion"}, &s) 78 if err != nil { 79 return err 80 } 81 82 spec := cmd.Spec() 83 spec.ConfigVersion = s.Config.ConfigVersion 84 85 task, err := pg.Reconfigure(ctx, spec) 86 if err != nil { 87 return err 88 } 89 90 logger := cmd.ProgressLogger(fmt.Sprintf("changing %s portgroup configuration %s... ", pg.Name(), pg.InventoryPath)) 91 defer logger.Wait() 92 93 _, err = task.WaitForResult(ctx, logger) 94 return err 95 }