-
Notifications
You must be signed in to change notification settings - Fork 53
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
WIP(ELB): Synchronized ELB resources and data sources.
- Loading branch information
1 parent
ba09928
commit 3cca272
Showing
37 changed files
with
1,513 additions
and
662 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
``` |
95 changes: 95 additions & 0 deletions
95
flexibleengine/acceptance/data_source_flexibleengine_lb_loadbalancer_test.go
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) | ||
} |
Oops, something went wrong.