Skip to content

Commit 912662f

Browse files
authored
Merge pull request #2070 from tencentcloudstack/fix/add-orderly-sg-ids
feat: add `orderly_security_group_ids` field to set the security group orderly
2 parents 9264764 + b4941cd commit 912662f

File tree

4 files changed

+65
-17
lines changed

4 files changed

+65
-17
lines changed

.changelog/2070.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_kubernetes_node_pool: add `orderly_security_group_ids` field to set the security group orderly.
3+
```

tencentcloud/resource_tc_kubernetes_node_pool.go

Lines changed: 51 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -331,10 +331,21 @@ func composedKubernetesAsScalingConfigPara() map[string]*schema.Schema {
331331
Description: "ID list of keys.",
332332
},
333333
"security_group_ids": {
334-
Type: schema.TypeSet,
335-
Optional: true,
336-
Elem: &schema.Schema{Type: schema.TypeString},
337-
Description: "Security groups to which a CVM instance belongs.",
334+
Type: schema.TypeSet,
335+
Optional: true,
336+
Computed: true,
337+
Elem: &schema.Schema{Type: schema.TypeString},
338+
ConflictsWith: []string{"auto_scaling_config.0.orderly_security_group_ids"},
339+
Deprecated: "The order of elements in this field cannot be guaranteed. Use `orderly_security_group_ids` instead.",
340+
Description: "Security groups to which a CVM instance belongs.",
341+
},
342+
"orderly_security_group_ids": {
343+
Type: schema.TypeList,
344+
Optional: true,
345+
Computed: true,
346+
Elem: &schema.Schema{Type: schema.TypeString},
347+
ConflictsWith: []string{"auto_scaling_config.0.security_group_ids"},
348+
Description: "Ordered security groups to which a CVM instance belongs.",
338349
},
339350
"enhanced_security_service": {
340351
Type: schema.TypeBool,
@@ -764,7 +775,16 @@ func composedKubernetesAsScalingConfigParaSerial(dMap map[string]interface{}, me
764775
}
765776

766777
if v, ok := dMap["security_group_ids"]; ok {
767-
request.SecurityGroupIds = helper.InterfacesStringsPoint(v.(*schema.Set).List())
778+
if list := v.(*schema.Set).List(); len(list) > 0 {
779+
errRet = fmt.Errorf("The parameter `security_group_ids` has an issue that the actual order of the security group may be inconsistent with the order of your tf code, which will cause your service to be inaccessible. Please use `orderly_security_group_ids` instead.")
780+
return result, errRet
781+
}
782+
}
783+
784+
if v, ok := dMap["orderly_security_group_ids"]; ok {
785+
if list := v.([]interface{}); len(list) > 0 {
786+
request.SecurityGroupIds = helper.InterfacesStringsPoint(list)
787+
}
768788
}
769789

770790
request.EnhancedService = &as.EnhancedService{}
@@ -843,7 +863,7 @@ func composedKubernetesAsScalingConfigParaSerial(dMap map[string]interface{}, me
843863
return result, errRet
844864
}
845865

846-
func composeAsLaunchConfigModifyRequest(d *schema.ResourceData, launchConfigId string) *as.ModifyLaunchConfigurationAttributesRequest {
866+
func composeAsLaunchConfigModifyRequest(d *schema.ResourceData, launchConfigId string) (*as.ModifyLaunchConfigurationAttributesRequest, error) {
847867
launchConfigRaw := d.Get("auto_scaling_config").([]interface{})
848868
dMap := launchConfigRaw[0].(map[string]interface{})
849869
request := as.NewModifyLaunchConfigurationAttributesRequest()
@@ -910,8 +930,21 @@ func composeAsLaunchConfigModifyRequest(d *schema.ResourceData, launchConfigId s
910930
request.InternetAccessible.PublicIpAssigned = &publicIpAssigned
911931
}
912932

913-
if v, ok := dMap["security_group_ids"]; ok {
914-
request.SecurityGroupIds = helper.InterfacesStringsPoint(v.(*schema.Set).List())
933+
if d.HasChange("auto_scaling_config.0.security_group_ids") {
934+
if v, ok := dMap["security_group_ids"]; ok {
935+
if list := v.(*schema.Set).List(); len(list) > 0 {
936+
errRet := fmt.Errorf("The parameter `security_group_ids` has an issue that the actual order of the security group may be inconsistent with the order of your tf code, which will cause your service to be inaccessible. You can check whether the order of your current security groups meets your expectations through the TencentCloud Console, then use `orderly_security_group_ids` field to update them.")
937+
return nil, errRet
938+
}
939+
}
940+
}
941+
942+
if d.HasChange("auto_scaling_config.0.orderly_security_group_ids") {
943+
if v, ok := dMap["orderly_security_group_ids"]; ok {
944+
if list := v.([]interface{}); len(list) > 0 {
945+
request.SecurityGroupIds = helper.InterfacesStringsPoint(list)
946+
}
947+
}
915948
}
916949

917950
chargeType, ok := dMap["instance_charge_type"].(string)
@@ -986,7 +1019,7 @@ func composeAsLaunchConfigModifyRequest(d *schema.ResourceData, launchConfigId s
9861019

9871020
request.InstanceChargeType = &chargeType
9881021

989-
return request
1022+
return request, nil
9901023
}
9911024

9921025
func desiredCapacityOutRange(d *schema.ResourceData) bool {
@@ -1186,7 +1219,11 @@ func resourceKubernetesNodePoolRead(d *schema.ResourceData, meta interface{}) er
11861219
if v, ok := d.GetOk("auto_scaling_config.0.password"); ok {
11871220
launchConfig["password"] = v.(string)
11881221
}
1189-
launchConfig["security_group_ids"] = helper.StringsInterfaces(launchCfg.SecurityGroupIds)
1222+
1223+
if launchCfg.SecurityGroupIds != nil {
1224+
launchConfig["security_group_ids"] = helper.StringsInterfaces(launchCfg.SecurityGroupIds)
1225+
launchConfig["orderly_security_group_ids"] = helper.StringsInterfaces(launchCfg.SecurityGroupIds)
1226+
}
11901227

11911228
enableSecurity := launchCfg.EnhancedService.SecurityService.Enabled
11921229
enableMonitor := launchCfg.EnhancedService.MonitorService.Enabled
@@ -1381,7 +1418,10 @@ func resourceKubernetesNodePoolUpdate(d *schema.ResourceData, meta interface{})
13811418
}
13821419
launchConfigId := *nodePool.LaunchConfigurationId
13831420
// change as config here
1384-
request := composeAsLaunchConfigModifyRequest(d, launchConfigId)
1421+
request, composeError := composeAsLaunchConfigModifyRequest(d, launchConfigId)
1422+
if composeError != nil {
1423+
return composeError
1424+
}
13851425
_, err = client.UseAsClient().ModifyLaunchConfigurationAttributes(request)
13861426
if err != nil {
13871427
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n",

tencentcloud/resource_tc_kubernetes_node_pool_test.go

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ func TestAccTencentCloudKubernetesNodePoolResource_basic(t *testing.T) {
103103
resource.TestCheckResourceAttr(testTkeClusterNodePoolResourceKey, "manually_added_total", "0"),
104104
resource.TestCheckResourceAttr(testTkeClusterNodePoolResourceKey, "tags.keep-test-np1", "test1"),
105105
resource.TestCheckResourceAttr(testTkeClusterNodePoolResourceKey, "tags.keep-test-np2", "test2"),
106-
resource.TestCheckResourceAttr(testTkeClusterNodePoolResourceKey, "auto_scaling_config.0.security_group_ids.#", "1"),
106+
resource.TestCheckResourceAttr(testTkeClusterNodePoolResourceKey, "auto_scaling_config.0.orderly_security_group_ids.#", "2"),
107107
resource.TestCheckResourceAttr(testTkeClusterNodePoolResourceKey, "auto_scaling_config.0.host_name", "12.123.0.0"),
108108
resource.TestCheckResourceAttr(testTkeClusterNodePoolResourceKey, "auto_scaling_config.0.host_name_style", "ORIGINAL"),
109109
resource.TestCheckResourceAttr(testTkeClusterNodePoolResourceKey, "auto_scaling_config.0.enhanced_security_service", "false"),
@@ -138,7 +138,7 @@ func TestAccTencentCloudKubernetesNodePoolResource_basic(t *testing.T) {
138138
resource.TestCheckResourceAttr(testTkeClusterNodePoolResourceKey, "termination_policies.0", "NEWEST_INSTANCE"),
139139
resource.TestCheckResourceAttr(testTkeClusterNodePoolResourceKey, "tags.keep-test-np1", "testI"),
140140
resource.TestCheckResourceAttr(testTkeClusterNodePoolResourceKey, "tags.keep-test-np3", "testIII"),
141-
resource.TestCheckResourceAttr(testTkeClusterNodePoolResourceKey, "auto_scaling_config.0.security_group_ids.#", "2"),
141+
resource.TestCheckResourceAttr(testTkeClusterNodePoolResourceKey, "auto_scaling_config.0.orderly_security_group_ids.#", "4"),
142142
resource.TestCheckResourceAttr(testTkeClusterNodePoolResourceKey, "auto_scaling_config.0.host_name", "12.123.1.1"),
143143
resource.TestCheckResourceAttr(testTkeClusterNodePoolResourceKey, "auto_scaling_config.0.host_name_style", "UNIQUE"),
144144
resource.TestCheckResourceAttr(testTkeClusterNodePoolResourceKey, "auto_scaling_config.0.enhanced_security_service", "true"),
@@ -276,6 +276,10 @@ data "tencentcloud_security_groups" "sg" {
276276
data "tencentcloud_security_groups" "sg_as" {
277277
name = "keep-for-as"
278278
}
279+
280+
data "tencentcloud_security_groups" "sg_keep" {
281+
name = "keep-"
282+
}
279283
`
280284

