Skip to content

Commit 6ca7637

Browse files
authored
fix(scf): [116337119] return functionId (#2590)
* add * add * add
1 parent c9c3cb5 commit 6ca7637

File tree

5 files changed

+46
-7
lines changed

5 files changed

+46
-7
lines changed

.changelog/2590.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:enhancement
2+
resource/tencentcloud_scf_function: return function_id params
3+
```

tencentcloud/services/scf/resource_tc_scf_function.go

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -523,6 +523,11 @@ func ResourceTencentCloudScfFunction() *schema.Resource {
523523
},
524524
},
525525
},
526+
"function_id": {
527+
Type: schema.TypeString,
528+
Computed: true,
529+
Description: "function ID.",
530+
},
526531
},
527532
}
528533
}
@@ -535,7 +540,10 @@ func resourceTencentCloudScfFunctionCreate(d *schema.ResourceData, m interface{}
535540
client := m.(tccommon.ProviderMeta).GetAPIV3Conn()
536541
scfService := ScfService{client: client}
537542

538-
var functionInfo scfFunctionInfo
543+
var (
544+
functionInfo scfFunctionInfo
545+
functionId string
546+
)
539547

540548
functionInfo.name = d.Get("name").(string)
541549
functionInfo.desc = helper.String(d.Get("description").(string))
@@ -841,12 +849,15 @@ func resourceTencentCloudScfFunctionCreate(d *schema.ResourceData, m interface{}
841849
}
842850
}
843851

844-
_, err = scfService.DescribeFunction(ctx, functionInfo.name, *functionInfo.namespace)
852+
funcResp, err := scfService.DescribeFunction(ctx, functionInfo.name, *functionInfo.namespace)
845853
if err != nil {
846854
log.Printf("[CRITAL]%s get function id failed: %+v", logId, err)
847855
return err
848856
}
849857

858+
functionId = *funcResp.Response.FunctionId
859+
_ = d.Set("function_id", functionId)
860+
850861
return resourceTencentCloudScfFunctionRead(d, m)
851862
}
852863

@@ -868,7 +879,8 @@ func resourceTencentCloudScfFunctionRead(d *schema.ResourceData, m interface{})
868879
}
869880
namespace, name := split[0], split[1]
870881

871-
response, err := service.DescribeFunction(ctx, name, namespace)
882+
functionId := d.Get("function_id").(string)
883+
response, err := service.DescribeFunction(ctx, name, namespace, functionId)
872884
if err != nil {
873885
log.Printf("[CRITAL]%s read function failed: %+v", logId, err)
874886
}
@@ -901,6 +913,7 @@ func resourceTencentCloudScfFunctionRead(d *schema.ResourceData, m interface{})
901913
_ = d.Set("cls_topic_id", resp.ClsTopicId)
902914
_ = d.Set("func_type", resp.Type)
903915
_ = d.Set("l5_enable", *resp.L5Enable == "TRUE")
916+
_ = d.Set("function_id", resp.FunctionId)
904917

905918
tags := make(map[string]string, len(resp.Tags))
906919
for _, tag := range resp.Tags {

tencentcloud/services/scf/resource_tc_scf_function_test.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ func TestAccTencentCloudScfFunction_basic(t *testing.T) {
114114
resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "triggers.#", "0"),
115115
resource.TestCheckResourceAttrSet("tencentcloud_scf_function.foo", "modify_time"),
116116
resource.TestCheckResourceAttrSet("tencentcloud_scf_function.foo", "code_size"),
117+
resource.TestCheckResourceAttrSet("tencentcloud_scf_function.foo", "function_id"),
117118
resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "code_result", "success"),
118119
resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "code_error", ""),
119120
resource.TestCheckResourceAttrSet("tencentcloud_scf_function.foo", "err_no"),
@@ -147,6 +148,7 @@ func TestAccTencentCloudScfFunction_basic(t *testing.T) {
147148
resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "eip_fixed", "false"),
148149
resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "eips.#", "0"),
149150
resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "host", ""),
151+
resource.TestCheckResourceAttrSet("tencentcloud_scf_function.foo", "function_id"),
150152
resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "vip", ""),
151153
resource.TestCheckNoResourceAttr("tencentcloud_scf_function.foo", "tags.test"),
152154
resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "tags.abc", "abc"),
@@ -207,6 +209,7 @@ func TestAccTencentCloudScfFunction_cos(t *testing.T) {
207209
resource.TestCheckResourceAttrSet("tencentcloud_scf_function.foo", "cos_bucket_region"),
208210
resource.TestCheckNoResourceAttr("tencentcloud_scf_function.foo", "demo_id"),
209211
resource.TestCheckResourceAttrSet("tencentcloud_scf_function.foo", "modify_time"),
212+
resource.TestCheckResourceAttrSet("tencentcloud_scf_function.foo", "function_id"),
210213
resource.TestCheckResourceAttrSet("tencentcloud_scf_function.foo", "code_size"),
211214
resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "code_result", "success"),
212215
resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "code_error", ""),
@@ -230,6 +233,7 @@ func TestAccTencentCloudScfFunction_cos(t *testing.T) {
230233
resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "code_result", "success"),
231234
resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "code_error", ""),
232235
resource.TestCheckResourceAttrSet("tencentcloud_scf_function.foo", "err_no"),
236+
resource.TestCheckResourceAttrSet("tencentcloud_scf_function.foo", "function_id"),
233237
resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "install_dependency", "false"),
234238
resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "status", svcscf.SCF_FUNCTION_STATUS_ACTIVE),
235239
resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "status_desc", ""),
@@ -267,6 +271,7 @@ func TestAccTencentCloudScfFunction_role(t *testing.T) {
267271
resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "l5_enable", "false"),
268272
resource.TestCheckResourceAttrSet("tencentcloud_scf_function.foo", "zip_file"),
269273
resource.TestCheckResourceAttrSet("tencentcloud_scf_function.foo", "modify_time"),
274+
resource.TestCheckResourceAttrSet("tencentcloud_scf_function.foo", "function_id"),
270275
resource.TestCheckResourceAttrSet("tencentcloud_scf_function.foo", "code_size"),
271276
resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "code_result", "success"),
272277
resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "code_error", ""),
@@ -287,6 +292,7 @@ func TestAccTencentCloudScfFunction_role(t *testing.T) {
287292
resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "role", DefaultScfRoleName2),
288293
resource.TestCheckResourceAttrSet("tencentcloud_scf_function.foo", "zip_file"),
289294
resource.TestCheckResourceAttrSet("tencentcloud_scf_function.foo", "modify_time"),
295+
resource.TestCheckResourceAttrSet("tencentcloud_scf_function.foo", "function_id"),
290296
resource.TestCheckResourceAttrSet("tencentcloud_scf_function.foo", "code_size"),
291297
resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "code_result", "success"),
292298
resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "code_error", ""),
@@ -328,6 +334,7 @@ func TestAccTencentCloudScfFunction_trigger(t *testing.T) {
328334
resource.TestCheckResourceAttrSet("tencentcloud_scf_function.foo", "zip_file"),
329335
resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "triggers.#", "2"),
330336
resource.TestCheckResourceAttrSet("tencentcloud_scf_function.foo", "modify_time"),
337+
resource.TestCheckResourceAttrSet("tencentcloud_scf_function.foo", "function_id"),
331338
resource.TestCheckResourceAttrSet("tencentcloud_scf_function.foo", "code_size"),
332339
resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "code_result", "success"),
333340
resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "code_error", ""),
@@ -356,6 +363,7 @@ func TestAccTencentCloudScfFunction_trigger(t *testing.T) {
356363
resource.TestCheckResourceAttrSet("tencentcloud_scf_function.foo", "modify_time"),
357364
resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "status", svcscf.SCF_FUNCTION_STATUS_ACTIVE),
358365
resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "status_desc", ""),
366+
resource.TestCheckResourceAttrSet("tencentcloud_scf_function.foo", "function_id"),
359367
resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "trigger_info.#", "1"),
360368
resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "trigger_info.0.enable", "true"),
361369
resource.TestCheckResourceAttrSet("tencentcloud_scf_function.foo", "trigger_info.0.create_time"),
@@ -395,6 +403,7 @@ func TestAccTencentCloudScfFunction_customNamespace(t *testing.T) {
395403
resource.TestCheckResourceAttrSet("tencentcloud_scf_function.foo", "zip_file"),
396404
resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "triggers.#", "0"),
397405
resource.TestCheckResourceAttrSet("tencentcloud_scf_function.foo", "modify_time"),
406+
resource.TestCheckResourceAttrSet("tencentcloud_scf_function.foo", "function_id"),
398407
resource.TestCheckResourceAttrSet("tencentcloud_scf_function.foo", "code_size"),
399408
resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "code_result", "success"),
400409
resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "code_error", ""),
@@ -431,6 +440,7 @@ func TestAccTencentCloudScfFunction_fs(t *testing.T) {
431440
resource.TestCheckResourceAttrSet("tencentcloud_scf_function.foo", "subnet_id"),
432441
resource.TestCheckResourceAttrSet("tencentcloud_scf_function.foo", "zip_file"),
433442
resource.TestCheckResourceAttrSet("tencentcloud_scf_function.foo", "modify_time"),
443+
resource.TestCheckResourceAttrSet("tencentcloud_scf_function.foo", "function_id"),
434444
resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "cfs_config.#", "1"),
435445
resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "cfs_config.0.user_id", "10000"),
436446
resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "cfs_config.0.user_group_id", "10000"),
@@ -449,6 +459,7 @@ func TestAccTencentCloudScfFunction_fs(t *testing.T) {
449459
resource.TestCheckResourceAttrSet("tencentcloud_scf_function.foo", "subnet_id"),
450460
resource.TestCheckResourceAttrSet("tencentcloud_scf_function.foo", "zip_file"),
451461
resource.TestCheckResourceAttrSet("tencentcloud_scf_function.foo", "modify_time"),
462+
resource.TestCheckResourceAttrSet("tencentcloud_scf_function.foo", "function_id"),
452463
resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "cfs_config.#", "1"),
453464
resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "cfs_config.0.user_id", "10000"),
454465
resource.TestCheckResourceAttr("tencentcloud_scf_function.foo", "cfs_config.0.user_group_id", "10000"),

tencentcloud/services/scf/service_tencentcloud_scf.go

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package scf
22

33
import (
44
"context"
5+
"fmt"
56
"log"
67
"strings"
78

@@ -147,15 +148,21 @@ func (me *ScfService) CreateFunction(ctx context.Context, info scfFunctionInfo)
147148
return nil
148149
}
149150

150-
func (me *ScfService) DescribeFunction(ctx context.Context, name, namespace string) (resp *scf.GetFunctionResponse, err error) {
151+
func (me *ScfService) DescribeFunction(ctx context.Context, name, namespace string, functionId ...string) (resp *scf.GetFunctionResponse, err error) {
151152
request := scf.NewGetFunctionRequest()
153+
response := scf.NewGetFunctionResponse()
152154
request.FunctionName = &name
153155
request.Namespace = &namespace
154-
var iacExtInfo connectivity.IacExtInfo
155-
iacExtInfo.InstanceId = strings.Join([]string{name, namespace}, tccommon.FILED_SP)
156156
if err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError {
157157
ratelimit.Check(request.GetAction())
158-
response, err := me.client.UseScfClient(iacExtInfo).GetFunction(request)
158+
if len(functionId) == 1 {
159+
var iacExtInfo connectivity.IacExtInfo
160+
iacExtInfo.InstanceId = functionId[0]
161+
response, err = me.client.UseScfClient(iacExtInfo).GetFunction(request)
162+
} else {
163+
response, err = me.client.UseScfClient().GetFunction(request)
164+
}
165+
159166
if err != nil {
160167
if sdkError, ok := err.(*sdkErrors.TencentCloudSDKError); ok {
161168
for _, code := range SCF_FUNCTIONS_NOT_FOUND_SET {
@@ -168,6 +175,10 @@ func (me *ScfService) DescribeFunction(ctx context.Context, name, namespace stri
168175
return tccommon.RetryError(errors.WithStack(err), tccommon.InternalError)
169176
}
170177

178+
if response == nil || *response.Response.FunctionId == "" {
179+
return resource.NonRetryableError(fmt.Errorf("functionId is empty"))
180+
}
181+
171182
resp = response
172183
return nil
173184
}); err != nil {

website/docs/r/scf_function.html.markdown

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,7 @@ In addition to all arguments above, the following attributes are exported:
174174
* `eip_fixed` - Whether EIP is a fixed IP.
175175
* `eips` - SCF function EIP list.
176176
* `err_no` - SCF function code error code.
177+
* `function_id` - function ID.
177178
* `host` - SCF function domain name.
178179
* `install_dependency` - Whether to automatically install dependencies.
179180
* `modify_time` - SCF function last modified time.

0 commit comments

Comments
 (0)