Skip to content

Commit f9787ec

Browse files
LCLSpringChenHanZhang
authored andcommitted
New Resource: alicloud_alidns_cloud_gtm_address_pool
1 parent 8eb4845 commit f9787ec

5 files changed

Lines changed: 745 additions & 0 deletions

alicloud/provider.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -921,6 +921,7 @@ func Provider() terraform.ResourceProvider {
921921
"alicloud_cloud_firewall_vpc_firewall_control_policy_order": resourceAliCloudCloudFirewallVpcFirewallControlPolicyOrder(),
922922
"alicloud_cloud_firewall_nat_firewall_control_policy_order": resourceAliCloudCloudFirewallNatFirewallControlPolicyOrder(),
923923
"alicloud_esa_custom_response_code_rule": resourceAliCloudEsaCustomResponseCodeRule(),
924+
"alicloud_alidns_cloud_gtm_address_pool": resourceAliCloudAlidnsCloudGtmAddressPool(),
924925
"alicloud_rds_custom_disk_attachment": resourceAliCloudRdsCustomDiskAttachment(),
925926
"alicloud_sls_logtail_pipeline_config": resourceAliCloudSlsLogtailPipelineConfig(),
926927
"alicloud_simple_application_server_disk": resourceAliCloudSimpleApplicationServerDisk(),
Lines changed: 314 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,314 @@
1+
// Package alicloud. This file is generated automatically. Please do not modify it manually, thank you!
2+
package alicloud
3+
4+
import (
5+
"fmt"
6+
"log"
7+
"time"
8+
9+
"github.com/aliyun/terraform-provider-alicloud/alicloud/connectivity"
10+
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
11+
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
12+
)
13+
14+
func resourceAliCloudAlidnsCloudGtmAddressPool() *schema.Resource {
15+
return &schema.Resource{
16+
Create: resourceAliCloudAlidnsCloudGtmAddressPoolCreate,
17+
Read: resourceAliCloudAlidnsCloudGtmAddressPoolRead,
18+
Update: resourceAliCloudAlidnsCloudGtmAddressPoolUpdate,
19+
Delete: resourceAliCloudAlidnsCloudGtmAddressPoolDelete,
20+
Importer: &schema.ResourceImporter{
21+
State: schema.ImportStatePassthrough,
22+
},
23+
Timeouts: &schema.ResourceTimeout{
24+
Create: schema.DefaultTimeout(5 * time.Minute),
25+
Update: schema.DefaultTimeout(5 * time.Minute),
26+
Delete: schema.DefaultTimeout(5 * time.Minute),
27+
},
28+
Schema: map[string]*schema.Schema{
29+
"address_lb_strategy": {
30+
Type: schema.TypeString,
31+
Optional: true,
32+
ValidateFunc: StringInSlice([]string{"round_robin", "sequence", "weight", "source_nearest"}, false),
33+
},
34+
"address_pool_name": {
35+
Type: schema.TypeString,
36+
Required: true,
37+
},
38+
"address_pool_type": {
39+
Type: schema.TypeString,
40+
Required: true,
41+
ForceNew: true,
42+
ValidateFunc: StringInSlice([]string{"IPv4", "IPv6", "domain"}, false),
43+
},
44+
"create_time": {
45+
Type: schema.TypeString,
46+
Computed: true,
47+
},
48+
"enable_status": {
49+
Type: schema.TypeString,
50+
Required: true,
51+
ValidateFunc: StringInSlice([]string{"enable", "disable"}, false),
52+
},
53+
"health_judgement": {
54+
Type: schema.TypeString,
55+
Required: true,
56+
ValidateFunc: StringInSlice([]string{"any_ok", "p30_ok", "p50_ok", "p70_ok", "all_ok"}, false),
57+
},
58+
"remark": {
59+
Type: schema.TypeString,
60+
Optional: true,
61+
},
62+
"sequence_lb_strategy_mode": {
63+
Type: schema.TypeString,
64+
Optional: true,
65+
ValidateFunc: StringInSlice([]string{"preemptive", "nonPreemptive"}, false),
66+
},
67+
},
68+
}
69+
}
70+
71+
func resourceAliCloudAlidnsCloudGtmAddressPoolCreate(d *schema.ResourceData, meta interface{}) error {
72+
73+
client := meta.(*connectivity.AliyunClient)
74+
75+
action := "CreateCloudGtmAddressPool"
76+
var request map[string]interface{}
77+
var response map[string]interface{}
78+
query := make(map[string]interface{})
79+
var err error
80+
request = make(map[string]interface{})
81+
82+
request["ClientToken"] = buildClientToken(action)
83+
84+
request["EnableStatus"] = d.Get("enable_status")
85+
if v, ok := d.GetOk("remark"); ok {
86+
request["Remark"] = v
87+
}
88+
request["AddressPoolName"] = d.Get("address_pool_name")
89+
request["AddressPoolType"] = d.Get("address_pool_type")
90+
request["HealthJudgement"] = d.Get("health_judgement")
91+
wait := incrementalWait(3*time.Second, 5*time.Second)
92+
err = resource.Retry(d.Timeout(schema.TimeoutCreate), func() *resource.RetryError {
93+
response, err = client.RpcPost("Alidns", "2015-01-09", action, query, request, true)
94+
if err != nil {
95+
if NeedRetry(err) {
96+
wait()
97+
return resource.RetryableError(err)
98+
}
99+
return resource.NonRetryableError(err)
100+
}
101+
return nil
102+
})
103+
addDebug(action, response, request)
104+
105+
if err != nil {
106+
return WrapErrorf(err, DefaultErrorMsg, "alicloud_alidns_cloud_gtm_address_pool", action, AlibabaCloudSdkGoERROR)
107+
}
108+
109+
d.SetId(fmt.Sprint(response["AddressPoolId"]))
110+
111+
return resourceAliCloudAlidnsCloudGtmAddressPoolUpdate(d, meta)
112+
}
113+
114+
func resourceAliCloudAlidnsCloudGtmAddressPoolRead(d *schema.ResourceData, meta interface{}) error {
115+
client := meta.(*connectivity.AliyunClient)
116+
alidnsServiceV2 := AlidnsServiceV2{client}
117+
118+
objectRaw, err := alidnsServiceV2.DescribeAlidnsCloudGtmAddressPool(d.Id())
119+
if err != nil {
120+
if !d.IsNewResource() && NotFoundError(err) {
121+
log.Printf("[DEBUG] Resource alicloud_alidns_cloud_gtm_address_pool DescribeAlidnsCloudGtmAddressPool Failed!!! %s", err)
122+
d.SetId("")
123+
return nil
124+
}
125+
return WrapError(err)
126+
}
127+
128+
d.Set("address_lb_strategy", objectRaw["AddressLbStrategy"])
129+
d.Set("address_pool_name", objectRaw["AddressPoolName"])
130+
d.Set("address_pool_type", objectRaw["AddressPoolType"])
131+
d.Set("create_time", objectRaw["CreateTime"])
132+
d.Set("enable_status", objectRaw["EnableStatus"])
133+
d.Set("health_judgement", objectRaw["HealthJudgement"])
134+
d.Set("remark", objectRaw["Remark"])
135+
d.Set("sequence_lb_strategy_mode", objectRaw["SequenceLbStrategyMode"])
136+
137+
return nil
138+
}
139+
140+
func resourceAliCloudAlidnsCloudGtmAddressPoolUpdate(d *schema.ResourceData, meta interface{}) error {
141+
client := meta.(*connectivity.AliyunClient)
142+
var request map[string]interface{}
143+
var response map[string]interface{}
144+
var query map[string]interface{}
145+
update := false
146+
d.Partial(true)
147+
148+
var err error
149+
action := "UpdateCloudGtmAddressPoolBasicConfig"
150+
request = make(map[string]interface{})
151+
query = make(map[string]interface{})
152+
request["AddressPoolId"] = d.Id()
153+
154+
request["ClientToken"] = buildClientToken(action)
155+
if !d.IsNewResource() && d.HasChange("address_pool_name") {
156+
update = true
157+
}
158+
request["AddressPoolName"] = d.Get("address_pool_name")
159+
if !d.IsNewResource() && d.HasChange("health_judgement") {
160+
update = true
161+
}
162+
request["HealthJudgement"] = d.Get("health_judgement")
163+
if update {
164+
wait := incrementalWait(3*time.Second, 5*time.Second)
165+
err = resource.Retry(d.Timeout(schema.TimeoutUpdate), func() *resource.RetryError {
166+
response, err = client.RpcPost("Alidns", "2015-01-09", action, query, request, true)
167+
if err != nil {
168+
if NeedRetry(err) {
169+
wait()
170+
return resource.RetryableError(err)
171+
}
172+
return resource.NonRetryableError(err)
173+
}
174+
return nil
175+
})
176+
addDebug(action, response, request)
177+
if err != nil {
178+
return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR)
179+
}
180+
}
181+
update = false
182+
action = "UpdateCloudGtmAddressPoolEnableStatus"
183+
request = make(map[string]interface{})
184+
query = make(map[string]interface{})
185+
request["AddressPoolId"] = d.Id()
186+
187+
request["ClientToken"] = buildClientToken(action)
188+
if !d.IsNewResource() && d.HasChange("enable_status") {
189+
update = true
190+
}
191+
request["EnableStatus"] = d.Get("enable_status")
192+
if update {
193+
wait := incrementalWait(3*time.Second, 5*time.Second)
194+
err = resource.Retry(d.Timeout(schema.TimeoutUpdate), func() *resource.RetryError {
195+
response, err = client.RpcPost("Alidns", "2015-01-09", action, query, request, true)
196+
if err != nil {
197+
if NeedRetry(err) {
198+
wait()
199+
return resource.RetryableError(err)
200+
}
201+
return resource.NonRetryableError(err)
202+
}
203+
return nil
204+
})
205+
addDebug(action, response, request)
206+
if err != nil {
207+
return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR)
208+
}
209+
}
210+
update = false
211+
action = "UpdateCloudGtmAddressPoolLbStrategy"
212+
request = make(map[string]interface{})
213+
query = make(map[string]interface{})
214+
request["AddressPoolId"] = d.Id()
215+
216+
request["ClientToken"] = buildClientToken(action)
217+
if d.HasChange("sequence_lb_strategy_mode") {
218+
update = true
219+
request["SequenceLbStrategyMode"] = d.Get("sequence_lb_strategy_mode")
220+
}
221+
222+
if d.HasChange("address_lb_strategy") {
223+
update = true
224+
}
225+
request["AddressLbStrategy"] = d.Get("address_lb_strategy")
226+
if update {
227+
wait := incrementalWait(3*time.Second, 5*time.Second)
228+
err = resource.Retry(d.Timeout(schema.TimeoutUpdate), func() *resource.RetryError {
229+
response, err = client.RpcPost("Alidns", "2015-01-09", action, query, request, true)
230+
if err != nil {
231+
if NeedRetry(err) {
232+
wait()
233+
return resource.RetryableError(err)
234+
}
235+
return resource.NonRetryableError(err)
236+
}
237+
return nil
238+
})
239+
addDebug(action, response, request)
240+
if err != nil {
241+
return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR)
242+
}
243+
}
244+
update = false
245+
action = "UpdateCloudGtmAddressPoolRemark"
246+
request = make(map[string]interface{})
247+
query = make(map[string]interface{})
248+
request["AddressPoolId"] = d.Id()
249+
250+
request["ClientToken"] = buildClientToken(action)
251+
if !d.IsNewResource() && d.HasChange("remark") {
252+
update = true
253+
request["Remark"] = d.Get("remark")
254+
}
255+
256+
if update {
257+
wait := incrementalWait(3*time.Second, 5*time.Second)
258+
err = resource.Retry(d.Timeout(schema.TimeoutUpdate), func() *resource.RetryError {
259+
response, err = client.RpcPost("Alidns", "2015-01-09", action, query, request, true)
260+
if err != nil {
261+
if NeedRetry(err) {
262+
wait()
263+
return resource.RetryableError(err)
264+
}
265+
return resource.NonRetryableError(err)
266+
}
267+
return nil
268+
})
269+
addDebug(action, response, request)
270+
if err != nil {
271+
return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR)
272+
}
273+
}
274+
275+
d.Partial(false)
276+
return resourceAliCloudAlidnsCloudGtmAddressPoolRead(d, meta)
277+
}
278+
279+
func resourceAliCloudAlidnsCloudGtmAddressPoolDelete(d *schema.ResourceData, meta interface{}) error {
280+
281+
client := meta.(*connectivity.AliyunClient)
282+
action := "DeleteCloudGtmAddressPool"
283+
var request map[string]interface{}
284+
var response map[string]interface{}
285+
query := make(map[string]interface{})
286+
var err error
287+
request = make(map[string]interface{})
288+
request["AddressPoolId"] = d.Id()
289+
290+
request["ClientToken"] = buildClientToken(action)
291+
292+
wait := incrementalWait(3*time.Second, 5*time.Second)
293+
err = resource.Retry(d.Timeout(schema.TimeoutDelete), func() *resource.RetryError {
294+
response, err = client.RpcPost("Alidns", "2015-01-09", action, query, request, true)
295+
if err != nil {
296+
if NeedRetry(err) {
297+
wait()
298+
return resource.RetryableError(err)
299+
}
300+
return resource.NonRetryableError(err)
301+
}
302+
return nil
303+
})
304+
addDebug(action, response, request)
305+
306+
if err != nil {
307+
if NotFoundError(err) {
308+
return nil
309+
}
310+
return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR)
311+
}
312+
313+
return nil
314+
}

0 commit comments

Comments
 (0)