Skip to content

Commit b392783

Browse files
Modify the problem in the code review
1 parent 4037357 commit b392783

File tree

5 files changed

+83
-65
lines changed

5 files changed

+83
-65
lines changed

tencentcloud/data_source_tc_ckafka_topics.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ func dataSourceTencentCloudCkafkaTopics() *schema.Resource {
130130
Description: "Clear log policy, log clear mode. delete: logs are deleted according to the storage time, compact: logs are compressed according to the key, compact, delete: logs are compressed according to the key and will be deleted according to the storage time.",
131131
},
132132
"unclean_leader_election_enable": {
133-
Type: schema.TypeInt,
133+
Type: schema.TypeBool,
134134
Computed: true,
135135
Description: "Whether to allow unsynchronized replicas to be selected as leader, false: not allowed, true: allowed, not allowed by default.",
136136
},
@@ -181,6 +181,10 @@ func dataSourceTencentCloudCkafkaTopicRead(d *schema.ResourceData, meta interfac
181181
ids := make([]string, 0, len(topicDetails))
182182

183183
for _, topic := range topicDetails {
184+
uncleanLeaderElectionEnable := false
185+
if *topic.Config.UncleanLeaderElectionEnable == int64(1) {
186+
uncleanLeaderElectionEnable = true
187+
}
184188
instance := map[string]interface{}{
185189
"topic_name": topic.TopicName,
186190
"topic_id": topic.TopicId,
@@ -196,7 +200,7 @@ func dataSourceTencentCloudCkafkaTopicRead(d *schema.ResourceData, meta interfac
196200
"retention": topic.Config.Retention,
197201
"sync_replica_min_num": topic.Config.MinInsyncReplicas,
198202
"clean_up_policy": topic.Config.CleanUpPolicy,
199-
"unclean_leader_election_enable": topic.Config.UncleanLeaderElectionEnable,
203+
"unclean_leader_election_enable": uncleanLeaderElectionEnable,
200204
"max_message_bytes": topic.Config.MaxMessageBytes,
201205
"segment": topic.Config.SegmentMs,
202206
"segment_bytes": topic.Config.SegmentBytes,

tencentcloud/data_source_tc_ckafka_topics_test.go

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,24 @@ func TestAccTencentCloudCkafkaTopicDataSource(t *testing.T) {
1717
Check: resource.ComposeTestCheckFunc(
1818
testAccCheckKafkaTopicInstanceExists("tencentcloud_ckafka_topic.kafka_topic"),
1919
resource.TestCheckResourceAttr("data.tencentcloud_ckafka_topics.kafka_topics", "instance_id", "ckafka-f9ife4zz"),
20-
resource.TestCheckResourceAttrSet("data.tencentcloud_ckafka_topics.kafka_topics", "instance_list.#"),
20+
resource.TestCheckResourceAttr("data.tencentcloud_ckafka_topics.kafka_topics", "instance_list.#", "1"),
2121
resource.TestCheckResourceAttr("data.tencentcloud_ckafka_topics.kafka_topics", "instance_list.0.topic_name", "ckafkaTopic-tf-test"),
2222
resource.TestCheckResourceAttr("data.tencentcloud_ckafka_topics.kafka_topics", "instance_list.0.partition_num", "1"),
2323
resource.TestCheckResourceAttr("data.tencentcloud_ckafka_topics.kafka_topics", "instance_list.0.replica_num", "2"),
2424
resource.TestCheckResourceAttrSet("data.tencentcloud_ckafka_topics.kafka_topics", "instance_list.0.create_time"),
25+
resource.TestCheckResourceAttr("data.tencentcloud_ckafka_topics.kafka_topics", "instance_list.0.note", "test topic"),
26+
resource.TestCheckResourceAttr("tencentcloud_ckafka_topic.kafka_topic", "enable_white_list", "1"),
27+
resource.TestCheckResourceAttr("tencentcloud_ckafka_topic.kafka_topic", "ip_white_list.#", "1"),
28+
resource.TestCheckResourceAttr("tencentcloud_ckafka_topic.kafka_topic", "ip_white_list.0", "192.168.1.1"),
29+
resource.TestCheckResourceAttr("tencentcloud_ckafka_topic.kafka_topic", "clean_up_policy", "delete"),
30+
resource.TestCheckResourceAttr("tencentcloud_ckafka_topic.kafka_topic", "sync_replica_min_num", "1"),
31+
resource.TestCheckResourceAttrSet("tencentcloud_ckafka_topic.kafka_topic", "unclean_leader_election_enable"),
32+
resource.TestCheckResourceAttr("tencentcloud_ckafka_topic.kafka_topic", "segment", "3600000"),
33+
resource.TestCheckResourceAttr("tencentcloud_ckafka_topic.kafka_topic", "retention", "60000"),
34+
resource.TestCheckResourceAttr("data.tencentcloud_ckafka_topics.foo", "instance_list.#", "1"),
35+
resource.TestCheckResourceAttr("data.tencentcloud_ckafka_topics.foo", "instance_list.0.partition_num", "1"),
36+
resource.TestCheckResourceAttr("data.tencentcloud_ckafka_topics.foo", "instance_list.0.replica_num", "2"),
37+
resource.TestCheckResourceAttrSet("data.tencentcloud_ckafka_topics.foo", "instance_list.0.create_time"),
2538
),
2639
},
2740
},
@@ -30,14 +43,26 @@ func TestAccTencentCloudCkafkaTopicDataSource(t *testing.T) {
3043

3144
const testAccTencentCloudCkafkaTopicDataSourceConfig = `
3245
resource "tencentcloud_ckafka_topic" "kafka_topic" {
33-
instance_id = "ckafka-f9ife4zz"
34-
topic_name = "ckafkaTopic-tf-test"
35-
replica_num = 2
36-
partition_num = 1
46+
instance_id = "ckafka-f9ife4zz"
47+
topic_name = "ckafkaTopic-tf-test"
48+
replica_num = 2
49+
partition_num = 1
50+
note = "test topic"
51+
enable_white_list = 1
52+
ip_white_list = ["192.168.1.1"]
53+
clean_up_policy = "delete"
54+
sync_replica_min_num = 1
55+
unclean_leader_election_enable = false
56+
segment = 3600000
57+
retention = 60000
3758
}
3859
3960
data "tencentcloud_ckafka_topics" "kafka_topics" {
4061
instance_id = tencentcloud_ckafka_topic.kafka_topic.instance_id
4162
topic_name = tencentcloud_ckafka_topic.kafka_topic.topic_name
4263
}
64+
65+
data "tencentcloud_ckafka_topics" "foo" {
66+
instance_id = tencentcloud_ckafka_topic.kafka_topic.instance_id
67+
}
4368
`

tencentcloud/resource_tc_ckafka_topic.go

Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,9 @@ func resourceTencentCloudCkafkaTopicCreate(d *schema.ResourceData, meta interfac
217217
request.ReplicaNum = helper.IntInt64(d.Get("replica_num").(int))
218218
request.EnableWhiteList = helper.BoolToInt64Ptr(whiteListSwitch)
219219
if whiteListSwitch {
220+
if len(ipWhiteList) == 0 {
221+
return fmt.Errorf("this Topic %s Create Failed, reason: ip whitelist switch is on, ip whitelist cannot be empty", topicName)
222+
}
220223
request.IpWhiteList = ipWhiteList
221224
}
222225
request.MinInsyncReplicas = &syncReplicaMinNum
@@ -249,8 +252,7 @@ func resourceTencentCloudCkafkaTopicCreate(d *schema.ResourceData, meta interfac
249252
if err != nil {
250253
return err
251254
}
252-
253-
if len(ipWhiteList) > 0 {
255+
if len(ipWhiteList) > 0 && whiteListSwitch {
254256
err = ckafkcService.AddCkafkaTopicIpWhiteList(ctx, instanceId, topicName, ipWhiteList)
255257
if err != nil {
256258
return err
@@ -369,30 +371,33 @@ func resourceTencentCloudCkafkaTopicUpdate(d *schema.ResourceData, meta interfac
369371
}
370372
//update ip white List
371373
if whiteListSwitch {
372-
if d.HasChange("ip_white_list") {
373-
oldInterface, newInterface := d.GetChange("ip_white_list")
374-
oldIpWhiteListInterface := oldInterface.([]interface{})
375-
newIpWhiteListInterface := newInterface.([]interface{})
376-
var oldIpWhiteList, newIpWhiteList []*string
377-
for _, value := range oldIpWhiteListInterface {
378-
oldIpWhiteList = append(oldIpWhiteList, helper.String(value.(string)))
379-
}
380-
for _, value := range newIpWhiteListInterface {
381-
newIpWhiteList = append(newIpWhiteList, helper.String(value.(string)))
382-
}
374+
oldInterface, newInterface := d.GetChange("ip_white_list")
375+
oldIpWhiteListInterface := oldInterface.([]interface{})
376+
newIpWhiteListInterface := newInterface.([]interface{})
377+
var oldIpWhiteList, newIpWhiteList []*string
378+
for _, value := range oldIpWhiteListInterface {
379+
oldIpWhiteList = append(oldIpWhiteList, helper.String(value.(string)))
380+
}
381+
for _, value := range newIpWhiteListInterface {
382+
newIpWhiteList = append(newIpWhiteList, helper.String(value.(string)))
383+
}
384+
if len(oldIpWhiteList) > 0 {
383385
error := ckafkcService.RemoveCkafkaTopicIpWhiteList(ctx, instanceId, topicName, oldIpWhiteList)
384386
if error != nil {
385387
return fmt.Errorf("IP whitelist Modification failed, reason[%s]\n", error.Error())
386388
}
387-
error = ckafkcService.AddCkafkaTopicIpWhiteList(ctx, instanceId, topicName, newIpWhiteList)
388-
if error != nil {
389-
return fmt.Errorf("IP whitelist Modification failed, reason[%s]\n", error.Error())
390-
}
389+
}
390+
if len(newIpWhiteList) == 0 {
391+
return fmt.Errorf("this Topic %s Create Failed, reason: ip whitelist switch is on, ip whitelist cannot be empty", topicName)
392+
}
393+
error := ckafkcService.AddCkafkaTopicIpWhiteList(ctx, instanceId, topicName, newIpWhiteList)
394+
if error != nil {
395+
return fmt.Errorf("IP whitelist Modification failed, reason[%s]\n", error.Error())
391396
}
392397
} else {
393398
//IP whiteList Switch not turned on, and the ip whitelist cannot be modified
394399
if d.HasChange("ip_white_list") {
395-
return fmt.Errorf("This Topic %s IP whitelist Modification failed, reason: The Ip Whitelist Switch is not turned on.", topicName)
400+
return fmt.Errorf("this Topic %s IP whitelist Modification failed, reason: The Ip Whitelist Switch is not turned on", topicName)
396401
}
397402
}
398403
err := ckafkcService.ModifyCkafkaTopicAttribute(ctx, request)

tencentcloud/resource_tc_ckafka_topic_test.go

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -69,15 +69,6 @@ func testAccTencentCloudKafkaTopicDestory(s *terraform.State) error {
6969
if len(split) < 2 {
7070
continue
7171
}
72-
//check ckafka instance
73-
has, err := ckafkcService.DescribeCkafkaById(ctx, split[0])
74-
if err != nil {
75-
return err
76-
}
77-
//ckafka does not exist
78-
if !has {
79-
return nil
80-
}
8172
//check ckafka topic
8273
_, has, error := ckafkcService.DescribeCkafkaTopicByName(ctx, split[0], split[1])
8374
if error != nil {

tencentcloud/service_tencentcloud_ckafka.go

Lines changed: 24 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,9 @@ import (
66
"log"
77
"strings"
88

9-
"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors"
10-
119
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
1210
ckafka "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka/v20190819"
11+
"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors"
1312
"github.com/terraform-providers/terraform-provider-tencentcloud/tencentcloud/connectivity"
1413
"github.com/terraform-providers/terraform-provider-tencentcloud/tencentcloud/internal/helper"
1514
"github.com/terraform-providers/terraform-provider-tencentcloud/tencentcloud/ratelimit"
@@ -455,7 +454,18 @@ func (me *CkafkaService) DescribeCkafkaTopics(ctx context.Context, instanceId st
455454

456455
request.Offset = &offset
457456
request.Limit = &limit
458-
457+
//check ckafka exist
458+
ckafkaExist, error := me.DescribeCkafkaById(ctx, instanceId)
459+
if error != nil {
460+
if sdkErr, ok := error.(*errors.TencentCloudSDKError); ok {
461+
if sdkErr.Code == CkafkaInstanceNotFound {
462+
return
463+
}
464+
}
465+
}
466+
if !ckafkaExist {
467+
return
468+
}
459469
for {
460470
ratelimit.Check(request.GetAction())
461471
response, err := me.client.UseCkafkaClient().DescribeTopicDetail(request)
@@ -489,6 +499,7 @@ func (me *CkafkaService) CreateCkafkaTopic(ctx context.Context, request *ckafka.
489499
}
490500
if response == nil || response.Response == nil || response.Response.Result == nil {
491501
errRet = fmt.Errorf("TencentCloud SDK return nil response, %s", request.GetAction())
502+
return
492503
}
493504
if *response.Response.Result.TopicId == "" {
494505
errRet = fmt.Errorf("TencentCloud SDK returns empty ckafka topic ID, %s", request.GetAction())
@@ -500,18 +511,6 @@ func (me *CkafkaService) CreateCkafkaTopic(ctx context.Context, request *ckafka.
500511

501512
func (me *CkafkaService) DescribeCkafkaTopicByName(ctx context.Context, instanceId string, topicName string) (topic *ckafka.TopicDetail, has bool, errRet error) {
502513
var topicList []*ckafka.TopicDetail
503-
//check ckafka exist
504-
ckafkaExist, error := me.DescribeCkafkaById(ctx, instanceId)
505-
if error != nil {
506-
if sdkErr, ok := error.(*errors.TencentCloudSDKError); ok {
507-
if sdkErr.Code == CkafkaInstanceNotFound {
508-
return nil, false, error
509-
}
510-
}
511-
}
512-
if !ckafkaExist {
513-
return nil, false, error
514-
}
515514
//check ckafka topic exist
516515
err := resource.Retry(readRetryTimeout, func() *resource.RetryError {
517516
list, err := me.DescribeCkafkaTopics(ctx, instanceId, topicName)
@@ -529,9 +528,7 @@ func (me *CkafkaService) DescribeCkafkaTopicByName(ctx context.Context, instance
529528
if *v.TopicName == topicName {
530529
has = true
531530
topic = v
532-
return
533-
} else {
534-
continue
531+
break
535532
}
536533
}
537534
return
@@ -556,6 +553,7 @@ func (me *CkafkaService) DescribeCkafkaTopicAttributes(ctx context.Context, inst
556553
}
557554
if response == nil || response.Response == nil || response.Response.Result == nil {
558555
errRet = fmt.Errorf("TencentCloud SDK return nil response, %s", request.GetAction())
556+
return
559557
}
560558
topicInfo = response.Response.Result
561559
return
@@ -575,22 +573,21 @@ func (me *CkafkaService) AddCkafkaTopicIpWhiteList(ctx context.Context, instaneI
575573
request.IpWhiteList = whiteIpList
576574
ratelimit.Check(request.GetAction())
577575
var response *ckafka.CreateTopicIpWhiteListResponse
578-
err := resource.Retry(readRetryTimeout, func() *resource.RetryError {
576+
errRet = resource.Retry(readRetryTimeout, func() *resource.RetryError {
579577
resp, e := me.client.UseCkafkaClient().CreateTopicIpWhiteList(request)
580578
if e != nil {
581579
return retryError(e)
582580
}
583581
response = resp
584582
return nil
585583
})
586-
if err != nil {
587-
errRet = err
584+
if errRet != nil {
588585
return
589586
}
590587
if response == nil || response.Response == nil || response.Response.Result == nil {
591588
errRet = fmt.Errorf("TencentCloud SDK return nil response, %s", request.GetAction())
592589
}
593-
return err
590+
return errRet
594591
}
595592

596593
func (me *CkafkaService) RemoveCkafkaTopicIpWhiteList(ctx context.Context, instaneId string, topicName string, whiteIpList []*string) (errRet error) {
@@ -607,25 +604,23 @@ func (me *CkafkaService) RemoveCkafkaTopicIpWhiteList(ctx context.Context, insta
607604
request.IpWhiteList = whiteIpList
608605
ratelimit.Check(request.GetAction())
609606
var response *ckafka.DeleteTopicIpWhiteListResponse
610-
err := resource.Retry(readRetryTimeout, func() *resource.RetryError {
607+
errRet = resource.Retry(readRetryTimeout, func() *resource.RetryError {
611608
resp, e := me.client.UseCkafkaClient().DeleteTopicIpWhiteList(request)
612609
if e != nil {
613610
return retryError(e)
614611
}
615612
response = resp
616613
return nil
617614
})
618-
if err != nil {
619-
errRet = err
615+
if errRet != nil {
620616
return
621617
}
622618
if response == nil || response.Response == nil || response.Response.Result == nil {
623619
errRet = fmt.Errorf("TencentCloud SDK return nil response, %s", request.GetAction())
624620
}
625-
return err
621+
return errRet
626622
}
627623

628-
//get ckafka instance by instanceId.
629624
func (me *CkafkaService) DescribeCkafkaById(ctx context.Context, instanceId string) (has bool, errRet error) {
630625
logId := getLogId(ctx)
631626
request := ckafka.NewDescribeInstancesDetailRequest()
@@ -645,9 +640,7 @@ func (me *CkafkaService) DescribeCkafkaById(ctx context.Context, instanceId stri
645640
for _, v := range resp.Response.Result.InstanceList {
646641
if *v.InstanceId == instanceId {
647642
has = true
648-
return
649-
} else {
650-
continue
643+
break
651644
}
652645
}
653646
return
@@ -695,7 +688,7 @@ func (me *CkafkaService) DeleteCkafkaTopic(ctx context.Context, instanceId strin
695688
if err != nil {
696689
return retryError(err)
697690
}
698-
if topicList != nil || len(topicList) != 0 {
691+
if len(topicList) != 0 {
699692
errRet = fmt.Errorf("this Topic %s Delete Failed, timeout", name)
700693
}
701694
return nil

0 commit comments

Comments
 (0)