Skip to content

Commit 4db00de

Browse files
gitmknanonymous
andauthored
fix: tcr nameSpace support is_auto_scan, is_prevent_vul, severity, cv… (#1552)
* fix: tcr nameSpace support is_auto_scan, is_prevent_vul, severity, cve_whitelist_items field * feat: add changelog * fix: modify unit * fix: increase the default value --------- Co-authored-by: anonymous <anonymous@mail.org>
1 parent ae7dbb3 commit 4db00de

File tree

11 files changed

+257
-41
lines changed

11 files changed

+257
-41
lines changed

.changelog/1552.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_tcr_namespace: Support is_auto_scan, is_prevent_vul, severity, cve_whitelist_items field
3+
```

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ require (
3535
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb v1.0.591
3636
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit v1.0.544
3737
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls v1.0.412
38-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.591
38+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.593
3939
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.553
4040
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp v1.0.589
4141
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.572
@@ -73,7 +73,7 @@ require (
7373
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tat v1.0.538
7474
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tcaplusdb v1.0.199
7575
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tcm v1.0.547
76-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tcr v1.0.578
76+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tcr v1.0.593
7777
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdcpg v1.0.533
7878
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdmq v1.0.564
7979
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tem v1.0.578

go.sum

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -521,6 +521,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.588/go.mod
521521
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.589/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
522522
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.591 h1:tb1wlm1K9ca6bNrwC0sr65vJAL+1gYq4UzLsZxaY5KU=
523523
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.591/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
524+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.593 h1:VjzQDGDVnKJDKtt/tzD4gAvzulnY3lDZqH+gOIggbu8=
525+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.593/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
524526
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.553 h1:Pl1kYgFhJp0QSoVFSzRsiGk+HfEAkBTQg7+O60tytNA=
525527
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.553/go.mod h1:dnnqPxXYK+kax3e1MKo/PI3iWJtytm6ogWKQHJS7SGE=
526528
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp v1.0.589 h1:LZihgirMH0vsaGScYexxwY0fTss9vHaSZs/YOQUVESg=
@@ -598,6 +600,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tcm v1.0.547 h1:6bukohy
598600
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tcm v1.0.547/go.mod h1:C7b++Lr8Xh+2KtTUMBjbb+/BrBhfFhAxDMjXzT2GLhY=
599601
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tcr v1.0.578 h1:503H565386+uwlu/D3hO7kbW9wcYe6BWKXzE3Pi3TF8=
600602
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tcr v1.0.578/go.mod h1:MJ6nlo9xGgxLlWBlizUyxKRFR5lf1mhjBFAwaW7fBYY=
603+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tcr v1.0.593 h1:QCvxPWNBcKjTgUeiN78Waiv/59znPyHradO1nDUYFqw=
604+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tcr v1.0.593/go.mod h1:k8Rnd9/P14yKUCIQH84ScSyi5/bJ5N2WVpL8fC89xrU=
601605
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdcpg v1.0.533 h1:r6HQhmHzPp1oSGhwkNzUzIRlpnpb8Jhtcn1yKhg9ml4=
602606
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdcpg v1.0.533/go.mod h1:5sIIchyV9sXIVAqsD3UWts+qQJ0qoc55sL2WuiY8Ugs=
603607
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdmq v1.0.564 h1:YO2DCcZn+wRJmvfILBTe1KO4tZcFvmaKW4l/NhgZGoo=

tencentcloud/resource_tc_tcr_namespace.go

Lines changed: 88 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,14 @@ Example Usage
66
```hcl
77
resource "tencentcloud_tcr_namespace" "foo" {
88
instance_id = ""
9-
name = "example"
9+
name = "example"
1010
is_public = true
11+
is_auto_scan = true
12+
is_prevent_vul = true
13+
severity = "medium"
14+
cve_whitelist_items {
15+
cve_id = "cve-xxxxx"
16+
}
1117
}
1218
```
1319
@@ -59,6 +65,40 @@ func resourceTencentCloudTcrNamespace() *schema.Resource {
5965
Default: false,
6066
Description: "Indicate that the namespace is public or not. Default is `false`.",
6167
},
68+
"is_auto_scan": {
69+
Type: schema.TypeBool,
70+
Optional: true,
71+
Default: false,
72+
Description: "Scanning level, `True` is automatic, `False` is manual. Default is `false`.",
73+
},
74+
75+
"is_prevent_vul": {
76+
Type: schema.TypeBool,
77+
Optional: true,
78+
Default: false,
79+
Description: "Blocking switch, `True` is open, `False` is closed. Default is `false`.",
80+
},
81+
82+
"severity": {
83+
Type: schema.TypeString,
84+
Optional: true,
85+
Description: "Block vulnerability level, currently only supports `low`, `medium`, `high`.",
86+
},
87+
88+
"cve_whitelist_items": {
89+
Type: schema.TypeList,
90+
Optional: true,
91+
Description: "Vulnerability Whitelist.",
92+
Elem: &schema.Resource{
93+
Schema: map[string]*schema.Schema{
94+
"cve_id": {
95+
Type: schema.TypeString,
96+
Optional: true,
97+
Description: "Vulnerability Whitelist ID.",
98+
},
99+
},
100+
},
101+
},
62102
},
63103
}
64104
}
@@ -72,14 +112,18 @@ func resourceTencentCloudTcrNamespaceCreate(d *schema.ResourceData, meta interfa
72112
tcrService := TCRService{client: meta.(*TencentCloudClient).apiV3Conn}
73113

74114
var (
75-
name = d.Get("name").(string)
76-
instanceId = d.Get("instance_id").(string)
77-
isPublic = d.Get("is_public").(bool)
78-
outErr, inErr error
115+
name = d.Get("name").(string)
116+
instanceId = d.Get("instance_id").(string)
117+
isPublic = d.Get("is_public").(bool)
118+
isAutoScan = d.Get("is_auto_scan").(bool)
119+
isPreventVUL = d.Get("is_prevent_vul").(bool)
120+
severity = d.Get("severity").(string)
121+
whitelistItems = d.Get("cve_whitelist_items").([]interface{})
122+
outErr, inErr error
79123
)
80124

81125
outErr = resource.Retry(writeRetryTimeout, func() *resource.RetryError {
82-
inErr = tcrService.CreateTCRNameSpace(ctx, instanceId, name, isPublic)
126+
inErr = tcrService.CreateTCRNameSpace(ctx, instanceId, name, isPublic, isAutoScan, isPreventVUL, severity, whitelistItems)
83127
if inErr != nil {
84128
return retryError(inErr)
85129
}
@@ -109,23 +153,28 @@ func resourceTencentCloudTcrNamespaceUpdate(d *schema.ResourceData, meta interfa
109153
instanceId := items[0]
110154
namespaceName := items[1]
111155

112-
if d.HasChange("is_public") {
113-
isPublic := d.Get("is_public").(bool)
114-
var outErr, inErr error
115-
tcrService := TCRService{client: meta.(*TencentCloudClient).apiV3Conn}
116-
outErr = tcrService.ModifyTCRNameSpace(ctx, instanceId, namespaceName, isPublic)
117-
if outErr != nil {
118-
outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError {
119-
inErr = tcrService.ModifyTCRNameSpace(ctx, instanceId, namespaceName, isPublic)
120-
if inErr != nil {
121-
return retryError(inErr)
122-
}
123-
return nil
124-
})
125-
}
126-
if outErr != nil {
127-
return outErr
128-
}
156+
var (
157+
isPublic = d.Get("is_public").(bool)
158+
isAutoScan = d.Get("is_auto_scan").(bool)
159+
isPreventVUL = d.Get("is_prevent_vul").(bool)
160+
severity = d.Get("severity").(string)
161+
whitelistItems = d.Get("cve_whitelist_items").([]interface{})
162+
outErr, inErr error
163+
)
164+
165+
tcrService := TCRService{client: meta.(*TencentCloudClient).apiV3Conn}
166+
outErr = tcrService.ModifyTCRNameSpace(ctx, instanceId, namespaceName, isPublic, isAutoScan, isPreventVUL, severity, whitelistItems)
167+
if outErr != nil {
168+
outErr = resource.Retry(readRetryTimeout, func() *resource.RetryError {
169+
inErr = tcrService.ModifyTCRNameSpace(ctx, instanceId, namespaceName, isPublic, isAutoScan, isPreventVUL, severity, whitelistItems)
170+
if inErr != nil {
171+
return retryError(inErr)
172+
}
173+
return nil
174+
})
175+
}
176+
if outErr != nil {
177+
return outErr
129178
}
130179

131180
return resourceTencentCloudTcrNamespaceRead(d, meta)
@@ -169,6 +218,22 @@ func resourceTencentCloudTcrNamespaceRead(d *schema.ResourceData, meta interface
169218
_ = d.Set("name", namespace.Name)
170219
_ = d.Set("is_public", namespace.Public)
171220
_ = d.Set("instance_id", instanceId)
221+
_ = d.Set("is_auto_scan", namespace.AutoScan)
222+
_ = d.Set("is_prevent_vul", namespace.PreventVUL)
223+
_ = d.Set("severity", namespace.Severity)
224+
225+
whiteList := []interface{}{}
226+
if namespace.CVEWhitelistItems != nil {
227+
for _, v := range namespace.CVEWhitelistItems {
228+
cveMap := map[string]interface{}{}
229+
if v.CVEID != nil {
230+
cveMap["cve_id"] = v.CVEID
231+
}
232+
233+
whiteList = append(whiteList, cveMap)
234+
}
235+
}
236+
_ = d.Set("cve_whitelist_items", whiteList)
172237

173238
return nil
174239
}

tencentcloud/resource_tc_tcr_namespace_test.go

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,11 @@ func TestAccTencentCloudTCRNamespace_basic_and_update(t *testing.T) {
7777
Check: resource.ComposeAggregateTestCheckFunc(
7878
resource.TestCheckResourceAttr("tencentcloud_tcr_namespace.mytcr_namespace", "name", "test"),
7979
resource.TestCheckResourceAttr("tencentcloud_tcr_namespace.mytcr_namespace", "is_public", "true"),
80+
resource.TestCheckResourceAttr("tencentcloud_tcr_namespace.mytcr_namespace", "is_auto_scan", "true"),
81+
resource.TestCheckResourceAttr("tencentcloud_tcr_namespace.mytcr_namespace", "is_prevent_vul", "true"),
82+
resource.TestCheckResourceAttr("tencentcloud_tcr_namespace.mytcr_namespace", "severity", "medium"),
83+
resource.TestCheckResourceAttr("tencentcloud_tcr_namespace.mytcr_namespace", "cve_whitelist_items.#", "1"),
84+
resource.TestCheckResourceAttr("tencentcloud_tcr_namespace.mytcr_namespace", "cve_whitelist_items.0.cve_id", "cve-xxxxx"),
8085
),
8186
},
8287
{
@@ -90,6 +95,11 @@ func TestAccTencentCloudTCRNamespace_basic_and_update(t *testing.T) {
9095
testAccCheckTCRNamespaceExists("tencentcloud_tcr_namespace.mytcr_namespace"),
9196
resource.TestCheckResourceAttr("tencentcloud_tcr_namespace.mytcr_namespace", "name", "test2"),
9297
resource.TestCheckResourceAttr("tencentcloud_tcr_namespace.mytcr_namespace", "is_public", "false"),
98+
resource.TestCheckResourceAttr("tencentcloud_tcr_namespace.mytcr_namespace", "is_auto_scan", "false"),
99+
resource.TestCheckResourceAttr("tencentcloud_tcr_namespace.mytcr_namespace", "is_prevent_vul", "false"),
100+
resource.TestCheckResourceAttr("tencentcloud_tcr_namespace.mytcr_namespace", "severity", "high"),
101+
resource.TestCheckResourceAttr("tencentcloud_tcr_namespace.mytcr_namespace", "cve_whitelist_items.#", "1"),
102+
resource.TestCheckResourceAttr("tencentcloud_tcr_namespace.mytcr_namespace", "cve_whitelist_items.0.cve_id", "cve-xxxx"),
93103
),
94104
},
95105
},
@@ -157,15 +167,27 @@ func testAccCheckTCRNamespaceExists(n string) resource.TestCheckFunc {
157167
const testAccTCRNamespace_basic = defaultTCRInstanceData + `
158168
159169
resource "tencentcloud_tcr_namespace" "mytcr_namespace" {
160-
instance_id = local.tcr_id
161-
name = "test"
162-
is_public = true
170+
instance_id = local.tcr_id
171+
name = "test"
172+
is_public = true
173+
is_auto_scan = true
174+
is_prevent_vul = true
175+
severity = "medium"
176+
cve_whitelist_items {
177+
cve_id = "cve-xxxxx"
178+
}
163179
}`
164180

165181
const testAccTCRNamespace_basic_update_remark = defaultTCRInstanceData + `
166182
167183
resource "tencentcloud_tcr_namespace" "mytcr_namespace" {
168-
instance_id = local.tcr_id
169-
name = "test2"
170-
is_public = false
184+
instance_id = local.tcr_id
185+
name = "test2"
186+
is_public = false
187+
is_auto_scan = false
188+
is_prevent_vul = false
189+
severity = "high"
190+
cve_whitelist_items {
191+
cve_id = "cve-xxxx"
192+
}
171193
}`

tencentcloud/service_tencentcloud_tcr.go

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,7 @@ func (me *TCRService) DeleteTCRInstance(ctx context.Context, instanceId string,
254254
//long term token
255255

256256
//name space
257-
func (me *TCRService) CreateTCRNameSpace(ctx context.Context, instanceId string, name string, isPublic bool) (errRet error) {
257+
func (me *TCRService) CreateTCRNameSpace(ctx context.Context, instanceId string, name string, isPublic, isAutoScan, isPreventVUL bool, severity string, whitelistItems []interface{}) (errRet error) {
258258
logId := getLogId(ctx)
259259
request := tcr.NewCreateNamespaceRequest()
260260
defer func() {
@@ -265,6 +265,22 @@ func (me *TCRService) CreateTCRNameSpace(ctx context.Context, instanceId string,
265265
request.RegistryId = &instanceId
266266
request.IsPublic = &isPublic
267267
request.NamespaceName = &name
268+
request.IsAutoScan = &isAutoScan
269+
request.IsPreventVUL = &isPreventVUL
270+
if severity != "" {
271+
request.Severity = &severity
272+
}
273+
274+
if len(whitelistItems) > 0 {
275+
for _, item := range whitelistItems {
276+
whitelistItemMap := item.(map[string]interface{})
277+
whitelistItemItem := tcr.CVEWhitelistItem{}
278+
if v, ok := whitelistItemMap["cve_id"]; ok {
279+
whitelistItemItem.CVEID = helper.String(v.(string))
280+
}
281+
request.CVEWhitelistItems = append(request.CVEWhitelistItems, &whitelistItemItem)
282+
}
283+
}
268284

269285
ratelimit.Check(request.GetAction())
270286
response, err := me.client.UseTCRClient().CreateNamespace(request)
@@ -294,7 +310,7 @@ func (me *TCRService) ModifyInstance(ctx context.Context, registryId, registryTy
294310
return err
295311

296312
}
297-
func (me *TCRService) ModifyTCRNameSpace(ctx context.Context, instanceId string, name string, isPublic bool) (errRet error) {
313+
func (me *TCRService) ModifyTCRNameSpace(ctx context.Context, instanceId string, name string, isPublic, isAutoScan, isPreventVUL bool, severity string, whitelistItems []interface{}) (errRet error) {
298314
logId := getLogId(ctx)
299315
request := tcr.NewModifyNamespaceRequest()
300316
defer func() {
@@ -305,6 +321,22 @@ func (me *TCRService) ModifyTCRNameSpace(ctx context.Context, instanceId string,
305321
request.RegistryId = &instanceId
306322
request.NamespaceName = &name
307323
request.IsPublic = &isPublic
324+
request.IsAutoScan = &isAutoScan
325+
request.IsPreventVUL = &isPreventVUL
326+
if severity != "" {
327+
request.Severity = &severity
328+
}
329+
330+
if len(whitelistItems) > 0 {
331+
for _, item := range whitelistItems {
332+
whitelistItemMap := item.(map[string]interface{})
333+
whitelistItemItem := tcr.CVEWhitelistItem{}
334+
if v, ok := whitelistItemMap["cve_id"]; ok {
335+
whitelistItemItem.CVEID = helper.String(v.(string))
336+
}
337+
request.CVEWhitelistItems = append(request.CVEWhitelistItems, &whitelistItemItem)
338+
}
339+
}
308340

309341
ratelimit.Check(request.GetAction())
310342
_, err := me.client.UseTCRClient().ModifyNamespace(request)

vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http/request.go

Lines changed: 1 addition & 1 deletion
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/tcr/v20190924/client.go

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

0 commit comments

Comments
 (0)