Skip to content

Commit

Permalink
New Resource: alicloud_gwlb_load_balancer; New Resource: alicloud_gwl…
Browse files Browse the repository at this point in the history
…b_server_group; New Resource: alicloud_gwlb_listener.
  • Loading branch information
ChenHanZhang committed Nov 13, 2024
1 parent d0719a1 commit aef9a82
Show file tree
Hide file tree
Showing 12 changed files with 3,973 additions and 0 deletions.
24 changes: 24 additions & 0 deletions alicloud/connectivity/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -5673,3 +5673,27 @@ func (client *AliyunClient) NewPaiworkspaceClient() (*roa.Client, error) {
}
return conn, nil
}
func (client *AliyunClient) NewGwlbClient() (*rpc.Client, error) {
productCode := "gwlb"
endpoint := ""
if v, ok := client.config.Endpoints.Load(productCode); !ok || v.(string) == "" {
if err := client.loadEndpoint(productCode); err != nil {
endpoint = fmt.Sprintf("gwlb.%s.aliyuncs.com", client.config.RegionId)
client.config.Endpoints.Store(productCode, endpoint)
log.Printf("[ERROR] loading %s endpoint got an error: %#v. Using the endpoint %s instead.", productCode, err, endpoint)
}
}
if v, ok := client.config.Endpoints.Load(productCode); ok && v.(string) != "" {
endpoint = v.(string)
}
if endpoint == "" {
return nil, fmt.Errorf("[ERROR] missing the product %s endpoint.", productCode)
}
sdkConfig := client.teaSdkConfig
sdkConfig.SetEndpoint(endpoint)
conn, err := rpc.NewClient(&sdkConfig)
if err != nil {
return nil, fmt.Errorf("unable to initialize the %s client: %#v", productCode, err)
}
return conn, nil
}
3 changes: 3 additions & 0 deletions alicloud/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -871,6 +871,9 @@ func Provider() terraform.ResourceProvider {
"alicloud_cms_site_monitors": dataSourceAliCloudCloudMonitorServiceSiteMonitors(),
},
ResourcesMap: map[string]*schema.Resource{
"alicloud_gwlb_server_group": resourceAliCloudGwlbServerGroup(),
"alicloud_gwlb_listener": resourceAliCloudGwlbListener(),
"alicloud_gwlb_load_balancer": resourceAliCloudGwlbLoadBalancer(),
"alicloud_pai_workspace_workspace": resourceAliCloudPaiWorkspaceWorkspace(),
"alicloud_gpdb_database": resourceAliCloudGpdbDatabase(),
"alicloud_sls_collection_policy": resourceAliCloudSlsCollectionPolicy(),
Expand Down
271 changes: 271 additions & 0 deletions alicloud/resource_alicloud_gwlb_listener.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,271 @@
// Package alicloud. This file is generated automatically. Please do not modify it manually, thank you!
package alicloud

import (
"fmt"
"log"
"time"

util "github.com/alibabacloud-go/tea-utils/service"
"github.com/aliyun/terraform-provider-alicloud/alicloud/connectivity"
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
)

func resourceAliCloudGwlbListener() *schema.Resource {
return &schema.Resource{
Create: resourceAliCloudGwlbListenerCreate,
Read: resourceAliCloudGwlbListenerRead,
Update: resourceAliCloudGwlbListenerUpdate,
Delete: resourceAliCloudGwlbListenerDelete,
Importer: &schema.ResourceImporter{
State: schema.ImportStatePassthrough,
},
Timeouts: &schema.ResourceTimeout{
Create: schema.DefaultTimeout(5 * time.Minute),
Update: schema.DefaultTimeout(5 * time.Minute),
Delete: schema.DefaultTimeout(5 * time.Minute),
},
Schema: map[string]*schema.Schema{
"dry_run": {
Type: schema.TypeBool,
Optional: true,
},
"listener_description": {
Type: schema.TypeString,
Optional: true,
},
"load_balancer_id": {
Type: schema.TypeString,
Required: true,
ForceNew: true,
},
"region_id": {
Type: schema.TypeString,
Computed: true,
},
"server_group_id": {
Type: schema.TypeString,
Required: true,
},
"status": {
Type: schema.TypeString,
Computed: true,
},
"tags": tagsSchema(),
},
}
}

func resourceAliCloudGwlbListenerCreate(d *schema.ResourceData, meta interface{}) error {

client := meta.(*connectivity.AliyunClient)

action := "CreateListener"
var request map[string]interface{}
var response map[string]interface{}
query := make(map[string]interface{})
conn, err := client.NewGwlbClient()
if err != nil {
return WrapError(err)
}
request = make(map[string]interface{})
request["RegionId"] = client.RegionId
request["ClientToken"] = buildClientToken(action)

if v, ok := d.GetOk("tags"); ok {
tagsMap := ConvertTags(v.(map[string]interface{}))
request["Tags"] = tagsMap
}

if v, ok := d.GetOkExists("dry_run"); ok {
request["DryRun"] = v
}
request["LoadBalancerId"] = d.Get("load_balancer_id")
if v, ok := d.GetOk("listener_description"); ok {
request["ListenerDescription"] = v
}
request["ServerGroupId"] = d.Get("server_group_id")
runtime := util.RuntimeOptions{}
runtime.SetAutoretry(true)
wait := incrementalWait(3*time.Second, 5*time.Second)
err = resource.Retry(d.Timeout(schema.TimeoutCreate), func() *resource.RetryError {
response, err = conn.DoRequest(StringPointer(action), nil, StringPointer("POST"), StringPointer("2024-04-15"), StringPointer("AK"), query, request, &runtime)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
return nil
})
addDebug(action, response, request)

if err != nil {
return WrapErrorf(err, DefaultErrorMsg, "alicloud_gwlb_listener", action, AlibabaCloudSdkGoERROR)
}

d.SetId(fmt.Sprint(response["ListenerId"]))

gwlbServiceV2 := GwlbServiceV2{client}
stateConf := BuildStateConf([]string{}, []string{"Running"}, d.Timeout(schema.TimeoutCreate), 5*time.Second, gwlbServiceV2.GwlbListenerStateRefreshFunc(d.Id(), "ListenerStatus", []string{}))
if _, err := stateConf.WaitForState(); err != nil {
return WrapErrorf(err, IdMsg, d.Id())
}

return resourceAliCloudGwlbListenerRead(d, meta)
}

func resourceAliCloudGwlbListenerRead(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AliyunClient)
gwlbServiceV2 := GwlbServiceV2{client}

objectRaw, err := gwlbServiceV2.DescribeGwlbListener(d.Id())
if err != nil {
if !d.IsNewResource() && NotFoundError(err) {
log.Printf("[DEBUG] Resource alicloud_gwlb_listener DescribeGwlbListener Failed!!! %s", err)
d.SetId("")
return nil
}
return WrapError(err)
}

if objectRaw["ListenerDescription"] != nil {
d.Set("listener_description", objectRaw["ListenerDescription"])
}
if objectRaw["LoadBalancerId"] != nil {
d.Set("load_balancer_id", objectRaw["LoadBalancerId"])
}
if objectRaw["RegionId"] != nil {
d.Set("region_id", objectRaw["RegionId"])
}
if objectRaw["ServerGroupId"] != nil {
d.Set("server_group_id", objectRaw["ServerGroupId"])
}
if objectRaw["ListenerStatus"] != nil {
d.Set("status", objectRaw["ListenerStatus"])
}

tagsMaps := objectRaw["Tags"]
d.Set("tags", tagsToMap(tagsMaps))

return nil
}

