github.com/vmware/govmomi@v0.43.0/govc/dvs/change.go (about) 1 /* 2 Copyright (c) 2015-2017 VMware, Inc. All Rights Reserved. 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 package dvs 18 19 import ( 20 "context" 21 "flag" 22 "fmt" 23 24 "github.com/vmware/govmomi/govc/cli" 25 "github.com/vmware/govmomi/govc/flags" 26 "github.com/vmware/govmomi/object" 27 "github.com/vmware/govmomi/vim25/mo" 28 "github.com/vmware/govmomi/vim25/types" 29 ) 30 31 type change struct { 32 *flags.DatacenterFlag 33 34 types.DVSCreateSpec 35 36 configSpec *types.VMwareDVSConfigSpec 37 38 dProtocol string 39 } 40 41 func init() { 42 cli.Register("dvs.change", &change{}) 43 } 44 45 func (cmd *change) Register(ctx context.Context, f *flag.FlagSet) { 46 cmd.DatacenterFlag, ctx = flags.NewDatacenterFlag(ctx) 47 cmd.DatacenterFlag.Register(ctx, f) 48 49 cmd.configSpec = new(types.VMwareDVSConfigSpec) 50 51 cmd.DVSCreateSpec.ConfigSpec = cmd.configSpec 52 cmd.DVSCreateSpec.ProductInfo = new(types.DistributedVirtualSwitchProductSpec) 53 54 f.StringVar(&cmd.ProductInfo.Version, "product-version", "", "DVS product version") 55 f.Var(flags.NewInt32(&cmd.configSpec.MaxMtu), "mtu", "DVS Max MTU") 56 f.StringVar(&cmd.dProtocol, "discovery-protocol", "", "Link Discovery Protocol") 57 } 58 59 func (cmd *change) Usage() string { 60 return "DVS" 61 } 62 63 func (cmd *change) Description() string { 64 return `Change DVS (DistributedVirtualSwitch) in datacenter. 65 66 Examples: 67 govc dvs.change -product-version 5.5.0 DSwitch 68 govc dvs.change -mtu 9000 DSwitch 69 govc dvs.change -discovery-protocol [lldp|cdp] DSwitch` 70 } 71 72 func (cmd *change) Process(ctx context.Context) error { 73 if err := cmd.DatacenterFlag.Process(ctx); err != nil { 74 return err 75 } 76 return nil 77 } 78 79 func (cmd *change) Run(ctx context.Context, f *flag.FlagSet) error { 80 if f.NArg() != 1 { 81 return flag.ErrHelp 82 } 83 84 name := f.Arg(0) 85 86 finder, err := cmd.Finder() 87 if err != nil { 88 return err 89 } 90 91 net, err := finder.Network(ctx, name) 92 if err != nil { 93 return err 94 } 95 96 dvs, ok := net.(*object.DistributedVirtualSwitch) 97 if !ok { 98 return fmt.Errorf("%s (%s) is not a DVS", f.Arg(0), net.Reference().Type) 99 } 100 var s mo.DistributedVirtualSwitch 101 err = dvs.Properties(ctx, dvs.Reference(), []string{"config"}, &s) 102 if err != nil { 103 return err 104 } 105 106 cmd.configSpec.ConfigVersion = s.Config.GetDVSConfigInfo().ConfigVersion 107 108 if cmd.dProtocol != "" { 109 cmd.configSpec.LinkDiscoveryProtocolConfig = &types.LinkDiscoveryProtocolConfig{ 110 Protocol: cmd.dProtocol, 111 Operation: "listen", 112 } 113 } 114 115 task, err := dvs.Reconfigure(ctx, cmd.ConfigSpec) 116 if err != nil { 117 return err 118 } 119 120 logger := cmd.ProgressLogger(fmt.Sprintf("updating DVS %s... ", name)) 121 defer logger.Wait() 122 123 _, err = task.WaitForResult(ctx, logger) 124 if err != nil { 125 return err 126 } 127 128 return nil 129 }