Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit aeb93f6

Browse files
authoredMar 21, 2025··
feat(cvm): [122162302] support affinity and tags (#3229)
* add affinity * add affinity * add affinity
1 parent 05cf3e2 commit aeb93f6

File tree

10 files changed

+102
-21
lines changed

10 files changed

+102
-21
lines changed
 

‎.changelog/3229.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_placement_group: support `affinity` and `tags`
3+
```

‎go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@ require (
4646
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb v1.0.1107
4747
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit v1.0.1033
4848
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls v1.0.1078
49-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1126
50-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.1126
49+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1128
50+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.1128
5151
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp v1.0.762
5252
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.1111
5353
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dayu v1.0.335

‎go.sum

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -816,8 +816,6 @@ github.com/t-yuki/gocover-cobertura v0.0.0-20180217150009-aaee18c8195c h1:+aPplB
816816
github.com/t-yuki/gocover-cobertura v0.0.0-20180217150009-aaee18c8195c/go.mod h1:SbErYREK7xXdsRiigaQiQkI9McGRzYMvlKYaP3Nimdk=
817817
github.com/tdakkota/asciicheck v0.2.0 h1:o8jvnUANo0qXtnslk2d3nMKTFNlOnJjRrNcj0j9qkHM=
818818
github.com/tdakkota/asciicheck v0.2.0/go.mod h1:Qb7Y9EgjCLJGup51gDHFzbI08/gbGhL/UVhYIPWG2rg=
819-
github.com/tencentcloud/tencentcloud-sdk-go-intl-en v3.0.1114+incompatible h1:Qo2u4QpYzsrrTedOFmNyDIghJMsFSa/Dn3HfnTWtTfs=
820-
github.com/tencentcloud/tencentcloud-sdk-go-intl-en v3.0.1114+incompatible/go.mod h1:72Wo6Gt6F8d8V+njrAmduVoT9QjPwCyXktpqCWr7PUc=
821819
github.com/tencentcloud/tencentcloud-sdk-go-intl-en v3.0.1161+incompatible h1:gGfe9oRCYZAWxd/xm0k8NaLmEssVPPl7pEwO022Arb4=
822820
github.com/tencentcloud/tencentcloud-sdk-go-intl-en v3.0.1161+incompatible/go.mod h1:72Wo6Gt6F8d8V+njrAmduVoT9QjPwCyXktpqCWr7PUc=
823821
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/antiddos v1.0.799 h1:u49r1bGFDY0CeAF46iotNnLtc5yplPf9XXa7W7zJ4fE=
@@ -920,7 +918,6 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1033/go.mod
920918
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1034/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
921919
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1037/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
922920
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1038/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
923-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1053/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
924921
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1056/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
925922
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1066/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
926923
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1071/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
@@ -933,18 +930,15 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1107/go.mod
933930
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1108/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
934931
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1111/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
935932
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1115/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
936-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1122 h1:jffjOBJ1ejT4ldClIIEI+QnfV5K2RubA+xNiz6uuFOU=
937933
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1122/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
938-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1126 h1:HHWE825wxwoEEZVB9CLgPpXOiFy6hZXJMcCjCAOckAU=
939-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1126/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
934+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1128 h1:NGnqDc8FQL0YdiCHgTO4Wkso6ToD8rE3JW9VOzoPBNA=
935+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1128/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
940936
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/controlcenter v1.0.993 h1:WlPgXldQCxt7qi5Xrc6j6zTrsXWzN5BcOGs7Irq7fwQ=
941937
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/controlcenter v1.0.993/go.mod h1:Z9U8zNtyuyKhjS0698wqsrG/kLx1TQ5CEixXBwVe7xY=
942938
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/csip v1.0.860 h1:F3esKBIT3HW9+7Gt8cVgf8X06VdGIczpgLBUECzSEzU=
943939
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/csip v1.0.860/go.mod h1:NZo1WplQcC314kMlCRUoy8NQju2BnolIJj7NAWgsuhY=
944-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.1053 h1:x193cxbzh+bXxxcq9NGzriW0jCxQHJd6mT79kcfUqSs=
945-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.1053/go.mod h1:yM5i22uG9HKuUwwz+XvrDW9oBtZdb7avyDrMrS/FBIs=
946-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.1126 h1:JdhKLXoTETh13Oe9d4yBXljwfubfCEa6HjX60PtpbRY=
947-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.1126/go.mod h1:DTeq5O98dERO/YvCPVrmr533PZd8OQhHmaucRe2pjnY=
940+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.1128 h1:qoSzTKnmGdXlfphMoEwqgaGjs5gwOy/PqzMu7dlLHNM=
941+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.1128/go.mod h1:hVNSxeomc/AQsJphdbPnPINsO0cMLcVAA6kituTD2g0=
948942
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp v1.0.762 h1:2egy69SP/wPsmnfozcQVZ6tUY6F6N/TpEe/7xtXrc/8=
949943
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp v1.0.762/go.mod h1:1XylIfNUbAzmNqi4XMhwcM3VhmUHdu1OYybOeaJ4sOw=
950944
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.1111 h1:Y7LLIZEQh8OAbnBWppUopu2PjPaQOO9Jzhp8LZO7adI=

‎tencentcloud/services/cvm/resource_tc_placement_group.go

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ package cvm
33
import (
44
"context"
55

6+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
7+
svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag"
8+
69
tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
710

811
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
@@ -34,6 +37,19 @@ func ResourceTencentCloudPlacementGroup() *schema.Resource {
3437
ValidateFunc: tccommon.ValidateAllowedStringValue(CVM_PLACEMENT_GROUP_TYPE),
3538
Description: "Type of the placement group. Valid values: `HOST`, `SW` and `RACK`.",
3639
},
40+
"affinity": {
41+
Type: schema.TypeInt,
42+
Optional: true,
43+
Computed: true,
44+
ForceNew: true,
45+
ValidateFunc: tccommon.ValidateIntegerInRange(1, 10),
46+
Description: "Affinity of the placement group.Valid values: 1~10, default is 1.",
47+
},
48+
"tags": {
49+
Type: schema.TypeMap,
50+
Optional: true,
51+
Description: "Tags of the placement group.",
52+
},
3753

3854
// computed
3955
"cvm_quota_total": {
@@ -65,10 +81,26 @@ func resourceTencentCloudPlacementGroupCreate(d *schema.ResourceData, meta inter
6581
}
6682
placementName := d.Get("name").(string)
6783
placementType := d.Get("type").(string)
84+
85+
var affinity int
86+
if v, ok := d.GetOkExists("affinity"); ok {
87+
affinity = v.(int)
88+
}
89+
90+
tags := make([]*cvm.Tag, 0)
91+
if v := helper.GetTags(d, "tags"); len(v) > 0 {
92+
for tagKey, tagValue := range v {
93+
tag := cvm.Tag{
94+
Key: helper.String(tagKey),
95+
Value: helper.String(tagValue),
96+
}
97+
tags = append(tags, &tag)
98+
}
99+
}
68100
var id string
69101
var errRet error
70102
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
71-
id, errRet = cvmService.CreatePlacementGroup(ctx, placementName, placementType)
103+
id, errRet = cvmService.CreatePlacementGroup(ctx, placementName, placementType, affinity, tags)
72104
if errRet != nil {
73105
return tccommon.RetryError(errRet)
74106
}
@@ -112,10 +144,15 @@ func resourceTencentCloudPlacementGroupRead(d *schema.ResourceData, meta interfa
112144

113145
_ = d.Set("name", placement.Name)
114146
_ = d.Set("type", placement.Type)
147+
_ = d.Set("affinity", placement.Affinity)
115148
_ = d.Set("cvm_quota_total", placement.CvmQuotaTotal)
116149
_ = d.Set("current_num", placement.CurrentNum)
117150
_ = d.Set("create_time", placement.CreateTime)
118151

152+
if len(placement.Tags) > 0 {
153+
_ = d.Set("tags", flattenInstanceTagsMapping(placement.Tags))
154+
}
155+
119156
return nil
120157
}
121158

@@ -142,6 +179,20 @@ func resourceTencentCloudPlacementGroupUpdate(d *schema.ResourceData, meta inter
142179
}
143180
}
144181

182+
if d.HasChange("tags") {
183+
oldValue, newValue := d.GetChange("tags")
184+
replaceTags, deleteTags := svctag.DiffTags(oldValue.(map[string]interface{}), newValue.(map[string]interface{}))
185+
186+
client := meta.(tccommon.ProviderMeta).GetAPIV3Conn()
187+
tagService := svctag.NewTagService(client)
188+
region := client.Region
189+
resourceName := tccommon.BuildTagResourceName("cvm", "ps", region, d.Id())
190+
err := tagService.ModifyTags(ctx, resourceName, replaceTags, deleteTags)
191+
if err != nil {
192+
return err
193+
}
194+
}
195+
145196
return resourceTencentCloudPlacementGroupRead(d, meta)
146197
}
147198

‎tencentcloud/services/cvm/resource_tc_placement_group.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,12 @@ Example Usage
44

55
```hcl
66
resource "tencentcloud_placement_group" "foo" {
7-
name = "test"
8-
type = "HOST"
7+
name = "test"
8+
type = "HOST"
9+
affinity = 2
10+
tags = {
11+
createBy = "terraform"
12+
}
913
}
1014
```
1115

‎tencentcloud/services/cvm/service_tencentcloud_cvm.go

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -759,12 +759,24 @@ func (me *CvmService) BindKeyPair(ctx context.Context, keyIds []*string, instanc
759759
return nil
760760
}
761761

762-
func (me *CvmService) CreatePlacementGroup(ctx context.Context, placementName, placementType string) (placementId string, errRet error) {
762+
func (me *CvmService) CreatePlacementGroup(ctx context.Context, placementName, placementType string, affinity int, tags []*cvm.Tag) (placementId string, errRet error) {
763763
logId := tccommon.GetLogId(ctx)
764764
request := cvm.NewCreateDisasterRecoverGroupRequest()
765765
request.Name = &placementName
766766
request.Type = &placementType
767767

768+
if affinity != 0 {
769+
request.Affinity = helper.IntInt64(affinity)
770+
}
771+
772+
if len(tags) > 0 {
773+
tagSpecification := cvm.TagSpecification{
774+
ResourceType: helper.String("ps"),
775+
Tags: tags,
776+
}
777+
request.TagSpecification = append(request.TagSpecification, &tagSpecification)
778+
}
779+
768780
ratelimit.Check(request.GetAction())
769781
response, err := me.client.UseCvmClient().CreateDisasterRecoverGroup(request)
770782
if err != nil {
@@ -1905,3 +1917,11 @@ func (me *CvmService) DeleteCvmInstanceActionTimerById(ctx context.Context, acti
19051917

19061918
return
19071919
}
1920+
1921+
func flattenInstanceTagsMapping(list []*cvm.Tag) map[string]interface{} {
1922+
result := make(map[string]interface{}, len(list))
1923+
for _, v := range list {
1924+
result[*v.Key] = *v.Value
1925+
}
1926+
return result
1927+
}

‎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/cvm/v20170312/models.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.

‎vendor/modules.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1166,7 +1166,7 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit/v20190319
11661166
# github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls v1.0.1078
11671167
## explicit; go 1.14
11681168
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls/v20201016
1169-
# github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1126
1169+
# github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1128
11701170
## explicit; go 1.11
11711171
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common
11721172
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors
@@ -1180,7 +1180,7 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/controlcenter/v20230110
11801180
# github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/csip v1.0.860
11811181
## explicit; go 1.14
11821182
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/csip/v20221121
1183-
# github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.1126
1183+
# github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.1128
11841184
## explicit; go 1.14
11851185
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312
11861186
# github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp v1.0.762

‎website/docs/r/placement_group.html.markdown

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,12 @@ Provide a resource to create a placement group.
1515

1616
```hcl
1717
resource "tencentcloud_placement_group" "foo" {
18-
name = "test"
19-
type = "HOST"
18+
name = "test"
19+
type = "HOST"
20+
affinity = 2
21+
tags = {
22+
createBy = "terraform"
23+
}
2024
}
2125
```
2226

@@ -26,6 +30,8 @@ The following arguments are supported:
2630

2731
* `name` - (Required, String) Name of the placement group, 1-60 characters in length.
2832
* `type` - (Required, String, ForceNew) Type of the placement group. Valid values: `HOST`, `SW` and `RACK`.
33+
* `affinity` - (Optional, Int, ForceNew) Affinity of the placement group.Valid values: 1~10, default is 1.
34+
* `tags` - (Optional, Map) Tags of the placement group.
2935

3036
## Attributes Reference
3137

0 commit comments

Comments
 (0)
Please sign in to comment.