Skip to content

Commit 6d797ad

Browse files
authored
feat: ckafka - support maz (#934)
* feat: ckafka - support maz * fix: ckafka MAZ testcase
1 parent 90cec67 commit 6d797ad

File tree

11 files changed

+2422
-30
lines changed

11 files changed

+2422
-30
lines changed

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,11 @@ require (
2626
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb v1.0.199
2727
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdn v1.0.199
2828
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfs v1.0.199
29-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka v1.0.310
29+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka v1.0.376
3030
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb v1.0.283
3131
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit v1.0.199
3232
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls v1.0.291
33-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.370
33+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.376
3434
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.351
3535
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.359
3636
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dayu v1.0.335

go.sum

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -476,6 +476,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka v1.0.199 h1:bxeY
476476
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka v1.0.199/go.mod h1:toYhD7pJDpz6XY3cf/zhUXtKDRt1CbLkgmOidQ2j8kA=
477477
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka v1.0.310 h1:Pvmbf9yy3QVaBobjQKV1sqOQrWFChrsazO8nlLjRryw=
478478
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka v1.0.310/go.mod h1:toYhD7pJDpz6XY3cf/zhUXtKDRt1CbLkgmOidQ2j8kA=
479+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka v1.0.376 h1:q7TNQ/5zalD483Z6ufGtxeZIEgO0eUN+5M9y1qxg/ck=
480+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka v1.0.376/go.mod h1:YVajJ5YZ8YIFtecbXknudDPXLfG1oRwrL6GxZel5rY8=
479481
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb v1.0.283 h1:8pML0UtXgui5WZFLLrCv6QdR8e0fUva0V4W5wSgTCSc=
480482
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb v1.0.283/go.mod h1:zgARzAnsLzpLhdpAHrHTUilOXytH9aEJy5ssCdizVV0=
481483
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit v1.0.199 h1:o41qFAFJGPDTLNWXs7nLw4fsDxFUCe5gkO2YXI9Ye6Q=
@@ -507,6 +509,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.369 h1:Ipg0
507509
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.369/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
508510
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.370 h1:FlmNH0W03TG5uBwXuSp4RZz7N56Y1+FAYYBFc8+wFTQ=
509511
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.370/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
512+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.376 h1:pXsCDParuAiDUt/SuDBeJ0Fv90kItYMbk37W1cMVHck=
513+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.376/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
510514
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.199 h1:ajgJogYSIQ5u1PIbiV5nsvr5K0fYpm1/T7Dy+mxEM6U=
511515
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.199/go.mod h1:AqyM/ZZMD7q5mHBqNY9YImbSpEpoEe7E/vrTbUWX+po=
512516
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.351 h1:zqJsH5pxGT57La7NAOOyMQxsuM11pupNBwV1dzXcT24=

tencentcloud/internal/helper/transform.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,14 @@ func Uint64sInterfaces(list []*uint64) []interface{} {
102102
return vi
103103
}
104104

105+
func Int64sInterfaces(list []*int64) []interface{} {
106+
vi := make([]interface{}, 0, len(list))
107+
for _, v := range list {
108+
vi = append(vi, int(*v))
109+
}
110+
return vi
111+
}
112+
105113
func BoolToInt64Pointer(s bool) (i *uint64) {
106114
result := uint64(0)
107115
if s {

tencentcloud/resource_tc_ckafka_instance.go

Lines changed: 51 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,18 @@ func resourceTencentCloudCkafkaInstance() *schema.Resource {
7373
Required: true,
7474
ForceNew: true,
7575
Description: "Available zone id.",
76+
DiffSuppressFunc: func(k, old, new string, d *schema.ResourceData) bool {
77+
multiZone := d.Get("multi_zone_flag").(bool)
78+
zoneId := d.Get("zone_id").(int)
79+
v, ok := d.GetOk("zone_ids")
80+
81+
if !multiZone || !ok {
82+
return old == new
83+
}
84+
85+
zoneIds := v.(*schema.Set)
86+
return zoneIds.Contains(zoneId)
87+
},
7688
},
7789
"period": {
7890
Type: schema.TypeInt,
@@ -136,6 +148,20 @@ func resourceTencentCloudCkafkaInstance() *schema.Resource {
136148
ForceNew: true,
137149
Description: "Partition size, the professional version does not need set.",
138150
},
151+
"multi_zone_flag": {
152+
Type: schema.TypeBool,
153+
Optional: true,
154+
ForceNew: true,
155+
Description: "Indicates whether the instance is multi zones. NOTE: if set to `true`, `zone_ids` must set together.",
156+
},
157+
"zone_ids": {
158+
Type: schema.TypeSet,
159+
Optional: true,
160+
ForceNew: true,
161+
Description: "List of available zone id. NOTE: this argument must set together with `multi_zone_flag`.",
162+
RequiredWith: []string{"multi_zone_flag"},
163+
Elem: &schema.Schema{Type: schema.TypeInt},
164+
},
139165
"tags": {
140166
Type: schema.TypeList,
141167
Optional: true,
@@ -261,7 +287,6 @@ func resourceTencentCloudCkafkaInstanceCreate(d *schema.ResourceData, meta inter
261287
request.ZoneId = &zoneId
262288

263289
period := int64(d.Get("period").(int))
264-
log.Printf(fmt.Sprintf("%dm", period))
265290
request.Period = helper.String(fmt.Sprintf("%dm", period))
266291
// only support create profession instance
267292
request.InstanceType = helper.Int64(1)
@@ -320,6 +345,14 @@ func resourceTencentCloudCkafkaInstanceCreate(d *schema.ResourceData, meta inter
320345
request.DiskType = helper.String(diskType)
321346
}
322347

348+
if flag := d.Get("multi_zone_flag").(bool); flag {
349+
request.MultiZoneFlag = helper.Bool(flag)
350+
ids := d.Get("zone_ids").(*schema.Set).List()
351+
for _, v := range ids {
352+
request.ZoneIds = append(request.ZoneIds, helper.IntInt64(v.(int)))
353+
}
354+
}
355+
323356
result, err := service.client.UseCkafkaClient().CreateInstancePre(request)
324357
response = result
325358

@@ -462,6 +495,16 @@ func resourceTencentCloudCkafkaInstanceRead(d *schema.ResourceData, meta interfa
462495
_ = d.Set("disk_size", info.DiskSize)
463496
_ = d.Set("band_width", info.Bandwidth)
464497
_ = d.Set("partition", info.MaxPartitionNumber)
498+
499+
if len(info.ZoneIds) > 0 {
500+
_ = d.Set("multi_zone_flag", true)
501+
ids := helper.Int64sInterfaces(info.ZoneIds)
502+
idSet := schema.NewSet(func(i interface{}) int {
503+
return i.(int)
504+
}, ids)
505+
_ = d.Set("zone_ids", idSet)
506+
}
507+
465508
tagSets := make([]map[string]interface{}, 0, len(info.Tags))
466509
for _, item := range info.Tags {
467510
tagSets = append(tagSets, map[string]interface{}{
@@ -610,7 +653,13 @@ func resourceTencentCLoudCkafkaInstanceDelete(d *schema.ResourceData, meta inter
610653
)
611654
instanceId := d.Id()
612655
request.InstanceId = &instanceId
613-
_, err := service.client.UseCkafkaClient().DeleteInstancePre(request)
656+
err := resource.Retry(writeRetryTimeout, func() *resource.RetryError {
657+
_, err := service.client.UseCkafkaClient().DeleteInstancePre(request)
658+
if err != nil {
659+
retryError(err, "UnsupportedOperation")
660+
}
661+
return nil
662+
})
614663
if err != nil {
615664
return err
616665
}

tencentcloud/resource_tc_ckafka_instance_test.go

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,31 @@ func TestAccTencentCloudKafkaInstance(t *testing.T) {
5353
})
5454
}
5555

56+
func TestAccTencentCloudKafkaInstanceMAZ(t *testing.T) {
57+
t.Parallel()
58+
resource.Test(t, resource.TestCase{
59+
PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) },
60+
Providers: testAccProviders,
61+
CheckDestroy: testAccTencentCloudKafkaInstanceDestroy,
62+
Steps: []resource.TestStep{
63+
{
64+
Config: testAccKafkaInstanceMAZ,
65+
Check: resource.ComposeTestCheckFunc(
66+
testAccCheckKafkaInstanceExists("tencentcloud_ckafka_instance.kafka_instance"),
67+
resource.TestCheckResourceAttr("tencentcloud_ckafka_instance.kafka_instance", "instance_name", "ckafka-instance-tf-test"),
68+
resource.TestCheckResourceAttr("tencentcloud_ckafka_instance.kafka_instance", "zone_id", "100006"),
69+
resource.TestCheckResourceAttr("tencentcloud_ckafka_instance.kafka_instance", "zone_ids.#", "2"),
70+
),
71+
},
72+
{
73+
ResourceName: "tencentcloud_ckafka_instance.kafka_instance",
74+
ImportState: true,
75+
ImportStateVerify: true,
76+
},
77+
},
78+
})
79+
}
80+
5681
func testAccTencentCloudKafkaInstanceDestroy(s *terraform.State) error {
5782
logId := getLogId(contextNil)
5883
ctx := context.WithValue(context.TODO(), logIdKey, logId)
@@ -186,6 +211,52 @@ resource "tencentcloud_ckafka_instance" "kafka_instance" {
186211
disk_type = "CLOUD_BASIC"
187212
188213
214+
config {
215+
auto_create_topic_enable = true
216+
default_num_partitions = 3
217+
default_replication_factor = 3
218+
}
219+
220+
dynamic_retention_config {
221+
enable = 1
222+
}
223+
}
224+
`
225+
226+
const testAccKafkaInstanceMAZ = `
227+
resource "tencentcloud_route_table" "rtb_test" {
228+
name = "rtb-test"
229+
vpc_id = "${tencentcloud_vpc.vpc_test.id}"
230+
}
231+
232+
resource "tencentcloud_subnet" "subnet_test" {
233+
name = "subnet-test"
234+
cidr_block = "10.0.1.0/24"
235+
availability_zone = "ap-guangzhou-6"
236+
vpc_id = tencentcloud_vpc.vpc_test.id
237+
route_table_id = tencentcloud_route_table.rtb_test.id
238+
}
239+
240+
resource "tencentcloud_vpc" "vpc_test" {
241+
name = "vpc-test"
242+
cidr_block = "10.0.0.0/16"
243+
}
244+
245+
resource "tencentcloud_ckafka_instance" "kafka_instance" {
246+
instance_name = "ckafka-instance-tf-test"
247+
zone_id = 100006
248+
multi_zone_flag = true
249+
zone_ids = [100007, 100006]
250+
period = 1
251+
vpc_id = tencentcloud_vpc.vpc_test.id
252+
subnet_id = tencentcloud_subnet.subnet_test.id
253+
msg_retention_time = 1300
254+
renew_flag = 0
255+
kafka_version = "1.1.1"
256+
disk_size = 500
257+
disk_type = "CLOUD_BASIC"
258+
259+
189260
config {
190261
auto_create_topic_enable = true
191262
default_num_partitions = 3

0 commit comments

Comments
 (0)