Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 55 additions & 0 deletions docs/resources/css_loadbalancer_v1.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
---
subcategory: "Cloud Search Service (CSS)"
layout: "opentelekomcloud"
page_title: "OpenTelekomCloud: opentelekomcloud_css_loadbalancer_v1"
sidebar_current: "docs-opentelekomcloud-resource-css-loadbalancer-v1"
description: |-
Manages a CSS load balancing resource within OpenTelekomCloud.
---

Up-to-date reference of API arguments for CSS load balancing you can get at
[documentation portal](https://docs.otc.t-systems.com/cloud-search-service/api-ref/apis/load_balancing)

# opentelekomcloud_css_loadbalancer_v1

Manages a CSS configuration of loadbalancer.

## Example Usage

```hcl
resource "opentelekomcloud_css_loadbalancer_v1" "css_lb" {
cluster_id = "terraform-test-cluster"
elb_id = var.elb_id
agency = "css_upgrade_agency"

listener {
protocol = "HTTPS"
protocol_port = 443
server_cert_id = var.server_cert_id
}
}
```

## Argument Reference

The following arguments are supported:

* `cluster_id` - (Required) ID of the CSS cluster.

* `agency` - (Required) The agency used by CSS to access ELB.

* `elb_id` - (Required) ELBv3 ID.

* `listener` - (Optional) configure load balancing listeners for a cluster. Structure is documented below.

The `listener` block supports:

* `protocol` - (Required) Protocol type. HTTP and HTTPS are supported.

* `protocol_port` - (Required) Port.

* `server_cert_id` - (Optional) Server certificate ID. This parameter is mandatory when protocol is set to HTTPS.

* `ca_cert_id` - (Optional) CA certificate ID. This parameter is mandatory when protocol is set to HTTPS and bidirectional authentication is used.

* `type` - (Optional) Type: searchTool indicates that the load balancer is enabled or disabled for Elasticsearch/OpenSearch. viewTool indicates that the load balancer is enabled or disabled for Kibana/OpenSearch Dashboards. The default value is searchTool.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

please add more attributes which is computed, like:

region
server_cert_name
ca_cert_name
elb_enabled
authentication_type
loadbalancer
health_monitors

and add import feature

Original file line number Diff line number Diff line change
@@ -0,0 +1,163 @@
package acceptance

import (
"fmt"
"os"
"testing"

"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
"github.com/opentelekomcloud/gophertelekomcloud/openstack/css/v1/load_balancer"
"github.com/opentelekomcloud/terraform-provider-opentelekomcloud/opentelekomcloud/acceptance/common"
"github.com/opentelekomcloud/terraform-provider-opentelekomcloud/opentelekomcloud/acceptance/env"
"github.com/opentelekomcloud/terraform-provider-opentelekomcloud/opentelekomcloud/common/cfg"
)

// getCssLoadBalancerFunc loads the CSS load balancer config from the remote API
func getCssLoadBalancerFunc(conf *cfg.Config, state *terraform.ResourceState) (interface{}, error) {
client, err := conf.CssV1Client(env.OS_REGION_NAME)
if err != nil {
return nil, fmt.Errorf("error creating CSS v1 client: %s", err)
}

clusterID := os.Getenv("OS_CSS_CLUSTER_ID")
if clusterID == "" {
return nil, fmt.Errorf("environment variable OS_CSS_CLUSTER_ID is not set")
}

return load_balancer.Get(client, clusterID)
}

// TestAccCssLoadBalancerConfiguration_basic performs acceptance testing for CSS load balancer configuration
func TestAccCssLoadBalancerConfiguration_basic(t *testing.T) {
clusterID := os.Getenv("OS_CSS_CLUSTER_ID")
if clusterID == "" {
t.Skip("OS_CSS_CLUSTER_ID env var is not set")
}

var obj load_balancer.LoadBalancerResp
rName := "opentelekomcloud_css_loadbalancer_v1.css_lb"
rc := common.InitResourceCheck(
rName,
&obj,
getCssLoadBalancerFunc,
)

resource.ParallelTest(t, resource.TestCase{
PreCheck: func() { common.TestAccPreCheck(t) },
ProviderFactories: common.TestAccProviderFactories,
CheckDestroy: checkCssLoadBalancerDisable,
Steps: []resource.TestStep{
{
Config: testCssLoadBalancerV1_basic(clusterID),
Check: resource.ComposeTestCheckFunc(
rc.CheckResourceExists(),
resource.TestCheckResourceAttr(rName, "cluster_id", clusterID),
resource.TestCheckResourceAttr(rName, "agency", "css_upgrade_agency"),
),
},
{
Config: testCssLoadBalancerV1_update(clusterID),
Check: resource.ComposeTestCheckFunc(
rc.CheckResourceExists(),
resource.TestCheckResourceAttr(rName, "cluster_id", clusterID),
resource.TestCheckResourceAttr(rName, "agency", "css_upgrade_agency"),
),
},
{
Config: testCssLoadBalancerV1_update2(clusterID),
Check: resource.ComposeTestCheckFunc(
rc.CheckResourceExists(),
resource.TestCheckResourceAttr(rName, "cluster_id", clusterID),
resource.TestCheckResourceAttr(rName, "agency", "css_upgrade_agency"),
),
},
{
ResourceName: rName,
ImportState: true,
ImportStateVerify: true,
// Optionally provide ImportStateIdFunc if import ID differs from default
},
},
})
}

// testCssLoadBalancerV1_basic returns Terraform config string for the basic configuration
func testCssLoadBalancerV1_basic(clusterID string) string {
return fmt.Sprintf(`
variable "elb_id" {}
variable "server_cert_id" {}

resource "opentelekomcloud_css_loadbalancer_v1" "css_lb" {
cluster_id = "%s"
elb_id = var.elb_id
agency = "css_upgrade_agency"

listener {
protocol = "HTTPS"
protocol_port = 443
server_cert_id = var.server_cert_id
}
}
`, clusterID)
}

// testCssLoadBalancerV1_update returns updated Terraform config (without listener block)
func testCssLoadBalancerV1_update(clusterID string) string {
return fmt.Sprintf(`
variable "elb_id" {}

resource "opentelekomcloud_css_loadbalancer_v1" "css_lb" {
cluster_id = "%s"
elb_id = var.elb_id
agency = "css_upgrade_agency"
}
`, clusterID)
}

// testCssLoadBalancerV1_update2 returns updated Terraform config (re-adding listener block)
func testCssLoadBalancerV1_update2(clusterID string) string {
return fmt.Sprintf(`
variable "elb_id" {}
variable "server_cert_id" {}

resource "opentelekomcloud_css_loadbalancer_v1" "css_lb" {
cluster_id = "%s"
elb_id = var.elb_id
agency = "css_upgrade_agency"

listener {
protocol = "HTTPS"
protocol_port = 443
server_cert_id = var.server_cert_id
}
}
`, clusterID)
}

// checkCssLoadBalancerDisable verifies that the load balancer was disabled or removed
func checkCssLoadBalancerDisable(s *terraform.State) error {
config := common.TestAccProvider.Meta().(*cfg.Config)

client, err := config.CssV1Client(env.OS_REGION_NAME)
if err != nil {
return fmt.Errorf("error creating CSS v1 client: %s", err)
}

clusterID := os.Getenv("OS_CSS_CLUSTER_ID")
if clusterID == "" {
return fmt.Errorf("environment variable OS_CSS_CLUSTER_ID is not set")
}

details, err := load_balancer.Get(client, clusterID)
if err != nil {
// Assuming a 404 or not found means it's destroyed
return nil
}

if details.Enabled {
return fmt.Errorf("load_balancer is still enabled for cluster %s", clusterID)
}

return nil
}
1 change: 1 addition & 0 deletions opentelekomcloud/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -512,6 +512,7 @@ func Provider() *schema.Provider {
"opentelekomcloud_css_cluster_v1": css.ResourceCssClusterV1(),
"opentelekomcloud_css_cluster_restart_v1": css.ResourceCssClusterRestartV1(),
"opentelekomcloud_css_configuration_v1": css.ResourceCssConfigurationV1(),
"opentelekomcloud_css_loadbalancer_v1": css.ResourceCssLoadBalancerV1(),
"opentelekomcloud_css_snapshot_configuration_v1": css.ResourceCssSnapshotConfigurationV1(),
"opentelekomcloud_direct_connect_v2": dcaas.ResourceDirectConnectV2(),
"opentelekomcloud_dc_endpoint_group_v2": dcaas.ResourceDCEndpointGroupV2(),
Expand Down
Loading