From 56ca4630906834019feffc62649e489b1a23e16a Mon Sep 17 00:00:00 2001 From: Bhavesh Shrivastav Date: Wed, 23 Mar 2022 13:30:56 +0530 Subject: [PATCH 1/4] Fix for optional weight attribute's value Fix for optional weight attr set to 0 when not provided. --- .../vpc/resource_ibm_is_lb_pool_member.go | 11 ++-- .../resource_ibm_is_lb_pool_member_test.go | 65 ++++++++++++++++++- 2 files changed, 71 insertions(+), 5 deletions(-) diff --git a/ibm/service/vpc/resource_ibm_is_lb_pool_member.go b/ibm/service/vpc/resource_ibm_is_lb_pool_member.go index edcdcf4ac29..237dc229c01 100644 --- a/ibm/service/vpc/resource_ibm_is_lb_pool_member.go +++ b/ibm/service/vpc/resource_ibm_is_lb_pool_member.go @@ -164,9 +164,7 @@ func resourceIBMISLBPoolMemberCreate(d *schema.ResourceData, meta interface{}) e port64 := int64(port) var weight int64 - if w, ok := d.GetOkExists(isLBPoolMemberWeight); ok { - weight = int64(w.(int)) - } + isLBKey := "load_balancer_key_" + lbID conns.IbmMutexKV.Lock(isLBKey) defer conns.IbmMutexKV.Unlock(isLBKey) @@ -213,7 +211,12 @@ func lbpMemberCreate(d *schema.ResourceData, meta interface{}, lbID, lbPoolID st } options.Target = target } - options.Weight = &weight + if w, ok := d.GetOkExists(isLBPoolMemberWeight); ok { + weight = int64(w.(int)) + if ok { + options.Weight = &weight + } + } lbPoolMember, response, err := sess.CreateLoadBalancerPoolMember(options) if err != nil { diff --git a/ibm/service/vpc/resource_ibm_is_lb_pool_member_test.go b/ibm/service/vpc/resource_ibm_is_lb_pool_member_test.go index 58299b3c10a..3c98912e6e3 100644 --- a/ibm/service/vpc/resource_ibm_is_lb_pool_member_test.go +++ b/ibm/service/vpc/resource_ibm_is_lb_pool_member_test.go @@ -70,7 +70,8 @@ func TestAccIBMISLBPoolMember_basic_network(t *testing.T) { nlbName := fmt.Sprintf("tfnlbcreate%d", acctest.RandIntRange(10, 100)) nlbName1 := fmt.Sprintf("tfnlbupdate%d", acctest.RandIntRange(10, 100)) - sshname := "terraform-test-ssh-key" + // sshname := "terraform-test-ssh-key" + sshname := "ssh-test-bhavesh" vsiName := fmt.Sprintf("tf-instance-%d", acctest.RandIntRange(10, 100)) resource.Test(t, resource.TestCase{ @@ -102,6 +103,34 @@ func TestAccIBMISLBPoolMember_basic_network(t *testing.T) { }) } +// Weight set to zero from TF when it wasn't passed, must be kept blank so that backend could set it to default. +// Function to validate if the weight is set to default as 50, when it is not provided in TF config. +func TestAccIBMISLBPoolMember_basic_opt_weight_check(t *testing.T) { + var lb string + + vpcname := fmt.Sprintf("tflbpm-vpc-%d", acctest.RandIntRange(10, 100)) + subnetname := fmt.Sprintf("tflbpmc-name-%d", acctest.RandIntRange(10, 100)) + name := fmt.Sprintf("tfcreate%d", acctest.RandIntRange(10, 100)) + poolName := fmt.Sprintf("tflbpoolc%d", acctest.RandIntRange(10, 100)) + port := "8080" + address := "127.0.0.1" + + resource.Test(t, resource.TestCase{ + PreCheck: func() { acc.TestAccPreCheck(t) }, + Providers: acc.TestAccProviders, + CheckDestroy: testAccCheckIBMISLBPoolMemberDestroy, + Steps: []resource.TestStep{ + { + Config: testAccCheckIBMISLBPoolMemberWeightConfig(vpcname, subnetname, acc.ISZoneName, acc.ISCIDR, name, poolName, port, address), + Check: resource.ComposeTestCheckFunc( + testAccCheckIBMISLBPoolMemberExists("ibm_is_lb_pool_member.testacc_lb_mem_wgt", lb), + resource.TestCheckResourceAttr("ibm_is_lb_pool_member.testacc_lb_mem_wgt", "weight", "50"), + ), + }, + }, + }) +} + func testAccCheckIBMISLBPoolMemberDestroy(s *terraform.State) error { sess, _ := acc.TestAccProvider.Meta().(conns.ClientSession).VpcV1API() @@ -257,3 +286,37 @@ func testAccCheckIBMISLBPoolMemberIDConfig(vpcname, subnetname, zone, cidr, sshn `, vpcname, subnetname, zone, cidr, sshname, isImageName, vsiName, acc.InstanceProfileName, zone, nlbName, nlbPoolName) } + +func testAccCheckIBMISLBPoolMemberWeightConfig(vpcname, subnetname, zone, cidr, name, poolName, port, address string) string { + return fmt.Sprintf(` + resource "ibm_is_vpc" "testacc_vpc" { + name = "%s" + } + + resource "ibm_is_subnet" "testacc_subnet" { + name = "%s" + vpc = "${ibm_is_vpc.testacc_vpc.id}" + zone = "%s" + ipv4_cidr_block = "%s" + } + resource "ibm_is_lb" "testacc_LB" { + name = "%s" + subnets = ["${ibm_is_subnet.testacc_subnet.id}"] + } + resource "ibm_is_lb_pool" "testacc_lb_pool" { + name = "%s" + lb = "${ibm_is_lb.testacc_LB.id}" + algorithm = "round_robin" + protocol = "http" + health_delay= 45 + health_retries = 5 + health_timeout = 30 + health_type = "tcp" + } + resource "ibm_is_lb_pool_member" "testacc_lb_mem_wgt" { + lb = "${ibm_is_lb.testacc_LB.id}" + pool = "${element(split("/",ibm_is_lb_pool.testacc_lb_pool.id),1)}" + port = "%s" + target_address = "%s" +}`, vpcname, subnetname, zone, cidr, name, poolName, port, address) +} From 2a62d58477e785aad1a2b041d5e564714d2354c8 Mon Sep 17 00:00:00 2001 From: Bhavesh Shrivastav Date: Wed, 23 Mar 2022 17:02:07 +0530 Subject: [PATCH 2/4] ssh key removal --- ibm/service/vpc/resource_ibm_is_lb_pool_member.go | 4 +--- ibm/service/vpc/resource_ibm_is_lb_pool_member_test.go | 3 +-- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/ibm/service/vpc/resource_ibm_is_lb_pool_member.go b/ibm/service/vpc/resource_ibm_is_lb_pool_member.go index 237dc229c01..5ec485b61c2 100644 --- a/ibm/service/vpc/resource_ibm_is_lb_pool_member.go +++ b/ibm/service/vpc/resource_ibm_is_lb_pool_member.go @@ -213,9 +213,7 @@ func lbpMemberCreate(d *schema.ResourceData, meta interface{}, lbID, lbPoolID st } if w, ok := d.GetOkExists(isLBPoolMemberWeight); ok { weight = int64(w.(int)) - if ok { - options.Weight = &weight - } + options.Weight = &weight } lbPoolMember, response, err := sess.CreateLoadBalancerPoolMember(options) diff --git a/ibm/service/vpc/resource_ibm_is_lb_pool_member_test.go b/ibm/service/vpc/resource_ibm_is_lb_pool_member_test.go index 3c98912e6e3..4e831f26e20 100644 --- a/ibm/service/vpc/resource_ibm_is_lb_pool_member_test.go +++ b/ibm/service/vpc/resource_ibm_is_lb_pool_member_test.go @@ -70,8 +70,7 @@ func TestAccIBMISLBPoolMember_basic_network(t *testing.T) { nlbName := fmt.Sprintf("tfnlbcreate%d", acctest.RandIntRange(10, 100)) nlbName1 := fmt.Sprintf("tfnlbupdate%d", acctest.RandIntRange(10, 100)) - // sshname := "terraform-test-ssh-key" - sshname := "ssh-test-bhavesh" + sshname := "terraform-test-ssh-key" vsiName := fmt.Sprintf("tf-instance-%d", acctest.RandIntRange(10, 100)) resource.Test(t, resource.TestCase{ From c2aa5765fcba6bc828d50ab8894e6c6f70a5de6c Mon Sep 17 00:00:00 2001 From: Bhavesh Shrivastav Date: Thu, 7 Apr 2022 11:34:58 +0530 Subject: [PATCH 3/4] weight default info added in docs weight default info added in docs. --- website/docs/r/is_lb_pool_member.html.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/r/is_lb_pool_member.html.markdown b/website/docs/r/is_lb_pool_member.html.markdown index d9856507b6e..f71c4b024bf 100644 --- a/website/docs/r/is_lb_pool_member.html.markdown +++ b/website/docs/r/is_lb_pool_member.html.markdown @@ -63,7 +63,7 @@ Review the argument references that you can specify for your resource. - `port`- (Required, Integer) The port number of the application running in the server member. - `target_address` - (Required, String) The IP address of the pool member. - `target_id` - (Required, String) The unique identifier for the virtual server instance pool member. Required for network load balancer. -- `weight` - (Optional, Integer) Weight of the server member. This option takes effect only when the load-balancing algorithm of its belonging pool is `weighted_round_robin`, Minimum allowed weight is `0` and Maximum allowed weight is `100`. +- `weight` - (Optional, Integer) Weight of the server member. This option takes effect only when the load-balancing algorithm of its belonging pool is `weighted_round_robin`, Minimum allowed weight is `0` and Maximum allowed weight is `100`. When weight is not provided a default of 40 is returned. ## Attribute reference In addition to all argument reference list, you can access the following attribute reference after your resource is created. From 84be5c83560ca10dfeb133deb0e09c4da6fb6714 Mon Sep 17 00:00:00 2001 From: Bhavesh Shrivastav Date: Thu, 12 May 2022 14:35:41 +0530 Subject: [PATCH 4/4] upd docs upd docs --- website/docs/r/is_lb_pool_member.html.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/r/is_lb_pool_member.html.markdown b/website/docs/r/is_lb_pool_member.html.markdown index f71c4b024bf..0adcc4b13bb 100644 --- a/website/docs/r/is_lb_pool_member.html.markdown +++ b/website/docs/r/is_lb_pool_member.html.markdown @@ -63,7 +63,7 @@ Review the argument references that you can specify for your resource. - `port`- (Required, Integer) The port number of the application running in the server member. - `target_address` - (Required, String) The IP address of the pool member. - `target_id` - (Required, String) The unique identifier for the virtual server instance pool member. Required for network load balancer. -- `weight` - (Optional, Integer) Weight of the server member. This option takes effect only when the load-balancing algorithm of its belonging pool is `weighted_round_robin`, Minimum allowed weight is `0` and Maximum allowed weight is `100`. When weight is not provided a default of 40 is returned. +- `weight` - (Optional, Integer) Weight of the server member. This option takes effect only when the load-balancing algorithm of its belonging pool is `weighted_round_robin`, Minimum allowed weight is `0` and Maximum allowed weight is `100`. Default: 50, Weight of the server member. Applicable only if the pool algorithm is weighted_round_robin. ## Attribute reference In addition to all argument reference list, you can access the following attribute reference after your resource is created.