Skip to content

Commit db36b21

Browse files
authored
add ssm service type (#1931)
* add ssm service type * add changelog
1 parent 3f011c2 commit db36b21

File tree

4 files changed

+133
-31
lines changed

4 files changed

+133
-31
lines changed

.changelog/1931.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_ssm_secret: support `service_type` and `additional_config`
3+
```

tencentcloud/resource_tc_ssm_secret.go

Lines changed: 69 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
/*
22
Provide a resource to create a SSM secret.
3+
34
Example Usage
5+
6+
Create user defined secret
7+
48
```hcl
59
resource "tencentcloud_ssm_secret" "foo" {
610
secret_name = "test"
7-
description = "test secret"
11+
description = "user defined secret"
812
recovery_window_in_days = 0
913
is_enabled = true
1014
@@ -13,7 +17,39 @@ resource "tencentcloud_ssm_secret" "foo" {
1317
}
1418
}
1519
```
20+
21+
Create redis secret
22+
23+
```hcl
24+
data "tencentcloud_redis_instances" "instance" {
25+
zone = "ap-guangzhou-6"
26+
}
27+
28+
resource "tencentcloud_ssm_secret" "secret" {
29+
secret_name = "for-redis-test"
30+
description = "redis secret"
31+
is_enabled = false
32+
33+
secret_type = 4
34+
additional_config = jsonencode(
35+
{
36+
"Region" : "ap-guangzhou"
37+
"Privilege" : "r",
38+
"InstanceId" : data.tencentcloud_redis_instances.instance.instance_list.0.redis_id
39+
"ReadonlyPolicy" : ["master"],
40+
"Remark" : "for tf test"
41+
}
42+
)
43+
tags = {
44+
test-tag = "test"
45+
}
46+
47+
recovery_window_in_days = 0
48+
}
49+
```
50+
1651
Import
52+
1753
SSM secret can be imported using the secretName, e.g.
1854
```
1955
$ terraform import tencentcloud_ssm_secret.foo test
@@ -78,6 +114,19 @@ func resourceTencentCloudSsmSecret() *schema.Resource {
78114
Computed: true,
79115
Description: "KMS keyId used to encrypt secret. If it is empty, it means that the CMK created by SSM for you by default is used for encryption. You can also specify the KMS CMK created by yourself in the same region for encryption.",
80116
},
117+
"secret_type": {
118+
Type: schema.TypeInt,
119+
Optional: true,
120+
Computed: true,
121+
Description: "Type of secret. `0`: user-defined secret. `4`: redis secret.",
122+
},
123+
124+
"additional_config": {
125+
Type: schema.TypeString,
126+
Optional: true,
127+
Description: "Additional config for specific secret types in JSON string format.",
128+
},
129+
81130
"status": {
82131
Type: schema.TypeString,
83132
Computed: true,
@@ -103,9 +152,14 @@ func resourceTencentCloudSsmSecretCreate(d *schema.ResourceData, meta interface{
103152
if v, ok := d.GetOk("kms_key_id"); ok {
104153
param["kms_key_id"] = v.(string)
105154
}
155+
if v, ok := d.GetOkExists("secret_type"); ok {
156+
param["secret_type"] = v.(int)
157+
}
158+
if v, ok := d.GetOk("additional_config"); ok {
159+
param["additional_config"] = v.(string)
160+
}
106161
//use a default version info, after create secret will delete this version
107162
//because sdk do not support create secret without version
108-
param["version_id"] = "default"
109163
param["secret_string"] = "default"
110164

111165
var outErr, inErr error
@@ -122,18 +176,6 @@ func resourceTencentCloudSsmSecretCreate(d *schema.ResourceData, meta interface{
122176
}
123177
d.SetId(secretName)
124178

125-
//delete default version info
126-
outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError {
127-
inErr = ssmService.DeleteSecretVersion(ctx, secretName, "default")
128-
if inErr != nil {
129-
return retryError(inErr)
130-
}
131-
return nil
132-
})
133-
if outErr != nil {
134-
return outErr
135-
}
136-
137179
if isEnabled := d.Get("is_enabled").(bool); !isEnabled {
138180
outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError {
139181
inErr = ssmService.DisableSecret(ctx, secretName)
@@ -200,6 +242,8 @@ func resourceTencentCloudSsmSecretRead(d *schema.ResourceData, meta interface{})
200242
_ = d.Set("secret_name", secretInfo.secretName)
201243
_ = d.Set("description", secretInfo.description)
202244
_ = d.Set("kms_key_id", secretInfo.kmsKeyId)
245+
_ = d.Set("secret_type", secretInfo.secretType)
246+
_ = d.Set("additional_config", secretInfo.additionalConfig)
203247
_ = d.Set("status", secretInfo.status)
204248

205249
if secretInfo.status == SSM_STATUS_ENABLED {
@@ -229,6 +273,17 @@ func resourceTencentCloudSsmSecretUpdate(d *schema.ResourceData, meta interface{
229273
d.Partial(true)
230274
secretName := d.Id()
231275

276+
immutableArgs := []string{
277+
"secret_type",
278+
"additional_config",
279+
}
280+
281+
for _, v := range immutableArgs {
282+
if d.HasChange(v) {
283+
return fmt.Errorf("argument `%s` cannot be changed", v)
284+
}
285+
}
286+
232287
if d.HasChange("description") {
233288
description := d.Get("description").(string)
234289
err := resource.Retry(writeRetryTimeout, func() *resource.RetryError {

tencentcloud/service_tencentcloud_ssm.go

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,16 @@ type SsmService struct {
1616
}
1717

1818
type SecretInfo struct {
19-
secretName string
20-
description string
21-
kmsKeyId string
22-
createUin uint64
23-
status string
24-
deleteTime uint64
25-
createTime uint64
26-
resourceId string
19+
secretName string
20+
description string
21+
kmsKeyId string
22+
secretType int64
23+
additionalConfig string
24+
createUin uint64
25+
status string
26+
deleteTime uint64
27+
createTime uint64
28+
resourceId string
2729
}
2830

2931
type SecretVersionInfo struct {
@@ -101,14 +103,16 @@ func (me *SsmService) DescribeSecretByName(ctx context.Context, secretName strin
101103
logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
102104

103105
secret = &SecretInfo{
104-
secretName: *response.Response.SecretName,
105-
description: *response.Response.Description,
106-
kmsKeyId: *response.Response.KmsKeyId,
107-
createUin: *response.Response.CreateUin,
108-
status: *response.Response.Status,
109-
deleteTime: *response.Response.DeleteTime,
110-
createTime: *response.Response.CreateTime,
111-
resourceId: fmt.Sprintf("creatorUin/%d/%s", *response.Response.CreateUin, *response.Response.SecretName),
106+
secretName: *response.Response.SecretName,
107+
description: *response.Response.Description,
108+
kmsKeyId: *response.Response.KmsKeyId,
109+
secretType: *response.Response.SecretType,
110+
additionalConfig: *response.Response.AdditionalConfig,
111+
createUin: *response.Response.CreateUin,
112+
status: *response.Response.Status,
113+
deleteTime: *response.Response.DeleteTime,
114+
createTime: *response.Response.CreateTime,
115+
resourceId: fmt.Sprintf("creatorUin/%d/%s", *response.Response.CreateUin, *response.Response.SecretName),
112116
}
113117
return
114118
}
@@ -175,6 +179,12 @@ func (me *SsmService) CreateSecret(ctx context.Context, param map[string]interfa
175179
if k == "kms_key_id" {
176180
request.KmsKeyId = helper.String(v.(string))
177181
}
182+
if k == "secret_type" {
183+
request.SecretType = helper.IntUint64(v.(int))
184+
}
185+
if k == "additional_config" {
186+
request.AdditionalConfig = helper.String(v.(string))
187+
}
178188
if k == "secret_binary" {
179189
request.SecretBinary = helper.String(v.(string))
180190
}

website/docs/r/ssm_secret.html.markdown

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,12 @@ Provide a resource to create a SSM secret.
1313

1414
## Example Usage
1515

16+
Create user defined secret
17+
1618
```hcl
1719
resource "tencentcloud_ssm_secret" "foo" {
1820
secret_name = "test"
19-
description = "test secret"
21+
description = "user defined secret"
2022
recovery_window_in_days = 0
2123
is_enabled = true
2224
@@ -26,15 +28,47 @@ resource "tencentcloud_ssm_secret" "foo" {
2628
}
2729
```
2830

31+
Create redis secret
32+
33+
```hcl
34+
data "tencentcloud_redis_instances" "instance" {
35+
zone = "ap-guangzhou-6"
36+
}
37+
38+
resource "tencentcloud_ssm_secret" "secret" {
39+
secret_name = "for-redis-test"
40+
description = "redis secret"
41+
is_enabled = false
42+
43+
secret_type = 4
44+
additional_config = jsonencode(
45+
{
46+
"Region" : "ap-guangzhou"
47+
"Privilege" : "r",
48+
"InstanceId" : data.tencentcloud_redis_instances.instance.instance_list.0.redis_id
49+
"ReadonlyPolicy" : ["master"],
50+
"Remark" : "for tf test"
51+
}
52+
)
53+
tags = {
54+
test-tag = "test"
55+
}
56+
57+
recovery_window_in_days = 0
58+
}
59+
```
60+
2961
## Argument Reference
3062

3163
The following arguments are supported:
3264

3365
* `secret_name` - (Required, String, ForceNew) Name of secret which cannot be repeated in the same region. The maximum length is 128 bytes. The name can only contain English letters, numbers, underscore and hyphen '-'. The first character must be a letter or number.
66+
* `additional_config` - (Optional, String) Additional config for specific secret types in JSON string format.
3467
* `description` - (Optional, String) Description of secret. The maximum is 2048 bytes.
3568
* `is_enabled` - (Optional, Bool) Specify whether to enable secret. Default value is `true`.
3669
* `kms_key_id` - (Optional, String, ForceNew) KMS keyId used to encrypt secret. If it is empty, it means that the CMK created by SSM for you by default is used for encryption. You can also specify the KMS CMK created by yourself in the same region for encryption.
3770
* `recovery_window_in_days` - (Optional, Int) Specify the scheduled deletion date. Default value is `0` that means to delete immediately. 1-30 means the number of days reserved, completely deleted after this date.
71+
* `secret_type` - (Optional, Int) Type of secret. `0`: user-defined secret. `4`: redis secret.
3872
* `tags` - (Optional, Map) Tags of secret.
3973

4074
## Attributes Reference

0 commit comments

Comments
 (0)