Skip to content

Commit 6af6812

Browse files
authored
support mps flow resource (#2192)
* support mps flow resource * 1.add doc. 2.add chagnelog. 3. adjust format. * fix e2e issue * adjust setid logic.
1 parent 601a69d commit 6af6812

12 files changed

+1776
-0
lines changed

.changelog/2192.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
```release-note:new-resource
2+
tencentcloud_mps_flow
3+
```
4+
5+
```release-note:new-resource
6+
tencentcloud_mps_event
7+
```

tencentcloud/provider.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1602,6 +1602,8 @@ Media Processing Service(MPS)
16021602
tencentcloud_mps_word_sample
16031603
tencentcloud_mps_schedule
16041604
tencentcloud_mps_enable_schedule_config
1605+
tencentcloud_mps_flow
1606+
tencentcloud_mps_event
16051607
16061608
Cloud HDFS(CHDFS)
16071609
Data Source
@@ -3124,6 +3126,9 @@ func Provider() *schema.Provider {
31243126
"tencentcloud_tsf_unit_namespace": resourceTencentCloudTsfUnitNamespace(),
31253127
"tencentcloud_mps_workflow": resourceTencentCloudMpsWorkflow(),
31263128
"tencentcloud_mps_enable_workflow_config": resourceTencentCloudMpsEnableWorkflowConfig(),
3129+
"tencentcloud_mps_flow": resourceTencentCloudMpsFlow(),
3130+
"tencentcloud_mps_start_flow_operation": resourceTencentCloudMpsStartFlowOperation(),
3131+
"tencentcloud_mps_event": resourceTencentCloudMpsEvent(),
31273132
"tencentcloud_mps_transcode_template": resourceTencentCloudMpsTranscodeTemplate(),
31283133
"tencentcloud_mps_watermark_template": resourceTencentCloudMpsWatermarkTemplate(),
31293134
"tencentcloud_mps_image_sprite_template": resourceTencentCloudMpsImageSpriteTemplate(),
Lines changed: 191 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,191 @@
1+
/*
2+
Provides a resource to create a mps event
3+
4+
Example Usage
5+
6+
```hcl
7+
resource "tencentcloud_mps_event" "event" {
8+
event_name = "you-event-name"
9+
description = "event description"
10+
}
11+
```
12+
13+
Import
14+
15+
mps event can be imported using the id, e.g.
16+
17+
```
18+
terraform import tencentcloud_mps_event.event event_id
19+
```
20+
*/
21+
package tencentcloud
22+
23+
import (
24+
"context"
25+
"log"
26+
27+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
28+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
29+
mps "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mps/v20190612"
30+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
31+
)
32+
33+
func resourceTencentCloudMpsEvent() *schema.Resource {
34+
return &schema.Resource{
35+
Create: resourceTencentCloudMpsEventCreate,
36+
Read: resourceTencentCloudMpsEventRead,
37+
Update: resourceTencentCloudMpsEventUpdate,
38+
Delete: resourceTencentCloudMpsEventDelete,
39+
Importer: &schema.ResourceImporter{
40+
State: schema.ImportStatePassthrough,
41+
},
42+
Schema: map[string]*schema.Schema{
43+
"event_name": {
44+
Required: true,
45+
Type: schema.TypeString,
46+
Description: "Event name.",
47+
},
48+
49+
"description": {
50+
Optional: true,
51+
Type: schema.TypeString,
52+
Description: "Event description.",
53+
},
54+
},
55+
}
56+
}
57+
58+
func resourceTencentCloudMpsEventCreate(d *schema.ResourceData, meta interface{}) error {
59+
defer logElapsed("resource.tencentcloud_mps_event.create")()
60+
defer inconsistentCheck(d, meta)()
61+
62+
logId := getLogId(contextNil)
63+
64+
var (
65+
request = mps.NewCreateStreamLinkEventRequest()
66+
response = mps.NewCreateStreamLinkEventResponse()
67+
eventId string
68+
)
69+
if v, ok := d.GetOk("event_name"); ok {
70+
request.EventName = helper.String(v.(string))
71+
}
72+
73+
if v, ok := d.GetOk("description"); ok {
74+
request.Description = helper.String(v.(string))
75+
}
76+
77+
err := resource.Retry(writeRetryTimeout, func() *resource.RetryError {
78+
result, e := meta.(*TencentCloudClient).apiV3Conn.UseMpsClient().CreateStreamLinkEvent(request)
79+
if e != nil {
80+
return retryError(e)
81+
} else {
82+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
83+
}
84+
response = result
85+
return nil
86+
})
87+
if err != nil {
88+
log.Printf("[CRITAL]%s create mps event failed, reason:%+v", logId, err)
89+
return err
90+
}
91+
92+
if response.Response.Info != nil {
93+
eventId = *response.Response.Info.EventId
94+
}
95+
96+
d.SetId(eventId)
97+
98+
return resourceTencentCloudMpsEventRead(d, meta)
99+
}
100+
101+
func resourceTencentCloudMpsEventRead(d *schema.ResourceData, meta interface{}) error {
102+
defer logElapsed("resource.tencentcloud_mps_event.read")()
103+
defer inconsistentCheck(d, meta)()
104+
105+
logId := getLogId(contextNil)
106+
107+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
108+
109+
service := MpsService{client: meta.(*TencentCloudClient).apiV3Conn}
110+
111+
eventId := d.Id()
112+
113+
event, err := service.DescribeMpsEventById(ctx, eventId)
114+
if err != nil {
115+
return err
116+
}
117+
118+
if event == nil {
119+
d.SetId("")
120+
log.Printf("[WARN]%s resource `MpsEvent` [%s] not found, please check if it has been deleted.\n", logId, d.Id())
121+
return nil
122+
}
123+
124+
if event.EventName != nil {
125+
_ = d.Set("event_name", event.EventName)
126+
}
127+
128+
if event.Description != nil {
129+
_ = d.Set("description", event.Description)
130+
}
131+
132+
return nil
133+
}
134+
135+
func resourceTencentCloudMpsEventUpdate(d *schema.ResourceData, meta interface{}) error {
136+
defer logElapsed("resource.tencentcloud_mps_event.update")()
137+
defer inconsistentCheck(d, meta)()
138+
139+
logId := getLogId(contextNil)
140+
141+
request := mps.NewModifyStreamLinkEventRequest()
142+
143+
eventId := d.Id()
144+
145+
request.EventId = &eventId
146+
147+
if d.HasChange("event_name") {
148+
if v, ok := d.GetOk("event_name"); ok {
149+
request.EventName = helper.String(v.(string))
150+
}
151+
}
152+
153+
if d.HasChange("description") {
154+
if v, ok := d.GetOk("description"); ok {
155+
request.Description = helper.String(v.(string))
156+
}
157+
}
158+
159+
err := resource.Retry(writeRetryTimeout, func() *resource.RetryError {
160+
result, e := meta.(*TencentCloudClient).apiV3Conn.UseMpsClient().ModifyStreamLinkEvent(request)
161+
if e != nil {
162+
return retryError(e)
163+
} else {
164+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
165+
}
166+
return nil
167+
})
168+
if err != nil {
169+
log.Printf("[CRITAL]%s update mps event failed, reason:%+v", logId, err)
170+
return err
171+
}
172+
173+
return resourceTencentCloudMpsEventRead(d, meta)
174+
}
175+
176+
func resourceTencentCloudMpsEventDelete(d *schema.ResourceData, meta interface{}) error {
177+
defer logElapsed("resource.tencentcloud_mps_event.delete")()
178+
defer inconsistentCheck(d, meta)()
179+
180+
logId := getLogId(contextNil)
181+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
182+
183+
service := MpsService{client: meta.(*TencentCloudClient).apiV3Conn}
184+
eventId := d.Id()
185+
186+
if err := service.DeleteMpsEventById(ctx, eventId); err != nil {
187+
return err
188+
}
189+
190+
return nil
191+
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package tencentcloud
2+
3+
import (
4+
"fmt"
5+
"math/rand"
6+
"testing"
7+
"time"
8+
9+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
10+
)
11+
12+
func TestAccTencentCloudMpsEventResource_basic(t *testing.T) {
13+
t.Parallel()
14+
randIns := rand.New(rand.NewSource(time.Now().UnixNano()))
15+
randomNum := randIns.Intn(1000)
16+
resource.Test(t, resource.TestCase{
17+
PreCheck: func() {
18+
testAccPreCheck(t)
19+
},
20+
Providers: testAccProviders,
21+
Steps: []resource.TestStep{
22+
{
23+
Config: fmt.Sprintf(testAccMpsEvent, randomNum),
24+
Check: resource.ComposeTestCheckFunc(
25+
resource.TestCheckResourceAttrSet("tencentcloud_mps_event.event", "id"),
26+
resource.TestCheckResourceAttrSet("tencentcloud_mps_event.event", "event_name"),
27+
resource.TestCheckResourceAttr("tencentcloud_mps_event.event", "description", "tf test mps event description"),
28+
),
29+
},
30+
{
31+
Config: fmt.Sprintf(testAccMpsEvent_update, randomNum),
32+
Check: resource.ComposeTestCheckFunc(
33+
resource.TestCheckResourceAttrSet("tencentcloud_mps_event.event", "id"),
34+
resource.TestCheckResourceAttr("tencentcloud_mps_event.event", "event_name", fmt.Sprintf("tf_test_event_%d_changed", randomNum)),
35+
resource.TestCheckResourceAttr("tencentcloud_mps_event.event", "description", "tf test mps event description changed"),
36+
),
37+
},
38+
{
39+
ResourceName: "tencentcloud_mps_event.event",
40+
ImportState: true,
41+
ImportStateVerify: true,
42+
},
43+
},
44+
})
45+
}
46+
47+
const testAccMpsEvent = `
48+
49+
resource "tencentcloud_mps_event" "event" {
50+
event_name = "tf_test_event_%d"
51+
description = "tf test mps event description"
52+
}
53+
54+
`
55+
56+
const testAccMpsEvent_update = `
57+
58+
resource "tencentcloud_mps_event" "event" {
59+
event_name = "tf_test_event_%d_changed"
60+
description = "tf test mps event description changed"
61+
}
62+
63+
`

0 commit comments

Comments
 (0)