Skip to content

Commit 711335d

Browse files
authored
fix(cam): [121458173] tencentcloud_cam_role support update session_duration (#3049)
* add * add * add * add
1 parent 217e3ee commit 711335d

File tree

11 files changed

+268
-45
lines changed

11 files changed

+268
-45
lines changed

.changelog/3049.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_cam_role: support update `session_duration`
3+
```

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ require (
3232
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/apm v1.0.825
3333
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/as v1.0.1052
3434
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/bi v1.0.824
35-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam v1.0.1051
35+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam v1.0.1071
3636
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cat v1.0.825
3737
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cbs v1.0.591
3838
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb v1.0.944
@@ -46,7 +46,7 @@ require (
4646
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb v1.0.1034
4747
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit v1.0.1033
4848
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls v1.0.1046
49-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1068
49+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1071
5050
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.1053
5151
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp v1.0.762
5252
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.1058

go.sum

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -832,6 +832,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/bi v1.0.824 h1:DVKvZ6h+
832832
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/bi v1.0.824/go.mod h1:DvBpDX/qdJG4KKLeULmRvhAjPYiw8za0HeTSu2y/lFw=
833833
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam v1.0.1051 h1:ZwWmhAxXd88JDPs/8s2qW9SJblXNhIXWKWfeW7jtjlc=
834834
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam v1.0.1051/go.mod h1:VdaN1kukiMXu0xgDoapeNXs1Vy6VPchTdSzOtg1ySqY=
835+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam v1.0.1071 h1:2CeivXYc7PtD2kgZEJXk9/SDQA9dzLejH5FmNzAW3QU=
836+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam v1.0.1071/go.mod h1:UAjX3Vq52SQLKTe6o2HyGA/841Rnc+f4ZRATEsFHJDM=
835837
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cat v1.0.825 h1:TgO9L1yNPkWeXqrvys/9RL3u958xx9dcTAy4WmaxBnE=
836838
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cat v1.0.825/go.mod h1:1yCKeIioX4D0bcIDHs3JCS5lbyzndXh1E8wHyHaCjxY=
837839
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cbs v1.0.591 h1:TPGLjH6wqkA5Iirl6xCxFkWwrtCZ8ZmeF7ASzqUbsZA=
@@ -943,6 +945,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1066 h1:D55
943945
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1066/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
944946
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1068 h1:mI0xoreGp9GkDJWkdzqgZcPsfoWXciahPAvEcaGSA6g=
945947
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1068/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
948+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1071 h1:Q/Ue/yRv4HSpaiFAnXIshoDjxzwyhwezEidXU49Boa4=
949+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1071/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
946950
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/controlcenter v1.0.993 h1:WlPgXldQCxt7qi5Xrc6j6zTrsXWzN5BcOGs7Irq7fwQ=
947951
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/controlcenter v1.0.993/go.mod h1:Z9U8zNtyuyKhjS0698wqsrG/kLx1TQ5CEixXBwVe7xY=
948952
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/csip v1.0.860 h1:F3esKBIT3HW9+7Gt8cVgf8X06VdGIczpgLBUECzSEzU=

tencentcloud/services/cam/resource_tc_cam_role.go

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -145,16 +145,19 @@ func resourceTencentCloudCamRoleCreate(d *schema.ResourceData, meta interface{})
145145
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n",
146146
logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
147147
}
148+
149+
if result == nil || result.Response == nil || result.Response.RoleId == nil {
150+
return resource.NonRetryableError(fmt.Errorf("Create CAM role failed, Response is nil."))
151+
}
152+
148153
response = result
149154
return nil
150155
})
151156
if err != nil {
152157
log.Printf("[CRITAL]%s create CAM role failed, reason:%s\n", logId, err.Error())
153158
return err
154159
}
155-
if response.Response.RoleId == nil {
156-
return fmt.Errorf("CAM role id is nil")
157-
}
160+
158161
d.SetId(*response.Response.RoleId)
159162

160163
//get really instance then read
@@ -373,7 +376,30 @@ func resourceTencentCloudCamRoleUpdate(d *schema.ResourceData, meta interface{})
373376
}
374377

375378
if d.HasChange("session_duration") {
376-
return fmt.Errorf("`session_duration` do not support change now.")
379+
request := cam.NewUpdateRoleSessionDurationRequest()
380+
request.RoleId = helper.StrToUint64Point(roleId)
381+
if v, ok := d.GetOkExists("session_duration"); ok {
382+
request.SessionDuration = helper.IntUint64(v.(int))
383+
}
384+
385+
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
386+
response, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCamClient().UpdateRoleSessionDuration(request)
387+
if e != nil {
388+
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n",
389+
logId, request.GetAction(), request.ToJsonString(), e.Error())
390+
return tccommon.RetryError(e)
391+
} else {
392+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n",
393+
logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
394+
}
395+
396+
return nil
397+
})
398+
399+
if err != nil {
400+
log.Printf("[CRITAL]%s update CAM role session duration failed, reason:%s\n", logId, err.Error())
401+
return err
402+
}
377403
}
378404
return resourceTencentCloudCamRoleRead(d, meta)
379405
}

tencentcloud/services/cam/resource_tc_cam_role.md

Lines changed: 48 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,14 @@ locals {
1111
uin = data.tencentcloud_user_info.info.owner_uin
1212
}
1313
14-
output "uin" {
15-
value = local.uin
16-
}
17-
18-
resource "tencentcloud_cam_role" "foo" {
19-
name = "cam-role-test"
14+
resource "tencentcloud_cam_role" "example" {
15+
name = "tf-example"
2016
document = jsonencode(
2117
{
2218
statement = [
2319
{
24-
action = "name/sts:AssumeRole"
25-
effect = "allow"
20+
action = "name/sts:AssumeRole"
21+
effect = "allow"
2622
principal = {
2723
qcs = [
2824
"qcs::cam::uin/${local.uin}:root",
@@ -36,13 +32,47 @@ resource "tencentcloud_cam_role" "foo" {
3632
console_login = true
3733
description = "test"
3834
session_duration = 7200
39-
tags = {
40-
test = "tf-cam-role"
35+
tags = {
36+
createBy = "Terraform"
4137
}
4238
}
4339
40+
output "uin" {
41+
value = local.uin
42+
}
43+
4444
output "arn" {
45-
value = tencentcloud_cam_role.foo.role_arn
45+
value = tencentcloud_cam_role.example.role_arn
46+
}
47+
```
48+
49+
Or use service
50+
51+
```hcl
52+
resource "tencentcloud_cam_role" "example" {
53+
name = "tf-example"
54+
document = jsonencode(
55+
{
56+
statement = [
57+
{
58+
action = "name/sts:AssumeRole"
59+
effect = "allow"
60+
principal = {
61+
service = [
62+
"scf.qcloud.com",
63+
]
64+
}
65+
},
66+
]
67+
version = "2.0"
68+
}
69+
)
70+
console_login = true
71+
description = "test"
72+
session_duration = 7200
73+
tags = {
74+
createBy = "Terraform"
75+
}
4676
}
4777
```
4878

@@ -53,15 +83,15 @@ variable "saml-provider" {
5383
default = "example"
5484
}
5585
86+
data "tencentcloud_user_info" "info" {}
87+
5688
locals {
57-
uin = data.tencentcloud_user_info.info.uin
89+
uin = data.tencentcloud_user_info.info.uin
5890
saml_provider = var.saml-provider
5991
}
6092
61-
data "tencentcloud_user_info" "info" {}
62-
63-
resource "tencentcloud_cam_role" "boo" {
64-
name = "tf_cam_role"
93+
resource "tencentcloud_cam_role" "example" {
94+
name = "tf-example"
6595
document = <<EOF
6696
{
6797
"version": "2.0",
@@ -80,7 +110,7 @@ resource "tencentcloud_cam_role" "boo" {
80110
]
81111
}
82112
EOF
83-
description = "tf_test"
113+
description = "terraform demo"
84114
console_login = true
85115
}
86116
```
@@ -90,5 +120,5 @@ Import
90120
CAM role can be imported using the id, e.g.
91121

92122
```
93-
$ terraform import tencentcloud_cam_role.foo 4611686018427733635
123+
$ terraform import tencentcloud_cam_role.example 4611686018427733635
94124
```

vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam/v20190116/client.go

Lines changed: 55 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam/v20190116/errors.go

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)