func resourceAliCloudGwlbListenerUpdate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AliyunClient)
var request map[string]interface{}
var response map[string]interface{}
var query map[string]interface{}
update := false
action := "UpdateListenerAttribute"
conn, err := client.NewGwlbClient()
if err != nil {
return WrapError(err)
}
request = make(map[string]interface{})
query = make(map[string]interface{})
request["ListenerId"] = d.Id()
request["RegionId"] = client.RegionId
request["ClientToken"] = buildClientToken(action)
if v, ok := d.GetOkExists("dry_run"); ok {
request["DryRun"] = v
}
if d.HasChange("listener_description") {
update = true
request["ListenerDescription"] = d.Get("listener_description")
}

if d.HasChange("server_group_id") {
update = true
}
request["ServerGroupId"] = d.Get("server_group_id")
if update {
runtime := util.RuntimeOptions{}
runtime.SetAutoretry(true)
wait := incrementalWait(3*time.Second, 5*time.Second)
err = resource.Retry(d.Timeout(schema.TimeoutUpdate), func() *resource.RetryError {
response, err = conn.DoRequest(StringPointer(action), nil, StringPointer("POST"), StringPointer("2024-04-15"), StringPointer("AK"), query, request, &runtime)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
return nil
})
addDebug(action, response, request)
if err != nil {
return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR)
}
gwlbServiceV2 := GwlbServiceV2{client}
stateConf := BuildStateConf([]string{}, []string{"Running"}, d.Timeout(schema.TimeoutUpdate), 5*time.Second, gwlbServiceV2.GwlbListenerStateRefreshFunc(d.Id(), "ListenerStatus", []string{}))
if _, err := stateConf.WaitForState(); err != nil {
return WrapErrorf(err, IdMsg, d.Id())
}
}

if d.HasChange("tags") {
gwlbServiceV2 := GwlbServiceV2{client}
if err := gwlbServiceV2.SetResourceTags(d, "listener"); err != nil {
return WrapError(err)
}
}
return resourceAliCloudGwlbListenerRead(d, meta)
}

func resourceAliCloudGwlbListenerDelete(d *schema.ResourceData, meta interface{}) error {

client := meta.(*connectivity.AliyunClient)
action := "DeleteListener"
var request map[string]interface{}
var response map[string]interface{}
query := make(map[string]interface{})
conn, err := client.NewGwlbClient()
if err != nil {
return WrapError(err)
}
request = make(map[string]interface{})
request["ListenerId"] = d.Id()
request["RegionId"] = client.RegionId

request["ClientToken"] = buildClientToken(action)

if v, ok := d.GetOkExists("dry_run"); ok {
request["DryRun"] = v
}
runtime := util.RuntimeOptions{}
runtime.SetAutoretry(true)
wait := incrementalWait(3*time.Second, 5*time.Second)
err = resource.Retry(d.Timeout(schema.TimeoutDelete), func() *resource.RetryError {
response, err = conn.DoRequest(StringPointer(action), nil, StringPointer("POST"), StringPointer("2024-04-15"), StringPointer("AK"), query, request, &runtime)
request["ClientToken"] = buildClientToken(action)

if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
return nil
})
addDebug(action, response, request)

if err != nil {
if IsExpectedErrors(err, []string{"ResourceNotFound.Listener"}) || NotFoundError(err) {
return nil
}
return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR)
}

gwlbServiceV2 := GwlbServiceV2{client}
stateConf := BuildStateConf([]string{}, []string{}, d.Timeout(schema.TimeoutDelete), 5*time.Second, gwlbServiceV2.GwlbListenerStateRefreshFunc(d.Id(), "ListenerStatus", []string{}))
if _, err := stateConf.WaitForState(); err != nil {
return WrapErrorf(err, IdMsg, d.Id())
}

return nil
}
Loading

0 comments on commit aef9a82

Please sign in to comment.