Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added monitor_port and monitor_address to lb_members_v2 #1363

Merged
11 changes: 11 additions & 0 deletions main.go
Original file line number Diff line number Diff line change
@@ -1,11 +1,22 @@
package main

import (
"flag"

"github.com/hashicorp/terraform-plugin-sdk/v2/plugin"
"github.com/terraform-provider-openstack/terraform-provider-openstack/openstack"
)

const providerAddr = "registry.terraform.io/terraform-provider-openstack/openstack"

func main() {
// added debugMode to enable debugging for provider per https://www.terraform.io/plugin/sdkv2/debugging
nikParasyr marked this conversation as resolved.
Show resolved Hide resolved
var debugMode bool
flag.BoolVar(&debugMode, "debug", false, "set to true to run the provider with support for debuggers like delve")
flag.Parse()

plugin.Serve(&plugin.ServeOpts{
Debug: debugMode,
ProviderAddr: providerAddr,
ProviderFunc: openstack.Provider})
}
33 changes: 25 additions & 8 deletions openstack/lb_v2_shared.go
Original file line number Diff line number Diff line change
Expand Up @@ -1090,14 +1090,16 @@ func flattenLBMembersV2(members []octaviapools.Member) []map[string]interface{}

for i, member := range members {
m[i] = map[string]interface{}{
"name": member.Name,
"weight": member.Weight,
"admin_state_up": member.AdminStateUp,
"subnet_id": member.SubnetID,
"address": member.Address,
"protocol_port": member.ProtocolPort,
"id": member.ID,
"backup": member.Backup,
"name": member.Name,
"weight": member.Weight,
"admin_state_up": member.AdminStateUp,
"subnet_id": member.SubnetID,
"address": member.Address,
"protocol_port": member.ProtocolPort,
"monitor_port": member.MonitorPort,
"monitor_address": member.MonitorAddress,
"id": member.ID,
"backup": member.Backup,
}
}

Expand Down Expand Up @@ -1130,6 +1132,21 @@ func expandLBMembersV2(members *schema.Set, lbClient *gophercloud.ServiceClient)
member.Backup = &backup
}

// Only set monitor_port and monitor_address when explicitly specified, as they are optional arguments
if val, ok := rawMap["monitor_port"]; ok {
monitorPort := val.(int)
if monitorPort > 0 {
member.MonitorPort = &monitorPort
}
}

if val, ok := rawMap["monitor_address"]; ok {
monitorAddress := val.(string)
if monitorAddress != "" {
member.MonitorAddress = &monitorAddress
}
}

m = append(m, member)
}
}
Expand Down
11 changes: 11 additions & 0 deletions openstack/resource_openstack_lb_members_v2.go
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,17 @@ func resourceMembersV2() *schema.Resource {
ValidateFunc: validation.IntBetween(0, 256),
},

"monitor_port": {
Type: schema.TypeInt,
Optional: true,
ValidateFunc: validation.IntBetween(1, 65535),
},

"monitor_address": {
Type: schema.TypeString,
Optional: true,
},

"subnet_id": {
Type: schema.TypeString,
Optional: true,
Expand Down
24 changes: 20 additions & 4 deletions openstack/resource_openstack_lb_members_v2_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,10 @@ func TestAccLBV2Members_basic(t *testing.T) {
resource.TestCheckResourceAttr("openstack_lb_members_v2.members_1", "member.1.weight", "1"),
resource.TestCheckResourceAttr("openstack_lb_members_v2.members_1", "member.0.backup", "false"),
resource.TestCheckResourceAttr("openstack_lb_members_v2.members_1", "member.1.backup", "true"),
resource.TestCheckResourceAttr("openstack_lb_members_v2.members_1", "member.0.monitor_address", "192.168.199.110"),
resource.TestCheckResourceAttr("openstack_lb_members_v2.members_1", "member.1.monitor_address", "192.168.199.111"),
resource.TestCheckResourceAttr("openstack_lb_members_v2.members_1", "member.0.monitor_port", "8088"),
resource.TestCheckResourceAttr("openstack_lb_members_v2.members_1", "member.1.monitor_port", "8088"),
),
},
{
Expand All @@ -68,6 +72,10 @@ func TestAccLBV2Members_basic(t *testing.T) {
resource.TestCheckResourceAttr("openstack_lb_members_v2.members_1", "member.1.weight", "15"),
resource.TestCheckResourceAttr("openstack_lb_members_v2.members_1", "member.0.backup", "true"),
resource.TestCheckResourceAttr("openstack_lb_members_v2.members_1", "member.1.backup", "false"),
resource.TestCheckResourceAttr("openstack_lb_members_v2.members_1", "member.0.monitor_address", "192.168.199.10"),
resource.TestCheckResourceAttr("openstack_lb_members_v2.members_1", "member.1.monitor_address", "192.168.199.11"),
resource.TestCheckResourceAttr("openstack_lb_members_v2.members_1", "member.0.monitor_port", "8080"),
resource.TestCheckResourceAttr("openstack_lb_members_v2.members_1", "member.1.monitor_port", "8080"),
),
},
{
Expand Down Expand Up @@ -202,15 +210,19 @@ resource "openstack_lb_members_v2" "members_1" {
member {
address = "192.168.199.110"
protocol_port = 8080
monitor_address = "192.168.199.110"
monitor_port = 8088
subnet_id = "${openstack_networking_subnet_v2.subnet_1.id}"
weight = 0
}

member {
address = "192.168.199.111"
protocol_port = 8080
subnet_id = "${openstack_networking_subnet_v2.subnet_1.id}"
backup = true
monitor_address = "192.168.199.111"
monitor_port = 8088
subnet_id = "${openstack_networking_subnet_v2.subnet_1.id}"
backup = true
}

timeouts {
Expand Down Expand Up @@ -259,6 +271,8 @@ resource "openstack_lb_members_v2" "members_1" {
member {
address = "192.168.199.110"
protocol_port = 8080
monitor_address = "192.168.199.10"
monitor_port = 8080
weight = 10
admin_state_up = "true"
subnet_id = "${openstack_networking_subnet_v2.subnet_1.id}"
Expand All @@ -268,10 +282,12 @@ resource "openstack_lb_members_v2" "members_1" {
member {
address = "192.168.199.111"
protocol_port = 8080
monitor_address = "192.168.199.11"
monitor_port = 8080
weight = 15
admin_state_up = "true"
subnet_id = "${openstack_networking_subnet_v2.subnet_1.id}"
backup = false
subnet_id = "${openstack_networking_subnet_v2.subnet_1.id}"
backup = false
}

timeouts {
Expand Down
6 changes: 6 additions & 0 deletions website/docs/r/lb_members_v2.html.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,12 @@ The `member` block supports:
example, a member with a weight of 10 receives five times as much traffic
as a member with a weight of 2. Defaults to 1.

* `monitor_port` - (Optional) An alternate protocol port used for health
monitoring a backend member.

* `monitor_address` - (Optional) An alternate IP address used for health
monitoring a backend member.

* `admin_state_up` - (Optional) The administrative state of the member.
A valid value is true (UP) or false (DOWN). Defaults to true.

Expand Down