github.com/vmware/govmomi@v0.51.0/cli/dvs/create.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/vim25/types" 15 ) 16 17 type create struct { 18 *flags.FolderFlag 19 20 types.DVSCreateSpec 21 22 configSpec *types.VMwareDVSConfigSpec 23 24 dProtocol string 25 26 numUplinkPorts uint 27 } 28 29 func init() { 30 cli.Register("dvs.create", &create{}) 31 } 32 33 func (cmd *create) Register(ctx context.Context, f *flag.FlagSet) { 34 cmd.FolderFlag, ctx = flags.NewFolderFlag(ctx) 35 cmd.FolderFlag.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 f.UintVar(&cmd.numUplinkPorts, "num-uplinks", 0, "Number of Uplinks") 46 } 47 48 func (cmd *create) Usage() string { 49 return "DVS" 50 } 51 52 func (cmd *create) Description() string { 53 return `Create DVS (DistributedVirtualSwitch) in datacenter. 54 55 The dvs is added to the folder specified by the 'folder' flag. If not given, 56 this defaults to the network folder in the specified or default datacenter. 57 58 Examples: 59 govc dvs.create DSwitch 60 govc dvs.create -product-version 5.5.0 DSwitch 61 govc dvs.create -mtu 9000 DSwitch 62 govc dvs.create -discovery-protocol [lldp|cdp] DSwitch` 63 } 64 65 func (cmd *create) Process(ctx context.Context) error { 66 if err := cmd.FolderFlag.Process(ctx); err != nil { 67 return err 68 } 69 return nil 70 } 71 72 func (cmd *create) Run(ctx context.Context, f *flag.FlagSet) error { 73 if f.NArg() != 1 { 74 return flag.ErrHelp 75 } 76 77 name := f.Arg(0) 78 79 cmd.configSpec.Name = name 80 81 if cmd.dProtocol != "" { 82 cmd.configSpec.LinkDiscoveryProtocolConfig = &types.LinkDiscoveryProtocolConfig{ 83 Protocol: cmd.dProtocol, 84 Operation: "listen", 85 } 86 } 87 88 numUplinkPorts := int(cmd.numUplinkPorts) 89 90 if numUplinkPorts > 0 { 91 var policy types.DVSNameArrayUplinkPortPolicy 92 for i := 0; i < numUplinkPorts; i++ { 93 policy.UplinkPortName = append(policy.UplinkPortName, fmt.Sprintf("Uplink %d", i+1)) 94 } 95 cmd.configSpec.UplinkPortPolicy = &policy 96 } 97 98 folder, err := cmd.FolderOrDefault("network") 99 if err != nil { 100 return err 101 } 102 103 task, err := folder.CreateDVS(ctx, cmd.DVSCreateSpec) 104 if err != nil { 105 return err 106 } 107 108 logger := cmd.ProgressLogger(fmt.Sprintf("adding %s to folder %s... ", name, folder.InventoryPath)) 109 defer logger.Wait() 110 111 _, err = task.WaitForResult(ctx, logger) 112 return err 113 }