281285
const testAccTkeNodePoolCluster string = testAccTkeNodePoolClusterBasic + `
@@ -300,7 +304,7 @@ resource "tencentcloud_kubernetes_node_pool" "np_test" {
300304
instance_type = var.ins_type
301305
system_disk_type = "CLOUD_PREMIUM"
302306
system_disk_size = "50"
303-
security_group_ids = [data.tencentcloud_security_groups.sg.security_groups[0].security_group_id]
307+
orderly_security_group_ids = [data.tencentcloud_security_groups.sg.security_groups[0].security_group_id, data.tencentcloud_security_groups.sg_keep.security_groups[0].security_group_id]
304308
cam_role_name = "TCB_QcsRole"
305309
data_disk {
306310
disk_type = "CLOUD_PREMIUM"
@@ -364,7 +368,7 @@ resource "tencentcloud_kubernetes_node_pool" "np_test" {
364368
instance_type = var.ins_type
365369
system_disk_type = "CLOUD_PREMIUM"
366370
system_disk_size = "100"
367-
security_group_ids = [data.tencentcloud_security_groups.sg.security_groups[0].security_group_id, data.tencentcloud_security_groups.sg_as.security_groups[0].security_group_id]
371+
orderly_security_group_ids = [data.tencentcloud_security_groups.sg.security_groups[0].security_group_id, data.tencentcloud_security_groups.sg_as.security_groups[0].security_group_id, data.tencentcloud_security_groups.sg_keep.security_groups[0].security_group_id, data.tencentcloud_security_groups.sg_keep.security_groups[1].security_group_id]
368372
instance_charge_type = "SPOTPAID"
369373
spot_instance_type = "one-time"
370374
spot_max_price = "1000"
@@ -439,7 +443,7 @@ resource "tencentcloud_kubernetes_node_pool" "np_test" {
439443
cam_role_name = "TCB_QcsRole"
440444
system_disk_type = "CLOUD_PREMIUM"
441445
system_disk_size = "50"
442-
security_group_ids = [data.tencentcloud_security_groups.sg.security_groups[0].security_group_id]
446+
orderly_security_group_ids = [data.tencentcloud_security_groups.sg.security_groups[0].security_group_id]
443447
444448
data_disk {
445449
disk_type = "CLOUD_PREMIUM"
@@ -479,7 +483,7 @@ resource "tencentcloud_kubernetes_node_pool" "np_test" {
479483
instance_type = "GN6S.LARGE20"
480484
system_disk_type = "CLOUD_PREMIUM"
481485
system_disk_size = "100"
482-
security_group_ids = [data.tencentcloud_security_groups.sg.security_groups[0].security_group_id, data.tencentcloud_security_groups.sg_as.security_groups[0].security_group_id]
486+
orderly_security_group_ids = [data.tencentcloud_security_groups.sg.security_groups[0].security_group_id, data.tencentcloud_security_groups.sg_as.security_groups[0].security_group_id]
483487
instance_charge_type = "SPOTPAID"
484488
spot_instance_type = "one-time"
485489
spot_max_price = "1000"

website/docs/r/kubernetes_node_pool.html.markdown

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,7 @@ The `auto_scaling_config` object supports the following:
201201
* `internet_charge_type` - (Optional, String) Charge types for network traffic. Valid value: `BANDWIDTH_PREPAID`, `TRAFFIC_POSTPAID_BY_HOUR`, `TRAFFIC_POSTPAID_BY_HOUR` and `BANDWIDTH_PACKAGE`.
202202
* `internet_max_bandwidth_out` - (Optional, Int) Max bandwidth of Internet access in Mbps. Default is `0`.
203203
* `key_ids` - (Optional, List, ForceNew) ID list of keys.
204+
* `orderly_security_group_ids` - (Optional, List) Ordered security groups to which a CVM instance belongs.
204205
* `password` - (Optional, String, ForceNew) Password to access.
205206
* `public_ip_assigned` - (Optional, Bool) Specify whether to assign an Internet IP address.
206207
* `security_group_ids` - (Optional, Set) Security groups to which a CVM instance belongs.

0 commit comments

Comments
 (0)