Skip to content

Commit ca737ba

Browse files
committed
resource/alicloud_eais_instance: Support attribute environment_var, image and instance_name; New Resource: alicloud_eais_instance.
1 parent abd598c commit ca737ba

8 files changed

+1990
-99
lines changed

alicloud/provider.go

+1
Original file line numberDiff line numberDiff line change
@@ -895,6 +895,7 @@ func Provider() terraform.ResourceProvider {
895895
"alicloud_vpc_ipam_ipams": dataSourceAliCloudVpcIpamIpams(),
896896
},
897897
ResourcesMap: map[string]*schema.Resource{
898+
"alicloud_eais_client_instance_attachment": resourceAliCloudEaisClientInstanceAttachment(),
898899
"alicloud_oss_bucket_style": resourceAliCloudOssBucketStyle(),
899900
"alicloud_rocketmq_acl": resourceAliCloudRocketmqAcl(),
900901
"alicloud_rocketmq_account": resourceAliCloudRocketmqAccount(),
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,326 @@
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 resourceAliCloudEaisClientInstanceAttachment() *schema.Resource {
16+
return &schema.Resource{
17+
Create: resourceAliCloudEaisClientInstanceAttachmentCreate,
18+
Read: resourceAliCloudEaisClientInstanceAttachmentRead,
19+
Update: resourceAliCloudEaisClientInstanceAttachmentUpdate,
20+
Delete: resourceAliCloudEaisClientInstanceAttachmentDelete,
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+
"client_instance_id": {
31+
Type: schema.TypeString,
32+
Required: true,
33+
ForceNew: true,
34+
},
35+
"create_time": {
36+
Type: schema.TypeString,
37+
Computed: true,
38+
},
39+
"ei_instance_type": {
40+
Type: schema.TypeString,
41+
Optional: true,
42+
ForceNew: true,
43+
},
44+
"instance_id": {
45+
Type: schema.TypeString,
46+
Required: true,
47+
ForceNew: true,
48+
},
49+
"region_id": {
50+
Type: schema.TypeString,
51+
Computed: true,
52+
},
53+
"status": {
54+
Type: schema.TypeString,
55+
Optional: true,
56+
Computed: true,
57+
},
58+
},
59+
}
60+
}
61+
62+
func resourceAliCloudEaisClientInstanceAttachmentCreate(d *schema.ResourceData, meta interface{}) error {
63+
64+
client := meta.(*connectivity.AliyunClient)
65+
if v, ok := d.GetOk("category"); ok && InArray(fmt.Sprint(v), []string{"eais"}) {
66+
action := "AttachEai"
67+
var request map[string]interface{}
68+
var response map[string]interface{}
69+
query := make(map[string]interface{})
70+
var err error
71+
request = make(map[string]interface{})
72+
if v, ok := d.GetOk("instance_id"); ok {
73+
request["ElasticAcceleratedInstanceId"] = v
74+
}
75+
if v, ok := d.GetOk("client_instance_id"); ok {
76+
request["ClientInstanceId"] = v
77+
}
78+
request["RegionId"] = client.RegionId
79+
80+
wait := incrementalWait(3*time.Second, 5*time.Second)
81+
err = resource.Retry(d.Timeout(schema.TimeoutCreate), func() *resource.RetryError {
82+
response, err = client.RpcPost("eais", "2019-06-24", action, query, request, true)
83+
if err != nil {
84+
if NeedRetry(err) {
85+
wait()
86+
return resource.RetryableError(err)
87+
}
88+
return resource.NonRetryableError(err)
89+
}
90+
return nil
91+
})
92+
addDebug(action, response, request)
93+
94+
if err != nil {
95+
return WrapErrorf(err, DefaultErrorMsg, "alicloud_eais_client_instance_attachment", action, AlibabaCloudSdkGoERROR)
96+
}
97+
98+
d.SetId(fmt.Sprintf("%v:%v", response["ElasticAcceleratedInstanceId"], response["ClientInstanceId"]))
99+
100+
}
101+
102+
if v, ok := d.GetOk("category"); ok && InArray(fmt.Sprint(v), []string{"ei"}) {
103+
action := "AttachEaisEi"
104+
var request map[string]interface{}
105+
var response map[string]interface{}
106+
query := make(map[string]interface{})
107+
var err error
108+
request = make(map[string]interface{})
109+
if v, ok := d.GetOk("instance_id"); ok {
110+
request["EiInstanceId"] = v
111+
}
112+
if v, ok := d.GetOk("client_instance_id"); ok {
113+
request["ClientInstanceId"] = v
114+
}
115+
request["RegionId"] = client.RegionId
116+
117+
if v, ok := d.GetOk("ei_instance_type"); ok {
118+
request["EiInstanceType"] = v
119+
}
120+
wait := incrementalWait(3*time.Second, 5*time.Second)
121+
err = resource.Retry(d.Timeout(schema.TimeoutCreate), func() *resource.RetryError {
122+
response, err = client.RpcPost("eais", "2019-06-24", action, query, request, true)
123+
if err != nil {
124+
if NeedRetry(err) {
125+
wait()
126+
return resource.RetryableError(err)
127+
}
128+
return resource.NonRetryableError(err)
129+
}
130+
return nil
131+
})
132+
addDebug(action, response, request)
133+
134+
if err != nil {
135+
return WrapErrorf(err, DefaultErrorMsg, "alicloud_eais_client_instance_attachment", action, AlibabaCloudSdkGoERROR)
136+
}
137+
138+
d.SetId(fmt.Sprintf("%v:%v", response["EiInstanceId"], response["ClientInstanceId"]))
139+
140+
}
141+
142+
return resourceAliCloudEaisClientInstanceAttachmentUpdate(d, meta)
143+
}
144+
145+
func resourceAliCloudEaisClientInstanceAttachmentRead(d *schema.ResourceData, meta interface{}) error {
146+
client := meta.(*connectivity.AliyunClient)
147+
eaisServiceV2 := EaisServiceV2{client}
148+
149+
objectRaw, err := eaisServiceV2.DescribeEaisClientInstanceAttachment(d.Id())
150+
if err != nil {
151+
if !d.IsNewResource() && NotFoundError(err) {
152+
log.Printf("[DEBUG] Resource alicloud_eais_client_instance_attachment DescribeEaisClientInstanceAttachment Failed!!! %s", err)
153+
d.SetId("")
154+
return nil
155+
}
156+
return WrapError(err)
157+
}
158+
159+
d.Set("create_time", objectRaw["StartTime"])
160+
d.Set("ei_instance_type", objectRaw["InstanceType"])
161+
d.Set("region_id", objectRaw["RegionId"])
162+
d.Set("status", objectRaw["Status"])
163+
d.Set("client_instance_id", objectRaw["ClientInstanceId"])
164+
d.Set("instance_id", objectRaw["ElasticAcceleratedInstanceId"])
165+
166+
return nil
167+
}
168+
169+
func resourceAliCloudEaisClientInstanceAttachmentUpdate(d *schema.ResourceData, meta interface{}) error {
170+
client := meta.(*connectivity.AliyunClient)
171+
var request map[string]interface{}
172+
var response map[string]interface{}
173+
var query map[string]interface{}
174+
175+
if d.HasChange("status") {
176+
eaisServiceV2 := EaisServiceV2{client}
177+
object, err := eaisServiceV2.DescribeEaisClientInstanceAttachment(d.Id())
178+
if err != nil {
179+
return WrapError(err)
180+
}
181+
182+
target := d.Get("status").(string)
183+
if object["Status"].(string) != target {
184+
if target == "InUse" {
185+
parts := strings.Split(d.Id(), ":")
186+
action := "StartEaisEi"
187+
request = make(map[string]interface{})
188+
query = make(map[string]interface{})
189+
request["EiInstanceId"] = parts[0]
190+
request["RegionId"] = client.RegionId
191+
wait := incrementalWait(3*time.Second, 5*time.Second)
192+
err = resource.Retry(d.Timeout(schema.TimeoutUpdate), func() *resource.RetryError {
193+
response, err = client.RpcPost("eais", "2019-06-24", action, query, request, true)
194+
if err != nil {
195+
if NeedRetry(err) {
196+
wait()
197+
return resource.RetryableError(err)
198+
}
199+
return resource.NonRetryableError(err)
200+
}
201+
return nil
202+
})
203+
addDebug(action, response, request)
204+
if err != nil {
205+
return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR)
206+
}
207+
208+
}
209+
if target == "Bound" {
210+
parts := strings.Split(d.Id(), ":")
211+
action := "StopEaisEi"
212+
request = make(map[string]interface{})
213+
query = make(map[string]interface{})
214+
request["EiInstanceId"] = parts[0]
215+
request["RegionId"] = client.RegionId
216+
wait := incrementalWait(3*time.Second, 5*time.Second)
217+
err = resource.Retry(d.Timeout(schema.TimeoutUpdate), func() *resource.RetryError {
218+
response, err = client.RpcPost("eais", "2019-06-24", action, query, request, true)
219+
if err != nil {
220+
if NeedRetry(err) {
221+
wait()
222+
return resource.RetryableError(err)
223+
}
224+
return resource.NonRetryableError(err)
225+
}
226+
return nil
227+
})
228+
addDebug(action, response, request)
229+
if err != nil {
230+
return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR)
231+
}
232+
233+
}
234+
}
235+
}
236+
237+
return resourceAliCloudEaisClientInstanceAttachmentRead(d, meta)
238+
}
239+
240+
func resourceAliCloudEaisClientInstanceAttachmentDelete(d *schema.ResourceData, meta interface{}) error {
241+
242+
enableDelete := false
243+
if v, ok := d.GetOk("category"); ok {
244+
if InArray(fmt.Sprint(v), []string{"eais"}) {
245+
enableDelete = true
246+
}
247+
}
248+
if enableDelete {
249+
client := meta.(*connectivity.AliyunClient)
250+
parts := strings.Split(d.Id(), ":")
251+
action := "DetachEai"
252+
var request map[string]interface{}
253+
var response map[string]interface{}
254+
query := make(map[string]interface{})
255+
var err error
256+
request = make(map[string]interface{})
257+
request["ElasticAcceleratedInstanceId"] = parts[0]
258+
request["RegionId"] = client.RegionId
259+
260+
wait := incrementalWait(3*time.Second, 5*time.Second)
261+
err = resource.Retry(d.Timeout(schema.TimeoutDelete), func() *resource.RetryError {
262+
response, err = client.RpcPost("eais", "2019-06-24", action, query, request, true)
263+
264+
if err != nil {
265+
if NeedRetry(err) {
266+
wait()
267+
return resource.RetryableError(err)
268+
}
269+
return resource.NonRetryableError(err)
270+
}
271+
return nil
272+
})
273+
addDebug(action, response, request)
274+
275+
if err != nil {
276+
if NotFoundError(err) {
277+
return nil
278+
}
279+
return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR)
280+
}
281+
282+
}
283+
284+
enableDelete = false
285+
if v, ok := d.GetOk("category"); ok {
286+
if InArray(fmt.Sprint(v), []string{"ei"}) {
287+
enableDelete = true
288+
}
289+
}
290+
if enableDelete {
291+
client := meta.(*connectivity.AliyunClient)
292+
parts := strings.Split(d.Id(), ":")
293+
action := "DetachEaisEi"
294+
var request map[string]interface{}
295+
var response map[string]interface{}
296+
query := make(map[string]interface{})
297+
var err error
298+
request = make(map[string]interface{})
299+
request["EiInstanceId"] = parts[0]
300+
request["RegionId"] = client.RegionId
301+
302+
wait := incrementalWait(3*time.Second, 5*time.Second)
303+
err = resource.Retry(d.Timeout(schema.TimeoutDelete), func() *resource.RetryError {
304+
response, err = client.RpcPost("eais", "2019-06-24", action, query, request, true)
305+
306+
if err != nil {
307+
if NeedRetry(err) {
308+
wait()
309+
return resource.RetryableError(err)
310+
}
311+
return resource.NonRetryableError(err)
312+
}
313+
return nil
314+
})
315+
addDebug(action, response, request)
316+
317+
if err != nil {
318+
if NotFoundError(err) {
319+
return nil
320+
}
321+
return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR)
322+
}
323+
324+
}
325+
return nil
326+
}

0 commit comments

Comments
 (0)