github.com/vmware/govmomi@v0.51.0/simulator/example_test.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 simulator_test 6 7 import ( 8 "context" 9 "fmt" 10 "log" 11 12 "github.com/vmware/govmomi" 13 "github.com/vmware/govmomi/find" 14 "github.com/vmware/govmomi/object" 15 "github.com/vmware/govmomi/session" 16 "github.com/vmware/govmomi/simulator" 17 "github.com/vmware/govmomi/vim25" 18 "github.com/vmware/govmomi/vim25/mo" 19 "github.com/vmware/govmomi/vim25/types" 20 ) 21 22 // Example boilerplate for starting a simulator initialized with an ESX model. 23 func ExampleESX() { 24 ctx := context.Background() 25 26 // ESXi model + initial set of objects (VMs, network, datastore) 27 model := simulator.ESX() 28 29 defer model.Remove() 30 err := model.Create() 31 if err != nil { 32 log.Fatal(err) 33 } 34 35 s := model.Service.NewServer() 36 defer s.Close() 37 38 c, _ := govmomi.NewClient(ctx, s.URL, true) 39 40 fmt.Printf("%s with %d host", c.Client.ServiceContent.About.ApiType, model.Count().Host) 41 // Output: HostAgent with 1 host 42 } 43 44 // Example for starting a simulator with empty inventory, similar to a fresh install of vCenter. 45 func ExampleModel() { 46 ctx := context.Background() 47 48 model := simulator.VPX() 49 model.Datacenter = 0 // No DC == no inventory 50 51 defer model.Remove() 52 err := model.Create() 53 if err != nil { 54 log.Fatal(err) 55 } 56 57 s := model.Service.NewServer() 58 defer s.Close() 59 60 c, _ := govmomi.NewClient(ctx, s.URL, true) 61 62 fmt.Printf("%s with %d hosts", c.Client.ServiceContent.About.ApiType, model.Count().Host) 63 // Output: VirtualCenter with 0 hosts 64 } 65 66 // Example boilerplate for starting a simulator initialized with a vCenter model. 67 func ExampleVPX() { 68 ctx := context.Background() 69 70 // vCenter model + initial set of objects (cluster, hosts, VMs, network, datastore, etc) 71 model := simulator.VPX() 72 73 defer model.Remove() 74 err := model.Create() 75 if err != nil { 76 log.Fatal(err) 77 } 78 79 s := model.Service.NewServer() 80 defer s.Close() 81 82 c, _ := govmomi.NewClient(ctx, s.URL, true) 83 84 fmt.Printf("%s with %d hosts", c.Client.ServiceContent.About.ApiType, model.Count().Host) 85 // Output: VirtualCenter with 4 hosts 86 } 87 88 // Run simplifies startup/cleanup of a simulator instance for example or testing purposes. 89 func ExampleModel_Run() { 90 err := simulator.VPX().Run(func(ctx context.Context, c *vim25.Client) error { 91 // Client has connected and logged in to a new simulator instance. 92 // Server.Close and Model.Remove are called when this func returns. 93 s, err := session.NewManager(c).UserSession(ctx) 94 if err != nil { 95 return err 96 } 97 fmt.Print(s.UserName) 98 return nil 99 }) 100 if err != nil { 101 log.Fatal(err) 102 } 103 // Output: user 104 } 105 106 // Test simplifies startup/cleanup of a simulator instance for testing purposes. 107 func ExampleTest() { 108 simulator.Test(func(ctx context.Context, c *vim25.Client) { 109 // Client has connected and logged in to a new simulator instance. 110 // Server.Close and Model.Remove are called when this func returns. 111 s, err := session.NewManager(c).UserSession(ctx) 112 if err != nil { 113 log.Fatal(err) 114 } 115 fmt.Print(s.UserName) 116 }) 117 // Output: user 118 } 119 120 // Folder.AddOpaqueNetwork can be used to create an NSX backed OpaqueNetwork. 121 func ExampleFolder_AddOpaqueNetwork() { 122 simulator.Run(func(ctx context.Context, c *vim25.Client) error { 123 sctx := ctx.(*simulator.Context) 124 finder := find.NewFinder(c) 125 126 // Find the network folder via vSphere API 127 obj, err := finder.Folder(ctx, "network") 128 if err != nil { 129 return err 130 } 131 132 // Get vcsim's network Folder object 133 folder := sctx.Map.Get(obj.Reference()).(*simulator.Folder) 134 135 spec := types.OpaqueNetworkSummary{ 136 NetworkSummary: types.NetworkSummary{ 137 Name: "my-nsx-network", 138 }, 139 OpaqueNetworkId: "my-nsx-id", 140 OpaqueNetworkType: "nsx.LogicalSwitch", 141 } 142 143 // Add NSX backed OpaqueNetwork, calling the simulator.Folder method directly. 144 err = folder.AddOpaqueNetwork(sctx, spec) 145 if err != nil { 146 return err 147 } 148 149 // Find the OpaqueNetwork via vSphere API 150 net, err := finder.Network(ctx, spec.Name) 151 if err != nil { 152 return err 153 } 154 155 nsx := net.(*object.OpaqueNetwork) 156 summary, err := nsx.Summary(ctx) 157 if err != nil { 158 return err 159 } 160 161 // The summary fields should match those of the spec used to create it 162 fmt.Printf("%s: %s", nsx.Name(), summary.OpaqueNetworkId) 163 return nil 164 }) 165 // Output: my-nsx-network: my-nsx-id 166 } 167 168 // AddDVPortgroup against vcsim can create both standard and nsx backed DistributedVirtualPortgroup networks 169 func ExampleDistributedVirtualSwitch_AddDVPortgroupTask() { 170 simulator.Run(func(ctx context.Context, c *vim25.Client) error { 171 finder := find.NewFinder(c) 172 173 dvs0, err := finder.Network(ctx, "DVS0") 174 if err != nil { 175 return err 176 } 177 178 spec := types.DVPortgroupConfigSpec{ 179 Name: "my-nsx-dvpg", 180 LogicalSwitchUuid: "my-nsx-id", 181 } 182 183 dvs := dvs0.(*object.DistributedVirtualSwitch) 184 task, err := dvs.AddPortgroup(ctx, []types.DVPortgroupConfigSpec{spec}) 185 if err != nil { 186 return err 187 } 188 if err = task.Wait(ctx); err != nil { 189 return err 190 } 191 192 pg0, err := finder.Network(ctx, spec.Name) 193 if err != nil { 194 return err 195 } 196 197 pg := pg0.(*object.DistributedVirtualPortgroup) 198 199 var props mo.DistributedVirtualPortgroup 200 err = pg.Properties(ctx, pg.Reference(), []string{"config"}, &props) 201 if err != nil { 202 return err 203 } 204 205 fmt.Printf("%s: %s %s", pg.Name(), props.Config.BackingType, props.Config.LogicalSwitchUuid) 206 207 return nil 208 }) 209 // Output: my-nsx-dvpg: nsx my-nsx-id 210 }