Skip to content

Commit

Permalink
WIP(ELB): Synchronized ELB resources and data sources.
Browse files Browse the repository at this point in the history
  • Loading branch information
Zippo-Wang committed Jan 17, 2024
1 parent ba09928 commit 8b1a42e
Show file tree
Hide file tree
Showing 9 changed files with 841 additions and 61 deletions.
19 changes: 12 additions & 7 deletions docs/data-sources/lb_loadbalancer_v2.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,25 +18,30 @@ data "flexibleengine_lb_loadbalancer_v2" "test" {

## Argument Reference

* `region` - (Optional, String) The region in which to query the data source. If omitted, the provider-level region
will be used.
* `region` - (Optional, String) Specifies the region in which to obtain the load balancer. If omitted, the
provider-level region will be used.

* `name` - (Optional, String) Specifies the name of the load balancer.

* `id` - (Optional, String) Specifies the data source ID of the load balancer in UUID format.

* `description` - (Optional, String) Specifies the supplementary information about the load balancer.
* `status` - (Optional, String) Specifies the operating status of the load balancer. Valid values are *ONLINE* and
*FROZEN*.

* `vip_subnet_id` - (Optional, String) Specifies the ID of the subnet where the load balancer works.
* `description` - (Optional, String) Specifies the supplementary information about the load balancer.

* `vip_address` - (Optional, String) Specifies the private IP address of the load balancer.

* `vip_subnet_id` - (Optional, String) Specifies the **IPv4 subnet ID** of the subnet where the load balancer works.

* `enterprise_project_id` - (Optional, String) Specifies the enterprise project id of the load balancer.

## Attribute Reference

In addition to all arguments above, the following attributes are exported:

* `vip_port_id` - The ID of the port bound to the private IP address of the load balancer.
* `tags` - The tags associated with the load balancer.

* `status` - The operating status of the load balancer.
* `vip_port_id` - The ID of the port bound to the private IP address of the load balancer.

* `tags` - The tags associated with the load balancer.
* `public_ip` - The EIP address that is associated to the Load Balancer instance.
45 changes: 27 additions & 18 deletions docs/resources/lb_member_v2.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,40 +11,41 @@ Manages an **enhanced** load balancer member resource within FlexibleEngine.
## Example Usage

```hcl
resource "flexibleengine_lb_member_v2" "example_member" {
variable "lb_pool_id" {}
variable "ipv4_subnet_id" {}
resource "flexibleengine_lb_member_v2" "member_1" {
address = "192.168.199.23"
protocol_port = 8080
pool_id = flexibleengine_lb_pool_v2.example_pool.id
subnet_id = flexibleengine_vpc_subnet_v1.example_subnet.ipv4_subnet_id
pool_id = var.lb_pool_id
subnet_id = var.ipv4_subnet_id
}
```

## Argument Reference

The following arguments are supported:

* `region` - (Optional, String, ForceNew) The region in which to obtain the V2 Networking client.
A Networking client is needed to be created. If omitted, the `region` argument of the provider is used.
Changing this creates a new member.
* `region` - (Optional, String, ForceNew) The region in which to create the ELB member resource. If omitted, the
provider-level region will be used. Changing this creates a new member.

* `pool_id` - (Required, String, ForceNew) The id of the pool that this member will be
assigned to. Changing this creates a new member.
* `pool_id` - (Required, String, ForceNew) The id of the pool that this member will be assigned to.
Changing this creates a new member.

* `subnet_id` - (Required, String, ForceNew) The `ipv4_subnet_id` or `ipv6_subnet_id` of the
VPC Subnet in which to access the member. Changing this creates a new member.
* `subnet_id` - (Required, String, ForceNew) The **IPv4 subnet ID** of the subnet in which to access the member.
Changing this creates a new member.

* `address` - (Required, String, ForceNew) The IP address of the member to receive traffic from
the load balancer. Changing this creates a new member.
* `name` - (Optional, String) Human-readable name for the member.

* `protocol_port` - (Required, Int, ForceNew) The port on which to listen for client traffic.
* `address` - (Required, String, ForceNew) The IP address of the member to receive traffic from the load balancer.
Changing this creates a new member.

* `name` - (Optional, String) Human-readable name for the member.
* `protocol_port` - (Required, Int, ForceNew) The port on which to listen for client traffic. Changing this creates a
new member.

* `weight` - (Optional, Int) A positive integer value that indicates the relative
portion of traffic that this member should receive from the pool. For
example, a member with a weight of 10 receives five times as much traffic
as a member with a weight of 2.
* `weight` - (Optional, Int) A positive integer value that indicates the relative portion of traffic that this member
should receive from the pool. For example, a member with a weight of 10 receives five times as much traffic as a
member with a weight of 2.

## Attribute Reference

Expand All @@ -59,3 +60,11 @@ This resource provides the following timeouts configuration options:
* `create` - Default is 10 minutes.
* `update` - Default is 10 minutes.
* `delete` - Default is 10 minutes.

## Import

ELB member can be imported using the pool ID and member ID separated by a slash, e.g.

```shell
terraform import flexibleengine_lb_member_v2.member_1 e0bd694a-abbe-450e-b329-0931fd1cc5eb/4086b0c9-b18c-4d1c-b6b8-4c56c3ad2a9e
```
92 changes: 67 additions & 25 deletions docs/resources/lb_monitor_v2.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,49 +10,83 @@ Manages an **enhanced** load balancer monitor resource within FlexibleEngine.

## Example Usage

### TCP Health Check

```hcl
resource "flexibleengine_lb_monitor_v2" "monitor_tcp" {
pool_id = var.pool_id
type = "TCP"
delay = 5
timeout = 3
max_retries = 3
}
```

### UDP Health Check

```hcl
resource "flexibleengine_lb_monitor_v2" "monitor_udp" {
pool_id = var.pool_id
type = "UDP_CONNECT"
delay = 5
timeout = 3
max_retries = 3
}
```

### HTTP Health Check

```hcl
resource "flexibleengine_lb_monitor_v2" "monitor_1" {
pool_id = flexibleengine_lb_pool_v2.pool_1.id
type = "PING"
delay = 20
timeout = 10
max_retries = 5
resource "flexibleengine_lb_monitor_v2" "monitor_http" {
pool_id = var.pool_id
type = "HTTP"
delay = 5
timeout = 3
max_retries = 3
url_path = "/test"
expected_codes = "200-202"
}
```

## Argument Reference

The following arguments are supported:

* `region` - (Optional, String, ForceNew) The region in which to create the resources.
If omitted, the `region` argument of the provider is used. Changing this creates a new resource.
* `region` - (Optional, String, ForceNew) The region in which to create the ELB monitor resource. If omitted, the
provider-level region will be used. Changing this creates a new monitor.

* `pool_id` - (Required, String, ForceNew) Specifies the id of the pool that this monitor will be assigned to. Changing
this creates a new monitor.

* `pool_id` - (Required, String, ForceNew) The id of the pool that this monitor will be assigned to.
Changing this creates a new monitor.
* `type` - (Required, String, ForceNew) Specifies the monitor protocol.
The value can be *TCP*, *UDP_CONNECT*, or *HTTP*.
If the listener protocol is UDP, the monitor protocol must be *UDP_CONNECT*. Changing this creates a new monitor.

* `type` - (Required, String, ForceNew) The type of probe, which is PING, TCP, HTTP, or HTTPS,
that is sent by the load balancer to verify the member state. Changing this creates a new monitor.
* `delay` - (Required, Int) Specifies the maximum time between health checks in the unit of second. The value ranges
from 1 to 50.

* `delay` - (Required, Int) The time, in seconds, between sending probes to members.
* `timeout` - (Required, Int) Specifies the health check timeout duration in the unit of second.
The value ranges from 1 to 50 and must be less than the `delay` value.

* `timeout` - (Required, Int) Maximum number of seconds for a monitor to wait for a
ping reply before it times out. The value must be less than the delay value.
* `max_retries` - (Required, Int) Specifies the maximum number of consecutive health checks after which the backend
servers are declared *healthy*. The value ranges from 1 to 10.

* `max_retries` - (Required, Int) Number of permissible ping failures before
changing the member's status to INACTIVE. Must be a number between 1 and 10.
-> Backend servers can be declared *unhealthy* after **three** consecutive health checks that detect these backend
servers are unhealthy, regardless of the value set for `max_retries`.

* `name` - (Optional, String) The Name of the Monitor.
* `name` - (Optional, String) Specifies the health check name. The value contains a maximum of 255 characters.

* `url_path` - (Optional, String) Required for HTTP(S) types. URI path that will be
accessed if monitor type is HTTP or HTTPS.
* `port` - (Optional, Int) Specifies the health check port. The port number ranges from 1 to 65535. If not specified,
the port of the backend server will be used as the health check port.

* `http_method` - (Optional, String) Required for HTTP(S) types. The HTTP method used
for requests by the monitor. If this attribute is not specified, it defaults to "GET".
* `url_path` - (Optional, String) Specifies the HTTP request path for the health check. Required for HTTP type.
The value starts with a slash (/) and contains a maximum of 255 characters.

* `expected_codes` - (Optional, String) Required for HTTP(S) types. Expected HTTP codes
for a passing HTTP(S) monitor. You can either specify a single status like "200", or a range like "200-202".
* `http_method` - (Optional, String) Specifies the HTTP request method. Required for HTTP type.
The default value is *GET*.

* `port` - (Optional, Int) Specifies the health check port. The value ranges from 1 to 65536.
* `expected_codes` - (Optional, String) Specifies the expected HTTP status code. Required for HTTP type.
You can either specify a single status like "200", or a range like "200-202".

## Attribute Reference

Expand All @@ -67,3 +101,11 @@ This resource provides the following timeouts configuration options:
* `create` - Default is 10 minutes.
* `update` - Default is 10 minutes.
* `delete` - Default is 10 minutes.

## Import

ELB monitor can be imported using the monitor ID, e.g.

```shell
terraform import flexibleengine_lb_monitor_v2.monitor_1 5c20fdad-7288-11eb-b817-0255ac10158b
```
28 changes: 23 additions & 5 deletions docs/resources/lb_whitelist_v2.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,24 +11,34 @@ Manages an **enhanced** load balancer whitelist resource within FlexibleEngine.
## Example Usage

```hcl
resource "flexibleengine_lb_listener_v2" "listener_1" {
name = "listener_1"
protocol = "HTTP"
protocol_port = 8080
loadbalancer_id = var.loadbalancer_id
}
resource "flexibleengine_lb_whitelist_v2" "whitelist_1" {
enable_whitelist = true
whitelist = "192.168.11.1,192.168.0.1/24,192.168.201.18/8"
listener_id = "d9415786-5f1a-428b-b35f-2f1523e146d2"
listener_id = flexibleengine_lb_listener_v2.listener_1.id
}
```

## Argument Reference

The following arguments are supported:

* `listener_id` - (Required, String, ForceNew) The Listener ID that the whitelist will be associated with.
Changing this creates a new whitelist.
* `region` - (Optional, String, ForceNew) The region in which to create the ELB whitelist resource. If omitted, the
provider-level region will be used. Changing this creates a new whitelist.

* `listener_id` - (Required, String, ForceNew) The Listener ID that the whitelist will be associated with. Changing this
creates a new whitelist.

* `enable_whitelist` - (Optional, Bool) Specify whether to enable access control.

* `whitelist` - (Optional, String) Specifies the IP addresses in the whitelist. Use commas(,) to separate
the multiple IP addresses.
* `whitelist` - (Optional, String) Specifies the IP addresses in the whitelist. Use commas(,) to separate the multiple
IP addresses.

## Attribute Reference

Expand All @@ -43,3 +53,11 @@ This resource provides the following timeouts configuration options:
* `create` - Default is 10 minutes.
* `update` - Default is 10 minutes.
* `delete` - Default is 10 minutes.

## Import

ELB whitelist can be imported using the whitelist ID, e.g.

```shell
terraform import flexibleengine_lb_whitelist_v2.whitelist_1 5c20fdad-7288-11eb-b817-0255ac10158b
```
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
package acceptance

import (
"fmt"
"testing"

"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
"github.com/huaweicloud/terraform-provider-huaweicloud/huaweicloud/config"

"github.com/chnsz/golangsdk/openstack/elb/v2/loadbalancers"

"github.com/huaweicloud/terraform-provider-huaweicloud/huaweicloud/services/acceptance"
)

func getLoadBalancerResourceFunc(conf *config.Config, state *terraform.ResourceState) (interface{}, error) {
c, err := conf.LoadBalancerClient(OS_REGION_NAME)
if err != nil {
return nil, fmt.Errorf("error creating ELB v2 Client: %s", err)
}
resp, err := loadbalancers.Get(c, state.Primary.ID).Extract()
if resp == nil && err == nil {
return resp, fmt.Errorf("unable to find the LoadBalancer (%s)", state.Primary.ID)
}
return resp, err
}

func TestAccELBV2LoadbalancerDataSource_basic(t *testing.T) {
rName := acceptance.RandomAccResourceNameWithDash()
dataSourceName1 := "data.flexibleengine_lb_loadbalancer_v2.test_by_name"
dc1 := acceptance.InitDataSourceCheck(dataSourceName1)
dataSourceName2 := "data.flexibleengine_lb_loadbalancer_v2.test_by_description"
dc2 := acceptance.InitDataSourceCheck(dataSourceName2)

var lb loadbalancers.LoadBalancer
resourceName := "flexibleengine_lb_loadbalancer_v2.test"

rc := acceptance.InitResourceCheck(
resourceName,
&lb,
getLoadBalancerResourceFunc,
)

resource.ParallelTest(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
ProviderFactories: TestAccProviderFactories,
CheckDestroy: rc.CheckResourceDestroy(),
Steps: []resource.TestStep{
{
Config: testAccELBV2LoadbalancerDataSource_basic(rName),
Check: resource.ComposeTestCheckFunc(
dc1.CheckResourceExists(),
dc2.CheckResourceExists(),
resource.TestCheckResourceAttr(dataSourceName1, "name", rName),
resource.TestCheckResourceAttr(dataSourceName2, "name", rName),
),
},
},
})
}

func testAccELBV2LoadbalancerDataSource_basic(rName string) string {
return fmt.Sprintf(`
resource "flexibleengine_vpc_v1" "test" {
name = "%[1]s"
cidr = "192.168.0.0/16"
}
resource "flexibleengine_vpc_subnet_v1" "test" {
name = "%[1]s"
cidr = "192.168.0.0/24"
vpc_id = flexibleengine_vpc_v1.test.id
gateway_ip = "192.168.0.1"
}
resource "flexibleengine_lb_loadbalancer_v2" "test" {
name = "%[1]s"
vip_subnet_id = flexibleengine_vpc_subnet_v1.test.ipv4_subnet_id
description = "test for load balancer data source"
}
data "flexibleengine_lb_loadbalancer_v2" "test_by_name" {
name = flexibleengine_lb_loadbalancer_v2.test.name
depends_on = [flexibleengine_lb_loadbalancer_v2.test]
}
data "flexibleengine_lb_loadbalancer_v2" "test_by_description" {
description = flexibleengine_lb_loadbalancer_v2.test.description
depends_on = [flexibleengine_lb_loadbalancer_v2.test]
}
`, rName)
}
Loading

0 comments on commit 8b1a42e

Please sign in to comment.