Skip to content

Commit 2c021ba

Browse files
author
mikatong
committed
add resource
1 parent 5a41484 commit 2c021ba

20 files changed

+2112
-2
lines changed

tencentcloud/provider.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2275,6 +2275,10 @@ func Provider() *schema.Provider {
22752275
"tencentcloud_waf_bot_status_config": waf.ResourceTencentCloudWafBotStatusConfig(),
22762276
"tencentcloud_waf_bot_scene_ucb_rule": waf.ResourceTencentCloudWafBotSceneUCBRule(),
22772277
"tencentcloud_waf_attack_white_rule": waf.ResourceTencentCloudWafAttackWhiteRule(),
2278+
"tencentcloud_wedata_workflow_folder": wedata.ResourceTencentCloudWedataWorkflowFolder(),
2279+
"tencentcloud_wedata_workflow": wedata.ResourceTencentCloudWedataWorkflow(),
2280+
"tencentcloud_wedata_resource_file": wedata.ResourceTencentCloudWedataResourceFile(),
2281+
"tencentcloud_wedata_resource_folder": wedata.ResourceTencentCloudWedataResourceFolder(),
22782282
"tencentcloud_wedata_rule_template": wedata.ResourceTencentCloudWedataRuleTemplate(),
22792283
"tencentcloud_wedata_datasource": wedata.ResourceTencentCloudWedataDatasource(),
22802284
"tencentcloud_wedata_function": wedata.ResourceTencentCloudWedataFunction(),

tencentcloud/provider.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2223,6 +2223,10 @@ tencentcloud_wedata_rule_templates
22232223
tencentcloud_wedata_data_source_list
22242224

22252225
Resource
2226+
tencentcloud_wedata_workflow_folder
2227+
tencentcloud_wedata_workflow
2228+
tencentcloud_wedata_resource_file
2229+
tencentcloud_wedata_resource_folder
22262230
tencentcloud_wedata_datasource
22272231
tencentcloud_wedata_function
22282232
tencentcloud_wedata_script
Lines changed: 314 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,314 @@
1+
package wedata
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"log"
7+
"strings"
8+
9+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
10+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
11+
wedatav20250806 "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wedata/v20250806"
12+
13+
tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
14+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
15+
)
16+
17+
func ResourceTencentCloudWedataResourceFile() *schema.Resource {
18+
return &schema.Resource{
19+
Create: resourceTencentCloudWedataResourceFileCreate,
20+
Read: resourceTencentCloudWedataResourceFileRead,
21+
Update: resourceTencentCloudWedataResourceFileUpdate,
22+
Delete: resourceTencentCloudWedataResourceFileDelete,
23+
Schema: map[string]*schema.Schema{
24+
"project_id": {
25+
Type: schema.TypeString,
26+
Required: true,
27+
Description: "Project id.",
28+
},
29+
30+
"resource_name": {
31+
Type: schema.TypeString,
32+
Required: true,
33+
Description: "The resource file name should be consistent with the uploaded file name as much as possible.",
34+
},
35+
36+
"bucket_name": {
37+
Type: schema.TypeString,
38+
Required: true,
39+
Description: "cos bucket name, which can be obtained from the GetResourceCosPath interface.",
40+
},
41+
42+
"cos_region": {
43+
Type: schema.TypeString,
44+
Required: true,
45+
Description: "The cos bucket area corresponding to the BucketName bucket.",
46+
},
47+
48+
"parent_folder_path": {
49+
Type: schema.TypeString,
50+
Required: true,
51+
Description: "The path to upload resource files in the project, example value: /wedata/qxxxm/, root directory, please use/.",
52+
},
53+
54+
"resource_file": {
55+
Type: schema.TypeString,
56+
Required: true,
57+
Description: "- You can only choose one of the two methods of uploading a file and manually filling. If both are provided, the order of values is file> manual filling value\n-the manual filling value must be the existing cos path, /datastudio/resource/is a fixed prefix, projectId is the project ID, and a specific value needs to be passed in, parentFolderPath is the parent folder path, name is the file name, and examples of manual filling value values are: /datastudio/resource/projectId/parentFolderPath/name \n.",
58+
},
59+
60+
"bundle_id": {
61+
Type: schema.TypeString,
62+
Optional: true,
63+
Description: "bundle client ID.",
64+
},
65+
66+
"bundle_info": {
67+
Type: schema.TypeString,
68+
Optional: true,
69+
Description: "bundle client information.",
70+
},
71+
},
72+
}
73+
}
74+
75+
func resourceTencentCloudWedataResourceFileCreate(d *schema.ResourceData, meta interface{}) error {
76+
defer tccommon.LogElapsed("resource.tencentcloud_wedata_resource_file.create")()
77+
defer tccommon.InconsistentCheck(d, meta)()
78+
79+
logId := tccommon.GetLogId(tccommon.ContextNil)
80+
81+
ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta)
82+
83+
var (
84+
projectId string
85+
resourceId string
86+
)
87+
var (
88+
request = wedatav20250806.NewCreateResourceFileRequest()
89+
response = wedatav20250806.NewCreateResourceFileResponse()
90+
)
91+
92+
if v, ok := d.GetOk("project_id"); ok {
93+
projectId = v.(string)
94+
request.ProjectId = helper.String(projectId)
95+
}
96+
97+
if v, ok := d.GetOk("resource_name"); ok {
98+
request.ResourceName = helper.String(v.(string))
99+
}
100+
101+
if v, ok := d.GetOk("bucket_name"); ok {
102+
request.BucketName = helper.String(v.(string))
103+
}
104+
105+
if v, ok := d.GetOk("cos_region"); ok {
106+
request.CosRegion = helper.String(v.(string))
107+
}
108+
109+
if v, ok := d.GetOk("parent_folder_path"); ok {
110+
request.ParentFolderPath = helper.String(v.(string))
111+
}
112+
113+
if v, ok := d.GetOk("resource_file"); ok {
114+
request.ResourceFile = helper.String(v.(string))
115+
}
116+
117+
if v, ok := d.GetOk("bundle_id"); ok {
118+
request.BundleId = helper.String(v.(string))
119+
}
120+
121+
if v, ok := d.GetOk("bundle_info"); ok {
122+
request.BundleInfo = helper.String(v.(string))
123+
}
124+
125+
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
126+
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWedataV20250806Client().CreateResourceFileWithContext(ctx, request)
127+
if e != nil {
128+
return tccommon.RetryError(e)
129+
} else {
130+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
131+
}
132+
response = result
133+
return nil
134+
})
135+
if err != nil {
136+
log.Printf("[CRITAL]%s create wedata resource file failed, reason:%+v", logId, err)
137+
return err
138+
}
139+
140+
if response.Response.Data != nil && response.Response.Data.ResourceId != nil {
141+
resourceId = *response.Response.Data.ResourceId
142+
d.SetId(strings.Join([]string{projectId, resourceId}, tccommon.FILED_SP))
143+
144+
}
145+
146+
return resourceTencentCloudWedataResourceFileRead(d, meta)
147+
}
148+
149+
func resourceTencentCloudWedataResourceFileRead(d *schema.ResourceData, meta interface{}) error {
150+
defer tccommon.LogElapsed("resource.tencentcloud_wedata_resource_file.read")()
151+
defer tccommon.InconsistentCheck(d, meta)()
152+
153+
logId := tccommon.GetLogId(tccommon.ContextNil)
154+
155+
ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta)
156+
157+
service := WedataService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
158+
159+
idSplit := strings.Split(d.Id(), tccommon.FILED_SP)
160+
if len(idSplit) != 2 {
161+
return fmt.Errorf("id is broken,%s", d.Id())
162+
}
163+
projectId := idSplit[0]
164+
resourceId := idSplit[1]
165+
166+
respData, err := service.DescribeWedataResourceFileById(ctx, projectId, resourceId)
167+
if err != nil {
168+
return err
169+
}
170+
171+
if respData == nil {
172+
d.SetId("")
173+
log.Printf("[WARN]%s resource `wedata_resource_file` [%s] not found, please check if it has been deleted.\n", logId, d.Id())
174+
return nil
175+
}
176+
177+
if respData.ResourceName != nil {
178+
_ = d.Set("resource_name", respData.ResourceName)
179+
}
180+
181+
if respData.BucketName != nil {
182+
_ = d.Set("bucket_name", respData.BucketName)
183+
}
184+
185+
if respData.CosRegion != nil {
186+
_ = d.Set("cos_region", respData.CosRegion)
187+
}
188+
189+
if respData.BundleId != nil {
190+
_ = d.Set("bundle_id", respData.BundleId)
191+
}
192+
193+
if respData.BundleInfo != nil {
194+
_ = d.Set("bundle_info", respData.BundleInfo)
195+
}
196+
197+
_ = projectId
198+
_ = resourceId
199+
return nil
200+
}
201+
202+
func resourceTencentCloudWedataResourceFileUpdate(d *schema.ResourceData, meta interface{}) error {
203+
defer tccommon.LogElapsed("resource.tencentcloud_wedata_resource_file.update")()
204+
defer tccommon.InconsistentCheck(d, meta)()
205+
206+
logId := tccommon.GetLogId(tccommon.ContextNil)
207+
208+
ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta)
209+
210+
immutableArgs := []string{"bucket_name", "cos_region", "parent_folder_path"}
211+
for _, v := range immutableArgs {
212+
if d.HasChange(v) {
213+
return fmt.Errorf("argument `%s` cannot be changed", v)
214+
}
215+
}
216+
idSplit := strings.Split(d.Id(), tccommon.FILED_SP)
217+
if len(idSplit) != 2 {
218+
return fmt.Errorf("id is broken,%s", d.Id())
219+
}
220+
projectId := idSplit[0]
221+
resourceId := idSplit[1]
222+
223+
needChange := false
224+
mutableArgs := []string{"resource_file", "resource_name", "bundle_id", "bundle_info"}
225+
for _, v := range mutableArgs {
226+
if d.HasChange(v) {
227+
needChange = true
228+
break
229+
}
230+
}
231+
232+
if needChange {
233+
request := wedatav20250806.NewUpdateResourceFileRequest()
234+
request.ProjectId = helper.String(projectId)
235+
request.ResourceId = helper.String(resourceId)
236+
237+
if v, ok := d.GetOk("resource_file"); ok {
238+
request.ResourceFile = helper.String(v.(string))
239+
}
240+
241+
if v, ok := d.GetOk("resource_name"); ok {
242+
request.ResourceName = helper.String(v.(string))
243+
}
244+
245+
if v, ok := d.GetOk("bundle_id"); ok {
246+
request.BundleId = helper.String(v.(string))
247+
}
248+
249+
if v, ok := d.GetOk("bundle_info"); ok {
250+
request.BundleInfo = helper.String(v.(string))
251+
}
252+
253+
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
254+
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWedataV20250806Client().UpdateResourceFileWithContext(ctx, request)
255+
if e != nil {
256+
return tccommon.RetryError(e)
257+
} else {
258+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
259+
}
260+
return nil
261+
})
262+
if err != nil {
263+
log.Printf("[CRITAL]%s update wedata resource file failed, reason:%+v", logId, err)
264+
return err
265+
}
266+
}
267+
268+
_ = projectId
269+
_ = resourceId
270+
return resourceTencentCloudWedataResourceFileRead(d, meta)
271+
}
272+
273+
func resourceTencentCloudWedataResourceFileDelete(d *schema.ResourceData, meta interface{}) error {
274+
defer tccommon.LogElapsed("resource.tencentcloud_wedata_resource_file.delete")()
275+
defer tccommon.InconsistentCheck(d, meta)()
276+
277+
logId := tccommon.GetLogId(tccommon.ContextNil)
278+
ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta)
279+
280+
idSplit := strings.Split(d.Id(), tccommon.FILED_SP)
281+
if len(idSplit) != 2 {
282+
return fmt.Errorf("id is broken,%s", d.Id())
283+
}
284+
projectId := idSplit[0]
285+
resourceId := idSplit[1]
286+
287+
var (
288+
request = wedatav20250806.NewDeleteResourceFileRequest()
289+
response = wedatav20250806.NewDeleteResourceFileResponse()
290+
)
291+
292+
request.ProjectId = helper.String(projectId)
293+
request.ResourceId = helper.String(resourceId)
294+
295+
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
296+
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWedataV20250806Client().DeleteResourceFileWithContext(ctx, request)
297+
if e != nil {
298+
return tccommon.RetryError(e)
299+
} else {
300+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
301+
}
302+
response = result
303+
return nil
304+
})
305+
if err != nil {
306+
log.Printf("[CRITAL]%s delete wedata resource file failed, reason:%+v", logId, err)
307+
return err
308+
}
309+
310+
_ = response
311+
_ = projectId
312+
_ = resourceId
313+
return nil
314+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
Provides a resource to create a wedata wedata_resource_file
2+
3+
Example Usage
4+
5+
```hcl
6+
resource "tencentcloud_wedata_resource_file" "wedata_resource_file" {
7+
project_id = 2905622749543821312
8+
resource_name = "tftest.txt"
9+
bucket_name = "data-manage-fsi-1315051789"
10+
cos_region = "ap-beijing-fsi"
11+
parent_folder_path = "/"
12+
resource_file = "/datastudio/resource/2905622749543821312/test"
13+
}
14+
```
15+
16+
Import
17+
18+
wedata wedata_resource_file can be imported using the id, e.g.
19+
20+
```
21+
terraform import tencentcloud_wedata_resource_file.wedata_resource_file wedata_resource_file_id
22+
```
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package wedata_test
2+
3+
import (
4+
"testing"
5+
6+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
7+
8+
tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest"
9+
)
10+
11+
func TestAccTencentCloudWedataResourceFileResource_basic(t *testing.T) {
12+
t.Parallel()
13+
resource.Test(t, resource.TestCase{
14+
PreCheck: func() {
15+
tcacctest.AccPreCheck(t)
16+
},
17+
Providers: tcacctest.AccProviders,
18+
Steps: []resource.TestStep{{
19+
Config: testAccWedataResourceFile,
20+
Check: resource.ComposeTestCheckFunc(resource.TestCheckResourceAttrSet("tencentcloud_wedata_resource_file.wedata_resource_file", "id")),
21+
}},
22+
})
23+
}
24+
25+
const testAccWedataResourceFile = `
26+
resource "tencentcloud_wedata_resource_file" "wedata_resource_file" {
27+
project_id = 2905622749543821312
28+
resource_name = "tftest.txt"
29+
bucket_name = "data-manage-fsi-1315051789"
30+
cos_region = "ap-beijing-fsi"
31+
parent_folder_path = "/"
32+
resource_file = "/datastudio/resource/2905622749543821312/test"
33+
}
34+
`

0 commit comments

Comments
 (0)