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 26, 2024
1 parent ba09928 commit 3cca272
Show file tree
Hide file tree
Showing 37 changed files with 1,513 additions and 662 deletions.
47 changes: 47 additions & 0 deletions docs/data-sources/lb_loadbalancer.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
---
subcategory: "Elastic Load Balance (ELB)"
---

# flexibleengine_lb_loadbalancer

Use this data source to get a specific elb loadbalancer within FlexibleEngine.

## Example Usage

```hcl
variable "lb_name" {}
data "flexibleengine_lb_loadbalancer" "test" {
name = var.lb_name
}
```

## Argument Reference

* `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.

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

* `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:

* `tags` - The tags associated with the load balancer.

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

* `public_ip` - The EIP address that is associated to the Load Balancer instance.
4 changes: 3 additions & 1 deletion docs/data-sources/lb_loadbalancer_v2.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
---
subcategory: "Elastic Load Balance (ELB)"
subcategory: "Deprecated"
description: ""
page_title: "flexibleengine_lb_loadbalancer_v2"
---

# flexibleengine_lb_loadbalancer_v2
Expand Down
70 changes: 70 additions & 0 deletions docs/resources/lb_member.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
---
subcategory: "Elastic Load Balance (ELB)"
description: ""
page_title: "flexibleengine_lb_member"
---

# flexibleengine_lb_member

Manages an **enhanced** load balancer member resource within FlexibleEngine.

## Example Usage

```hcl
variable "lb_pool_id" {}
variable "ipv4_subnet_id" {}
resource "flexibleengine_lb_member" "member_1" {
address = "192.168.199.23"
protocol_port = 8080
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 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.

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

* `name` - (Optional, String) Human-readable name for the member.

* `address` - (Required, String, ForceNew) The IP address of the member to receive traffic from the load balancer.
Changing this creates a new 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.

## Attribute Reference

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

* `id` - The unique ID for the member.

## Timeouts

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.member_1 e0bd694a-abbe-450e-b329-0931fd1cc5eb/4086b0c9-b18c-4d1c-b6b8-4c56c3ad2a9e
```
111 changes: 111 additions & 0 deletions docs/resources/lb_monitor.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
---
subcategory: "Elastic Load Balance (ELB)"
description: ""
page_title: "flexibleengine_lb_monitor"
---

# flexibleengine_lb_monitor

Manages an **enhanced** load balancer monitor resource within FlexibleEngine.

## Example Usage

### TCP Health Check

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

### UDP Health Check

```hcl
resource "flexibleengine_lb_monitor" "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" "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 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.

* `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.

* `delay` - (Required, Int) Specifies the maximum time between health checks in the unit of second. The value ranges
from 1 to 50.

* `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.

* `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.

-> 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) Specifies the health check name. The value contains a maximum of 255 characters.

* `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.

* `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.

* `http_method` - (Optional, String) Specifies the HTTP request method. Required for HTTP type.
The default value is *GET*.

* `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

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

* `id` - The unique ID for the monitor.

## Timeouts

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.monitor_1 5c20fdad-7288-11eb-b817-0255ac10158b
```
63 changes: 63 additions & 0 deletions docs/resources/lb_whitelist.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
---
subcategory: "Elastic Load Balance (ELB)"
description: ""
page_title: "flexibleengine_lb_whitelist"
---

# flexibleengine_lb_whitelist

Manages an **enhanced** load balancer whitelist resource within FlexibleEngine.

## Example Usage

```hcl
resource "flexibleengine_lb_listener" "listener_1" {
name = "listener_1"
protocol = "HTTP"
protocol_port = 8080
loadbalancer_id = var.loadbalancer_id
}
resource "flexibleengine_lb_whitelist" "whitelist_1" {
enable_whitelist = true
whitelist = "192.168.11.1,192.168.0.1/24,192.168.201.18/8"
listener_id = flexibleengine_lb_listener.listener_1.id
}
```

## Argument Reference

The following arguments are supported:

* `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.

## Attribute Reference

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

* `id` - The unique ID for the whitelist.

## Timeouts

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.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.test_by_name"
dc1 := acceptance.InitDataSourceCheck(dataSourceName1)
dataSourceName2 := "data.flexibleengine_lb_loadbalancer.test_by_description"
dc2 := acceptance.InitDataSourceCheck(dataSourceName2)

var lb loadbalancers.LoadBalancer
resourceName := "flexibleengine_lb_loadbalancer.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" "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" "test_by_name" {
name = flexibleengine_lb_loadbalancer.test.name
depends_on = [flexibleengine_lb_loadbalancer.test]
}
data "flexibleengine_lb_loadbalancer" "test_by_description" {
description = flexibleengine_lb_loadbalancer.test.description
depends_on = [flexibleengine_lb_loadbalancer.test]
}
`, rName)
}
Loading

0 comments on commit 3cca272

Please sign in to comment.