github.com/vnpaycloud-console/gophercloud/v2@v2.0.5/internal/acceptance/openstack/loadbalancer/v2/loadbalancers_test.go (about) 1 //go:build acceptance || networking || loadbalancer || loadbalancers 2 3 package v2 4 5 import ( 6 "context" 7 "testing" 8 9 "github.com/vnpaycloud-console/gophercloud/v2/internal/acceptance/clients" 10 networking "github.com/vnpaycloud-console/gophercloud/v2/internal/acceptance/openstack/networking/v2" 11 "github.com/vnpaycloud-console/gophercloud/v2/internal/acceptance/openstack/networking/v2/extensions/qos/policies" 12 "github.com/vnpaycloud-console/gophercloud/v2/internal/acceptance/tools" 13 "github.com/vnpaycloud-console/gophercloud/v2/openstack/loadbalancer/v2/l7policies" 14 "github.com/vnpaycloud-console/gophercloud/v2/openstack/loadbalancer/v2/listeners" 15 "github.com/vnpaycloud-console/gophercloud/v2/openstack/loadbalancer/v2/loadbalancers" 16 "github.com/vnpaycloud-console/gophercloud/v2/openstack/loadbalancer/v2/monitors" 17 "github.com/vnpaycloud-console/gophercloud/v2/openstack/loadbalancer/v2/pools" 18 th "github.com/vnpaycloud-console/gophercloud/v2/testhelper" 19 ) 20 21 func TestLoadbalancersList(t *testing.T) { 22 client, err := clients.NewLoadBalancerV2Client() 23 th.AssertNoErr(t, err) 24 25 allPages, err := loadbalancers.List(client, nil).AllPages(context.TODO()) 26 th.AssertNoErr(t, err) 27 28 allLoadbalancers, err := loadbalancers.ExtractLoadBalancers(allPages) 29 th.AssertNoErr(t, err) 30 31 for _, lb := range allLoadbalancers { 32 tools.PrintResource(t, lb) 33 } 34 } 35 36 func TestLoadbalancersListByTags(t *testing.T) { 37 netClient, err := clients.NewNetworkV2Client() 38 th.AssertNoErr(t, err) 39 40 lbClient, err := clients.NewLoadBalancerV2Client() 41 th.AssertNoErr(t, err) 42 43 network, err := networking.CreateNetwork(t, netClient) 44 th.AssertNoErr(t, err) 45 defer networking.DeleteNetwork(t, netClient, network.ID) 46 47 subnet, err := networking.CreateSubnet(t, netClient, network.ID) 48 th.AssertNoErr(t, err) 49 defer networking.DeleteSubnet(t, netClient, subnet.ID) 50 51 // Add "test" tag intentionally to test the "not-tags" parameter. Because "test" tag is also used in other test 52 // cases, we use "test" tag to exclude load balancers created by other test case. 53 tags := []string{"tag1", "tag2", "test"} 54 lb, err := CreateLoadBalancer(t, lbClient, subnet.ID, tags, "", nil) 55 th.AssertNoErr(t, err) 56 defer DeleteLoadBalancer(t, lbClient, lb.ID) 57 58 tags = []string{"tag1"} 59 listOpts := loadbalancers.ListOpts{ 60 Tags: tags, 61 } 62 allPages, err := loadbalancers.List(lbClient, listOpts).AllPages(context.TODO()) 63 th.AssertNoErr(t, err) 64 allLoadbalancers, err := loadbalancers.ExtractLoadBalancers(allPages) 65 th.AssertNoErr(t, err) 66 th.AssertEquals(t, 1, len(allLoadbalancers)) 67 68 tags = []string{"test"} 69 listOpts = loadbalancers.ListOpts{ 70 TagsNot: tags, 71 } 72 allPages, err = loadbalancers.List(lbClient, listOpts).AllPages(context.TODO()) 73 th.AssertNoErr(t, err) 74 allLoadbalancers, err = loadbalancers.ExtractLoadBalancers(allPages) 75 th.AssertNoErr(t, err) 76 th.AssertEquals(t, 0, len(allLoadbalancers)) 77 78 tags = []string{"tag1", "tag3"} 79 listOpts = loadbalancers.ListOpts{ 80 TagsAny: tags, 81 } 82 allPages, err = loadbalancers.List(lbClient, listOpts).AllPages(context.TODO()) 83 th.AssertNoErr(t, err) 84 allLoadbalancers, err = loadbalancers.ExtractLoadBalancers(allPages) 85 th.AssertNoErr(t, err) 86 th.AssertEquals(t, 1, len(allLoadbalancers)) 87 88 tags = []string{"tag1", "test"} 89 listOpts = loadbalancers.ListOpts{ 90 TagsNotAny: tags, 91 } 92 allPages, err = loadbalancers.List(lbClient, listOpts).AllPages(context.TODO()) 93 th.AssertNoErr(t, err) 94 allLoadbalancers, err = loadbalancers.ExtractLoadBalancers(allPages) 95 th.AssertNoErr(t, err) 96 th.AssertEquals(t, 0, len(allLoadbalancers)) 97 } 98 99 func TestLoadbalancerHTTPCRUD(t *testing.T) { 100 netClient, err := clients.NewNetworkV2Client() 101 th.AssertNoErr(t, err) 102 103 lbClient, err := clients.NewLoadBalancerV2Client() 104 th.AssertNoErr(t, err) 105 106 network, err := networking.CreateNetwork(t, netClient) 107 th.AssertNoErr(t, err) 108 defer networking.DeleteNetwork(t, netClient, network.ID) 109 110 subnet, err := networking.CreateSubnet(t, netClient, network.ID) 111 th.AssertNoErr(t, err) 112 defer networking.DeleteSubnet(t, netClient, subnet.ID) 113 114 lb, err := CreateLoadBalancer(t, lbClient, subnet.ID, nil, "", nil) 115 th.AssertNoErr(t, err) 116 defer DeleteLoadBalancer(t, lbClient, lb.ID) 117 118 // Listener 119 listener, err := CreateListenerHTTP(t, lbClient, lb) 120 th.AssertNoErr(t, err) 121 defer DeleteListener(t, lbClient, lb.ID, listener.ID) 122 123 // L7 policy 124 tags := []string{"test"} 125 policy, err := CreateL7Policy(t, lbClient, listener, lb, tags) 126 th.AssertNoErr(t, err) 127 defer DeleteL7Policy(t, lbClient, lb.ID, policy.ID) 128 129 tags = []string{"test", "test1"} 130 newDescription := "" 131 updateL7policyOpts := l7policies.UpdateOpts{ 132 Description: &newDescription, 133 Tags: &tags, 134 } 135 _, err = l7policies.Update(context.TODO(), lbClient, policy.ID, updateL7policyOpts).Extract() 136 th.AssertNoErr(t, err) 137 138 if err = WaitForLoadBalancerState(lbClient, lb.ID, "ACTIVE"); err != nil { 139 t.Fatalf("Timed out waiting for loadbalancer to become active") 140 } 141 142 newPolicy, err := l7policies.Get(context.TODO(), lbClient, policy.ID).Extract() 143 th.AssertNoErr(t, err) 144 145 tools.PrintResource(t, newPolicy) 146 147 th.AssertEquals(t, newPolicy.Description, newDescription) 148 th.AssertDeepEquals(t, newPolicy.Tags, tags) 149 150 // L7 rule 151 tags = []string{"test"} 152 rule, err := CreateL7Rule(t, lbClient, newPolicy.ID, lb, tags) 153 th.AssertNoErr(t, err) 154 defer DeleteL7Rule(t, lbClient, lb.ID, policy.ID, rule.ID) 155 156 allPages, err := l7policies.ListRules(lbClient, policy.ID, l7policies.ListRulesOpts{}).AllPages(context.TODO()) 157 th.AssertNoErr(t, err) 158 allRules, err := l7policies.ExtractRules(allPages) 159 th.AssertNoErr(t, err) 160 for _, rule := range allRules { 161 tools.PrintResource(t, rule) 162 } 163 164 tags = []string{"test", "test1"} 165 updateL7ruleOpts := l7policies.UpdateRuleOpts{ 166 RuleType: l7policies.TypePath, 167 CompareType: l7policies.CompareTypeRegex, 168 Value: "/images/special*", 169 Tags: &tags, 170 } 171 _, err = l7policies.UpdateRule(context.TODO(), lbClient, policy.ID, rule.ID, updateL7ruleOpts).Extract() 172 th.AssertNoErr(t, err) 173 174 if err = WaitForLoadBalancerState(lbClient, lb.ID, "ACTIVE"); err != nil { 175 t.Fatalf("Timed out waiting for loadbalancer to become active") 176 } 177 178 newRule, err := l7policies.GetRule(context.TODO(), lbClient, newPolicy.ID, rule.ID).Extract() 179 th.AssertNoErr(t, err) 180 181 tools.PrintResource(t, newRule) 182 183 th.AssertDeepEquals(t, newRule.Tags, tags) 184 185 // Pool 186 pool, err := CreatePoolHTTP(t, lbClient, lb) 187 th.AssertNoErr(t, err) 188 defer DeletePool(t, lbClient, lb.ID, pool.ID) 189 190 poolName := "" 191 poolDescription := "" 192 updatePoolOpts := pools.UpdateOpts{ 193 Name: &poolName, 194 Description: &poolDescription, 195 } 196 _, err = pools.Update(context.TODO(), lbClient, pool.ID, updatePoolOpts).Extract() 197 th.AssertNoErr(t, err) 198 199 if err = WaitForLoadBalancerState(lbClient, lb.ID, "ACTIVE"); err != nil { 200 t.Fatalf("Timed out waiting for loadbalancer to become active") 201 } 202 203 newPool, err := pools.Get(context.TODO(), lbClient, pool.ID).Extract() 204 th.AssertNoErr(t, err) 205 206 tools.PrintResource(t, newPool) 207 th.AssertEquals(t, newPool.Name, poolName) 208 th.AssertEquals(t, newPool.Description, poolDescription) 209 210 // Update L7policy to redirect to pool 211 newRedirectURL := "" 212 updateL7policyOpts = l7policies.UpdateOpts{ 213 Action: l7policies.ActionRedirectToPool, 214 RedirectPoolID: &newPool.ID, 215 RedirectURL: &newRedirectURL, 216 } 217 _, err = l7policies.Update(context.TODO(), lbClient, policy.ID, updateL7policyOpts).Extract() 218 th.AssertNoErr(t, err) 219 220 if err := WaitForLoadBalancerState(lbClient, lb.ID, "ACTIVE"); err != nil { 221 t.Fatalf("Timed out waiting for loadbalancer to become active") 222 } 223 224 newPolicy, err = l7policies.Get(context.TODO(), lbClient, policy.ID).Extract() 225 th.AssertNoErr(t, err) 226 227 tools.PrintResource(t, newPolicy) 228 229 th.AssertEquals(t, newPolicy.Description, newDescription) 230 th.AssertEquals(t, newPolicy.Action, string(l7policies.ActionRedirectToPool)) 231 th.AssertEquals(t, newPolicy.RedirectPoolID, newPool.ID) 232 th.AssertEquals(t, newPolicy.RedirectURL, newRedirectURL) 233 234 // Workaround for proper delete order 235 defer DeleteL7Policy(t, lbClient, lb.ID, policy.ID) 236 defer DeleteL7Rule(t, lbClient, lb.ID, policy.ID, rule.ID) 237 238 // Member 239 member, err := CreateMember(t, lbClient, lb, pool, subnet.ID, subnet.CIDR) 240 th.AssertNoErr(t, err) 241 defer DeleteMember(t, lbClient, lb.ID, pool.ID, member.ID) 242 243 monitor, err := CreateMonitor(t, lbClient, lb, pool) 244 th.AssertNoErr(t, err) 245 defer DeleteMonitor(t, lbClient, lb.ID, monitor.ID) 246 } 247 248 func TestLoadBalancerWithAdditionalVips(t *testing.T) { 249 clients.SkipReleasesBelow(t, "stable/zed") 250 251 netClient, err := clients.NewNetworkV2Client() 252 th.AssertNoErr(t, err) 253 254 lbClient, err := clients.NewLoadBalancerV2Client() 255 th.AssertNoErr(t, err) 256 257 network, err := networking.CreateNetwork(t, netClient) 258 th.AssertNoErr(t, err) 259 defer networking.DeleteNetwork(t, netClient, network.ID) 260 261 subnet, err := networking.CreateSubnetWithCIDR(t, netClient, network.ID, "192.168.1.0/24", "192.168.1.1") 262 th.AssertNoErr(t, err) 263 defer networking.DeleteSubnet(t, netClient, subnet.ID) 264 265 additionalSubnet, err := networking.CreateSubnetWithCIDR(t, netClient, network.ID, "192.168.2.0/24", "192.168.2.1") 266 th.AssertNoErr(t, err) 267 defer networking.DeleteSubnet(t, netClient, additionalSubnet.ID) 268 269 tags := []string{"test"} 270 // Octavia takes care of creating the port for the loadbalancer 271 additionalSubnetIP := "192.168.2.207" 272 lb, err := CreateLoadBalancer(t, lbClient, subnet.ID, tags, "", []loadbalancers.AdditionalVip{{SubnetID: additionalSubnet.ID, IPAddress: additionalSubnetIP}}) 273 th.AssertNoErr(t, err) 274 th.AssertEquals(t, 1, len(lb.AdditionalVips)) 275 th.AssertEquals(t, additionalSubnetIP, lb.AdditionalVips[0].IPAddress) 276 defer DeleteLoadBalancer(t, lbClient, lb.ID) 277 } 278 279 func TestLoadbalancersCRUD(t *testing.T) { 280 netClient, err := clients.NewNetworkV2Client() 281 th.AssertNoErr(t, err) 282 283 // Create QoS policy first as the loadbalancer and its port 284 // needs to be deleted before the QoS policy can be deleted 285 policy2, err := policies.CreateQoSPolicy(t, netClient) 286 th.AssertNoErr(t, err) 287 defer policies.DeleteQoSPolicy(t, netClient, policy2.ID) 288 289 lbClient, err := clients.NewLoadBalancerV2Client() 290 th.AssertNoErr(t, err) 291 292 network, err := networking.CreateNetwork(t, netClient) 293 th.AssertNoErr(t, err) 294 defer networking.DeleteNetwork(t, netClient, network.ID) 295 296 subnet, err := networking.CreateSubnetWithCIDR(t, netClient, network.ID, "192.168.1.0/24", "192.168.1.1") 297 th.AssertNoErr(t, err) 298 defer networking.DeleteSubnet(t, netClient, subnet.ID) 299 300 policy1, err := policies.CreateQoSPolicy(t, netClient) 301 th.AssertNoErr(t, err) 302 defer policies.DeleteQoSPolicy(t, netClient, policy1.ID) 303 304 tags := []string{"test"} 305 lb, err := CreateLoadBalancer(t, lbClient, subnet.ID, tags, policy1.ID, nil) 306 th.AssertNoErr(t, err) 307 th.AssertEquals(t, lb.VipQosPolicyID, policy1.ID) 308 defer DeleteLoadBalancer(t, lbClient, lb.ID) 309 310 lbDescription := "" 311 updateLoadBalancerOpts := loadbalancers.UpdateOpts{ 312 Description: &lbDescription, 313 VipQosPolicyID: &policy2.ID, 314 } 315 _, err = loadbalancers.Update(context.TODO(), lbClient, lb.ID, updateLoadBalancerOpts).Extract() 316 th.AssertNoErr(t, err) 317 318 if err = WaitForLoadBalancerState(lbClient, lb.ID, "ACTIVE"); err != nil { 319 t.Fatalf("Timed out waiting for loadbalancer to become active") 320 } 321 322 newLB, err := loadbalancers.Get(context.TODO(), lbClient, lb.ID).Extract() 323 th.AssertNoErr(t, err) 324 325 tools.PrintResource(t, newLB) 326 327 th.AssertEquals(t, newLB.Description, lbDescription) 328 th.AssertEquals(t, newLB.VipQosPolicyID, policy2.ID) 329 330 lbStats, err := loadbalancers.GetStats(context.TODO(), lbClient, lb.ID).Extract() 331 th.AssertNoErr(t, err) 332 333 tools.PrintResource(t, lbStats) 334 335 // Because of the time it takes to create a loadbalancer, 336 // this test will include some other resources. 337 338 // Listener 339 listener, err := CreateListener(t, lbClient, lb) 340 th.AssertNoErr(t, err) 341 defer DeleteListener(t, lbClient, lb.ID, listener.ID) 342 343 listenerName := "" 344 listenerDescription := "" 345 updateListenerOpts := listeners.UpdateOpts{ 346 Name: &listenerName, 347 Description: &listenerDescription, 348 } 349 _, err = listeners.Update(context.TODO(), lbClient, listener.ID, updateListenerOpts).Extract() 350 th.AssertNoErr(t, err) 351 352 if err = WaitForLoadBalancerState(lbClient, lb.ID, "ACTIVE"); err != nil { 353 t.Fatalf("Timed out waiting for loadbalancer to become active") 354 } 355 356 newListener, err := listeners.Get(context.TODO(), lbClient, listener.ID).Extract() 357 th.AssertNoErr(t, err) 358 359 tools.PrintResource(t, newListener) 360 361 th.AssertEquals(t, newListener.Name, listenerName) 362 th.AssertEquals(t, newListener.Description, listenerDescription) 363 364 listenerStats, err := listeners.GetStats(context.TODO(), lbClient, listener.ID).Extract() 365 th.AssertNoErr(t, err) 366 367 tools.PrintResource(t, listenerStats) 368 369 // Pool 370 pool, err := CreatePool(t, lbClient, lb) 371 th.AssertNoErr(t, err) 372 defer DeletePool(t, lbClient, lb.ID, pool.ID) 373 374 // Update listener's default pool ID. 375 updateListenerOpts = listeners.UpdateOpts{ 376 DefaultPoolID: &pool.ID, 377 } 378 _, err = listeners.Update(context.TODO(), lbClient, listener.ID, updateListenerOpts).Extract() 379 th.AssertNoErr(t, err) 380 381 if err := WaitForLoadBalancerState(lbClient, lb.ID, "ACTIVE"); err != nil { 382 t.Fatalf("Timed out waiting for loadbalancer to become active") 383 } 384 385 newListener, err = listeners.Get(context.TODO(), lbClient, listener.ID).Extract() 386 th.AssertNoErr(t, err) 387 388 tools.PrintResource(t, newListener) 389 390 th.AssertEquals(t, newListener.DefaultPoolID, pool.ID) 391 392 // Remove listener's default pool ID 393 emptyPoolID := "" 394 updateListenerOpts = listeners.UpdateOpts{ 395 DefaultPoolID: &emptyPoolID, 396 } 397 _, err = listeners.Update(context.TODO(), lbClient, listener.ID, updateListenerOpts).Extract() 398 th.AssertNoErr(t, err) 399 400 if err := WaitForLoadBalancerState(lbClient, lb.ID, "ACTIVE"); err != nil { 401 t.Fatalf("Timed out waiting for loadbalancer to become active") 402 } 403 404 newListener, err = listeners.Get(context.TODO(), lbClient, listener.ID).Extract() 405 th.AssertNoErr(t, err) 406 407 tools.PrintResource(t, newListener) 408 409 th.AssertEquals(t, newListener.DefaultPoolID, "") 410 411 // Member 412 member, err := CreateMember(t, lbClient, lb, pool, subnet.ID, subnet.CIDR) 413 th.AssertNoErr(t, err) 414 defer DeleteMember(t, lbClient, lb.ID, pool.ID, member.ID) 415 416 memberName := "" 417 newWeight := tools.RandomInt(11, 100) 418 updateMemberOpts := pools.UpdateMemberOpts{ 419 Name: &memberName, 420 Weight: &newWeight, 421 } 422 _, err = pools.UpdateMember(context.TODO(), lbClient, pool.ID, member.ID, updateMemberOpts).Extract() 423 th.AssertNoErr(t, err) 424 425 if err = WaitForLoadBalancerState(lbClient, lb.ID, "ACTIVE"); err != nil { 426 t.Fatalf("Timed out waiting for loadbalancer to become active") 427 } 428 429 newMember, err := pools.GetMember(context.TODO(), lbClient, pool.ID, member.ID).Extract() 430 th.AssertNoErr(t, err) 431 432 tools.PrintResource(t, newMember) 433 th.AssertEquals(t, newMember.Name, memberName) 434 435 newWeight = tools.RandomInt(11, 100) 436 memberOpts := pools.BatchUpdateMemberOpts{ 437 Address: member.Address, 438 ProtocolPort: member.ProtocolPort, 439 Weight: &newWeight, 440 } 441 batchMembers := []pools.BatchUpdateMemberOpts{memberOpts} 442 if err = pools.BatchUpdateMembers(context.TODO(), lbClient, pool.ID, batchMembers).ExtractErr(); err != nil { 443 t.Fatalf("Unable to batch update members") 444 } 445 446 if err = WaitForLoadBalancerState(lbClient, lb.ID, "ACTIVE"); err != nil { 447 t.Fatalf("Timed out waiting for loadbalancer to become active") 448 } 449 450 newMember, err = pools.GetMember(context.TODO(), lbClient, pool.ID, member.ID).Extract() 451 th.AssertNoErr(t, err) 452 453 tools.PrintResource(t, newMember) 454 455 pool, err = pools.Get(context.TODO(), lbClient, pool.ID).Extract() 456 th.AssertNoErr(t, err) 457 458 tools.PrintResource(t, pool) 459 460 // Monitor 461 monitor, err := CreateMonitor(t, lbClient, lb, pool) 462 th.AssertNoErr(t, err) 463 defer DeleteMonitor(t, lbClient, lb.ID, monitor.ID) 464 465 monName := "" 466 newDelay := tools.RandomInt(20, 30) 467 newMaxRetriesDown := tools.RandomInt(4, 10) 468 updateMonitorOpts := monitors.UpdateOpts{ 469 Name: &monName, 470 Delay: newDelay, 471 MaxRetriesDown: newMaxRetriesDown, 472 } 473 _, err = monitors.Update(context.TODO(), lbClient, monitor.ID, updateMonitorOpts).Extract() 474 th.AssertNoErr(t, err) 475 476 if err = WaitForLoadBalancerState(lbClient, lb.ID, "ACTIVE"); err != nil { 477 t.Fatalf("Timed out waiting for loadbalancer to become active") 478 } 479 480 newMonitor, err := monitors.Get(context.TODO(), lbClient, monitor.ID).Extract() 481 th.AssertNoErr(t, err) 482 483 tools.PrintResource(t, newMonitor) 484 485 th.AssertEquals(t, newMonitor.Name, monName) 486 th.AssertEquals(t, newMonitor.Delay, newDelay) 487 th.AssertEquals(t, newMonitor.MaxRetriesDown, newMaxRetriesDown) 488 } 489 490 func TestLoadbalancersCascadeCRUD(t *testing.T) { 491 netClient, err := clients.NewNetworkV2Client() 492 th.AssertNoErr(t, err) 493 494 lbClient, err := clients.NewLoadBalancerV2Client() 495 th.AssertNoErr(t, err) 496 497 network, err := networking.CreateNetwork(t, netClient) 498 th.AssertNoErr(t, err) 499 defer networking.DeleteNetwork(t, netClient, network.ID) 500 501 subnet, err := networking.CreateSubnet(t, netClient, network.ID) 502 th.AssertNoErr(t, err) 503 defer networking.DeleteSubnet(t, netClient, subnet.ID) 504 505 tags := []string{"test"} 506 lb, err := CreateLoadBalancer(t, lbClient, subnet.ID, tags, "", nil) 507 th.AssertNoErr(t, err) 508 defer CascadeDeleteLoadBalancer(t, lbClient, lb.ID) 509 510 newLB, err := loadbalancers.Get(context.TODO(), lbClient, lb.ID).Extract() 511 th.AssertNoErr(t, err) 512 513 tools.PrintResource(t, newLB) 514 515 // Because of the time it takes to create a loadbalancer, 516 // this test will include some other resources. 517 518 // Listener 519 listener, err := CreateListener(t, lbClient, lb) 520 th.AssertNoErr(t, err) 521 522 listenerDescription := "Some listener description" 523 updateListenerOpts := listeners.UpdateOpts{ 524 Description: &listenerDescription, 525 } 526 _, err = listeners.Update(context.TODO(), lbClient, listener.ID, updateListenerOpts).Extract() 527 th.AssertNoErr(t, err) 528 529 if err := WaitForLoadBalancerState(lbClient, lb.ID, "ACTIVE"); err != nil { 530 t.Fatalf("Timed out waiting for loadbalancer to become active") 531 } 532 533 newListener, err := listeners.Get(context.TODO(), lbClient, listener.ID).Extract() 534 th.AssertNoErr(t, err) 535 536 tools.PrintResource(t, newListener) 537 538 // Pool 539 pool, err := CreatePool(t, lbClient, lb) 540 th.AssertNoErr(t, err) 541 542 poolDescription := "Some pool description" 543 updatePoolOpts := pools.UpdateOpts{ 544 Description: &poolDescription, 545 } 546 _, err = pools.Update(context.TODO(), lbClient, pool.ID, updatePoolOpts).Extract() 547 th.AssertNoErr(t, err) 548 549 if err := WaitForLoadBalancerState(lbClient, lb.ID, "ACTIVE"); err != nil { 550 t.Fatalf("Timed out waiting for loadbalancer to become active") 551 } 552 553 newPool, err := pools.Get(context.TODO(), lbClient, pool.ID).Extract() 554 th.AssertNoErr(t, err) 555 556 tools.PrintResource(t, newPool) 557 558 // Member 559 member, err := CreateMember(t, lbClient, lb, newPool, subnet.ID, subnet.CIDR) 560 th.AssertNoErr(t, err) 561 562 newWeight := tools.RandomInt(11, 100) 563 updateMemberOpts := pools.UpdateMemberOpts{ 564 Weight: &newWeight, 565 } 566 _, err = pools.UpdateMember(context.TODO(), lbClient, pool.ID, member.ID, updateMemberOpts).Extract() 567 th.AssertNoErr(t, err) 568 569 if err := WaitForLoadBalancerState(lbClient, lb.ID, "ACTIVE"); err != nil { 570 t.Fatalf("Timed out waiting for loadbalancer to become active") 571 } 572 573 newMember, err := pools.GetMember(context.TODO(), lbClient, pool.ID, member.ID).Extract() 574 th.AssertNoErr(t, err) 575 576 tools.PrintResource(t, newMember) 577 578 // Monitor 579 monitor, err := CreateMonitor(t, lbClient, lb, newPool) 580 th.AssertNoErr(t, err) 581 582 newDelay := tools.RandomInt(20, 30) 583 newMaxRetriesDown := tools.RandomInt(4, 10) 584 updateMonitorOpts := monitors.UpdateOpts{ 585 Delay: newDelay, 586 MaxRetriesDown: newMaxRetriesDown, 587 } 588 _, err = monitors.Update(context.TODO(), lbClient, monitor.ID, updateMonitorOpts).Extract() 589 th.AssertNoErr(t, err) 590 591 if err := WaitForLoadBalancerState(lbClient, lb.ID, "ACTIVE"); err != nil { 592 t.Fatalf("Timed out waiting for loadbalancer to become active") 593 } 594 595 newMonitor, err := monitors.Get(context.TODO(), lbClient, monitor.ID).Extract() 596 th.AssertNoErr(t, err) 597 598 tools.PrintResource(t, newMonitor) 599 600 th.AssertEquals(t, newMonitor.Delay, newDelay) 601 th.AssertEquals(t, newMonitor.MaxRetriesDown, newMaxRetriesDown) 602 } 603 604 func TestLoadbalancersFullyPopulatedCRUD(t *testing.T) { 605 netClient, err := clients.NewNetworkV2Client() 606 th.AssertNoErr(t, err) 607 608 lbClient, err := clients.NewLoadBalancerV2Client() 609 th.AssertNoErr(t, err) 610 611 network, err := networking.CreateNetwork(t, netClient) 612 th.AssertNoErr(t, err) 613 defer networking.DeleteNetwork(t, netClient, network.ID) 614 615 subnet, err := networking.CreateSubnet(t, netClient, network.ID) 616 th.AssertNoErr(t, err) 617 defer networking.DeleteSubnet(t, netClient, subnet.ID) 618 619 tags := []string{"test"} 620 lb, err := CreateLoadBalancerFullyPopulated(t, lbClient, subnet.ID, tags) 621 th.AssertNoErr(t, err) 622 defer CascadeDeleteLoadBalancer(t, lbClient, lb.ID) 623 624 newLB, err := loadbalancers.Get(context.TODO(), lbClient, lb.ID).Extract() 625 th.AssertNoErr(t, err) 626 627 tools.PrintResource(t, newLB) 628 }