Skip to content

Commit 7a1c6fb

Browse files
committed
New Resource: alicloud_esa_kv.
1 parent cbf65e2 commit 7a1c6fb

File tree

5 files changed

+661
-0
lines changed

5 files changed

+661
-0
lines changed

alicloud/provider.go

+1
Original file line numberDiff line numberDiff line change
@@ -896,6 +896,7 @@ func Provider() terraform.ResourceProvider {
896896
"alicloud_vpc_ipam_ipams": dataSourceAliCloudVpcIpamIpams(),
897897
},
898898
ResourcesMap: map[string]*schema.Resource{
899+
"alicloud_esa_kv": resourceAliCloudEsaKv(),
899900
"alicloud_esa_scheduled_preload_execution": resourceAliCloudEsaScheduledPreloadExecution(),
900901
"alicloud_sls_etl": resourceAliCloudSlsEtl(),
901902
"alicloud_esa_scheduled_preload_job": resourceAliCloudEsaScheduledPreloadJob(),

alicloud/resource_alicloud_esa_kv.go

+305
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,305 @@
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+
"strings"
8+
"time"
9+
10+
"github.com/aliyun/terraform-provider-alicloud/alicloud/connectivity"
11+
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
12+
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
13+
)
14+
15+
func resourceAliCloudEsaKv() *schema.Resource {
16+
return &schema.Resource{
17+
Create: resourceAliCloudEsaKvCreate,
18+
Read: resourceAliCloudEsaKvRead,
19+
Update: resourceAliCloudEsaKvUpdate,
20+
Delete: resourceAliCloudEsaKvDelete,
21+
Importer: &schema.ResourceImporter{
22+
State: schema.ImportStatePassthrough,
23+
},
24+
Timeouts: &schema.ResourceTimeout{
25+
Create: schema.DefaultTimeout(5 * time.Minute),
26+
Update: schema.DefaultTimeout(5 * time.Minute),
27+
Delete: schema.DefaultTimeout(5 * time.Minute),
28+
},
29+
Schema: map[string]*schema.Schema{
30+
"expiration": {
31+
Type: schema.TypeInt,
32+
Optional: true,
33+
},
34+
"expiration_ttl": {
35+
Type: schema.TypeInt,
36+
Optional: true,
37+
},
38+
"isbase": {
39+
Type: schema.TypeBool,
40+
Optional: true,
41+
},
42+
"key": {
43+
Type: schema.TypeString,
44+
Required: true,
45+
ForceNew: true,
46+
},
47+
"namespace": {
48+
Type: schema.TypeString,
49+
Required: true,
50+
ForceNew: true,
51+
},
52+
"url": {
53+
Type: schema.TypeString,
54+
Optional: true,
55+
},
56+
"value": {
57+
Type: schema.TypeString,
58+
Optional: true,
59+
Computed: true,
60+
},
61+
},
62+
}
63+
}
64+
65+
func resourceAliCloudEsaKvCreate(d *schema.ResourceData, meta interface{}) error {
66+
67+
client := meta.(*connectivity.AliyunClient)
68+
invalidCreate := false
69+
if _, ok := d.GetOk("url"); ok {
70+
invalidCreate = true
71+
}
72+
if !invalidCreate {
73+
74+
action := "PutKv"
75+
var request map[string]interface{}
76+
var response map[string]interface{}
77+
query := make(map[string]interface{})
78+
var err error
79+
request = make(map[string]interface{})
80+
if v, ok := d.GetOk("namespace"); ok {
81+
request["Namespace"] = v
82+
}
83+
if v, ok := d.GetOk("key"); ok {
84+
request["Key"] = v
85+
}
86+
request["RegionId"] = client.RegionId
87+
88+
if v, ok := d.GetOkExists("expiration_ttl"); ok {
89+
request["ExpirationTtl"] = v
90+
}
91+
if v, ok := d.GetOkExists("expiration"); ok {
92+
request["Expiration"] = v
93+
}
94+
if v, ok := d.GetOkExists("isbase"); ok {
95+
request["Base64"] = v
96+
}
97+
request["Value"] = d.Get("value")
98+
wait := incrementalWait(3*time.Second, 5*time.Second)
99+
err = resource.Retry(d.Timeout(schema.TimeoutCreate), func() *resource.RetryError {
100+
response, err = client.RpcPost("ESA", "2024-09-10", action, query, request, true)
101+
if err != nil {
102+
if NeedRetry(err) {
103+
wait()
104+
return resource.RetryableError(err)
105+
}
106+
return resource.NonRetryableError(err)
107+
}
108+
return nil
109+
})
110+
addDebug(action, response, request)
111+
112+
if err != nil {
113+
return WrapErrorf(err, DefaultErrorMsg, "alicloud_esa_kv", action, AlibabaCloudSdkGoERROR)
114+
}
115+
116+
d.SetId(fmt.Sprintf("%v:%v", request["Namespace"], request["Key"]))
117+
118+
}
119+
120+
invalidCreate = false
121+
if _, ok := d.GetOk("value"); ok {
122+
invalidCreate = true
123+
}
124+
if !invalidCreate {
125+
126+
action := "PutKvWithHighCapacity"
127+
var request map[string]interface{}
128+
var response map[string]interface{}
129+
query := make(map[string]interface{})
130+
var err error
131+
request = make(map[string]interface{})
132+
if v, ok := d.GetOk("namespace"); ok {
133+
request["Namespace"] = v
134+
}
135+
if v, ok := d.GetOk("key"); ok {
136+
request["Key"] = v
137+
}
138+
request["RegionId"] = client.RegionId
139+
140+
request["Url"] = d.Get("url")
141+
wait := incrementalWait(3*time.Second, 5*time.Second)
142+
err = resource.Retry(d.Timeout(schema.TimeoutCreate), func() *resource.RetryError {
143+
response, err = client.RpcPost("ESA", "2024-09-10", action, query, request, true)
144+
if err != nil {
145+
if NeedRetry(err) {
146+
wait()
147+
return resource.RetryableError(err)
148+
}
149+
return resource.NonRetryableError(err)
150+
}
151+
return nil
152+
})
153+
addDebug(action, response, request)
154+
155+
if err != nil {
156+
return WrapErrorf(err, DefaultErrorMsg, "alicloud_esa_kv", action, AlibabaCloudSdkGoERROR)
157+
}
158+
159+
d.SetId(fmt.Sprintf("%v:%v", request["Namespace"], request["Key"]))
160+
161+
}
162+
163+
return resourceAliCloudEsaKvRead(d, meta)
164+
}
165+
166+
func resourceAliCloudEsaKvRead(d *schema.ResourceData, meta interface{}) error {
167+
client := meta.(*connectivity.AliyunClient)
168+
esaServiceV2 := EsaServiceV2{client}
169+
170+
objectRaw, err := esaServiceV2.DescribeEsaKv(d.Id())
171+
if err != nil {
172+
if !d.IsNewResource() && NotFoundError(err) {
173+
log.Printf("[DEBUG] Resource alicloud_esa_kv DescribeEsaKv Failed!!! %s", err)
174+
d.SetId("")
175+
return nil
176+
}
177+
return WrapError(err)
178+
}
179+
180+
d.Set("value", objectRaw["Value"])
181+
182+
parts := strings.Split(d.Id(), ":")
183+
d.Set("namespace", parts[0])
184+
d.Set("key", parts[1])
185+
186+
return nil
187+
}
188+
189+
func resourceAliCloudEsaKvUpdate(d *schema.ResourceData, meta interface{}) error {
190+
client := meta.(*connectivity.AliyunClient)
191+
var request map[string]interface{}
192+
var response map[string]interface{}
193+
var query map[string]interface{}
194+
update := false
195+
d.Partial(true)
196+
197+
var err error
198+
parts := strings.Split(d.Id(), ":")
199+
action := "PutKv"
200+
request = make(map[string]interface{})
201+
query = make(map[string]interface{})
202+
request["Namespace"] = parts[0]
203+
request["Key"] = parts[1]
204+
request["RegionId"] = client.RegionId
205+
if v, ok := d.GetOk("expiration_ttl"); ok {
206+
request["ExpirationTtl"] = v
207+
}
208+
if v, ok := d.GetOk("expiration"); ok {
209+
request["Expiration"] = v
210+
}
211+
if v, ok := d.GetOk("isbase"); ok {
212+
request["Base64"] = v
213+
}
214+
if d.HasChange("value") {
215+
update = true
216+
}
217+
request["Value"] = d.Get("value")
218+
if update {
219+
wait := incrementalWait(3*time.Second, 5*time.Second)
220+
err = resource.Retry(d.Timeout(schema.TimeoutUpdate), func() *resource.RetryError {
221+
response, err = client.RpcPost("ESA", "2024-09-10", action, query, request, true)
222+
if err != nil {
223+
if NeedRetry(err) {
224+
wait()
225+
return resource.RetryableError(err)
226+
}
227+
return resource.NonRetryableError(err)
228+
}
229+
return nil
230+
})
231+
addDebug(action, response, request)
232+
if err != nil {
233+
return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR)
234+
}
235+
}
236+
update = false
237+
parts = strings.Split(d.Id(), ":")
238+
action = "PutKvWithHighCapacity"
239+
request = make(map[string]interface{})
240+
query = make(map[string]interface{})
241+
request["Namespace"] = parts[0]
242+
request["Key"] = parts[1]
243+
request["RegionId"] = client.RegionId
244+
request["Url"] = d.Get("url")
245+
if update {
246+
wait := incrementalWait(3*time.Second, 5*time.Second)
247+
err = resource.Retry(d.Timeout(schema.TimeoutUpdate), func() *resource.RetryError {
248+
response, err = client.RpcPost("ESA", "2024-09-10", action, query, request, true)
249+
if err != nil {
250+
if NeedRetry(err) {
251+
wait()
252+
return resource.RetryableError(err)
253+
}
254+
return resource.NonRetryableError(err)
255+
}
256+
return nil
257+
})
258+
addDebug(action, response, request)
259+
if err != nil {
260+
return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR)
261+
}
262+
}
263+
264+
d.Partial(false)
265+
return resourceAliCloudEsaKvRead(d, meta)
266+
}
267+
268+
func resourceAliCloudEsaKvDelete(d *schema.ResourceData, meta interface{}) error {
269+
270+
client := meta.(*connectivity.AliyunClient)
271+
parts := strings.Split(d.Id(), ":")
272+
action := "DeleteKv"
273+
var request map[string]interface{}
274+
var response map[string]interface{}
275+
query := make(map[string]interface{})
276+
var err error
277+
request = make(map[string]interface{})
278+
query["Namespace"] = parts[0]
279+
query["Key"] = parts[1]
280+
query["RegionId"] = client.RegionId
281+
282+
wait := incrementalWait(3*time.Second, 5*time.Second)
283+
err = resource.Retry(d.Timeout(schema.TimeoutDelete), func() *resource.RetryError {
284+
response, err = client.RpcGet("ESA", "2024-09-10", action, query, request)
285+
286+
if err != nil {
287+
if NeedRetry(err) {
288+
wait()
289+
return resource.RetryableError(err)
290+
}
291+
return resource.NonRetryableError(err)
292+
}
293+
return nil
294+
})
295+
addDebug(action, response, request)
296+
297+
if err != nil {
298+
if NotFoundError(err) {
299+
return nil
300+
}
301+
return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR)
302+
}
303+
304+
return nil
305+
}

0 commit comments

Comments
 (0)