github.com/vmware/govmomi@v0.51.0/cli/dvs/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 dvs 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 "github.com/vmware/govmomi/vim25/types" 17 ) 18 19 type change struct { 20 *flags.DatacenterFlag 21 22 types.DVSCreateSpec 23 24 configSpec *types.VMwareDVSConfigSpec 25 26 dProtocol string 27 } 28 29 func init() { 30 cli.Register("dvs.change", &change{}) 31 } 32 33 func (cmd *change) Register(ctx context.Context, f *flag.FlagSet) { 34 cmd.DatacenterFlag, ctx = flags.NewDatacenterFlag(ctx) 35 cmd.DatacenterFlag.Register(ctx, f) 36 37 cmd.configSpec = new(types.VMwareDVSConfigSpec) 38 39 cmd.DVSCreateSpec.ConfigSpec = cmd.configSpec 40 cmd.DVSCreateSpec.ProductInfo = new(types.DistributedVirtualSwitchProductSpec) 41 42 f.StringVar(&cmd.ProductInfo.Version, "product-version", "", "DVS product version") 43 f.Var(flags.NewInt32(&cmd.configSpec.MaxMtu), "mtu", "DVS Max MTU") 44 f.StringVar(&cmd.dProtocol, "discovery-protocol", "", "Link Discovery Protocol") 45 } 46 47 func (cmd *change) Usage() string { 48 return "DVS" 49 } 50 51 func (cmd *change) Description() string { 52 return `Change DVS (DistributedVirtualSwitch) in datacenter. 53 54 Examples: 55 govc dvs.change -product-version 5.5.0 DSwitch 56 govc dvs.change -mtu 9000 DSwitch 57 govc dvs.change -discovery-protocol [lldp|cdp] DSwitch` 58 } 59 60 func (cmd *change) Process(ctx context.Context) error { 61 if err := cmd.DatacenterFlag.Process(ctx); err != nil { 62 return err 63 } 64 return nil 65 } 66 67 func (cmd *change) Run(ctx context.Context, f *flag.FlagSet) error { 68 if f.NArg() != 1 { 69 return flag.ErrHelp 70 } 71 72 name := f.Arg(0) 73 74 finder, err := cmd.Finder() 75 if err != nil { 76 return err 77 } 78 79 net, err := finder.Network(ctx, name) 80 if err != nil { 81 return err 82 } 83 84 dvs, ok := net.(*object.DistributedVirtualSwitch) 85 if !ok { 86 return fmt.Errorf("%s (%s) is not a DVS", f.Arg(0), net.Reference().Type) 87 } 88 var s mo.DistributedVirtualSwitch 89 err = dvs.Properties(ctx, dvs.Reference(), []string{"config"}, &s) 90 if err != nil { 91 return err 92 } 93 94 cmd.configSpec.ConfigVersion = s.Config.GetDVSConfigInfo().ConfigVersion 95 96 if cmd.dProtocol != "" { 97 cmd.configSpec.LinkDiscoveryProtocolConfig = &types.LinkDiscoveryProtocolConfig{ 98 Protocol: cmd.dProtocol, 99 Operation: "listen", 100 } 101 } 102 103 task, err := dvs.Reconfigure(ctx, cmd.ConfigSpec) 104 if err != nil { 105 return err 106 } 107 108 logger := cmd.ProgressLogger(fmt.Sprintf("updating DVS %s... ", name)) 109 defer logger.Wait() 110 111 _, err = task.WaitForResult(ctx, logger) 112 if err != nil { 113 return err 114 } 115 116 return nil 117 }