Skip to content

Commit 39af03e

Browse files
authored
Feat/ckafka support upgrade (#1054)
* support upgrade ckafka * remove forcenew
1 parent efaf238 commit 39af03e

File tree

8 files changed

+365
-39
lines changed

8 files changed

+365
-39
lines changed

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,11 @@ require (
2727
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb v1.0.199
2828
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdn v1.0.199
2929
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfs v1.0.199
30-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka v1.0.376
30+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka v1.0.403
3131
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb v1.0.283
3232
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit v1.0.199
3333
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls v1.0.377
34-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.398
34+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.403
3535
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.385
3636
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.359
3737
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dayu v1.0.335

go.sum

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -466,6 +466,10 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfs v1.0.199 h1:VyOKZOl
466466
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfs v1.0.199/go.mod h1:9ldm0D1ToaztnlD2bFC5yjMMqvQfVeAMhvcoCCVnZb8=
467467
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka v1.0.376 h1:q7TNQ/5zalD483Z6ufGtxeZIEgO0eUN+5M9y1qxg/ck=
468468
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka v1.0.376/go.mod h1:YVajJ5YZ8YIFtecbXknudDPXLfG1oRwrL6GxZel5rY8=
469+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka v1.0.399 h1:GWa+5s6tbgf5B1AakoirllClfdOmUUSZpb/qso7YiuE=
470+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka v1.0.399/go.mod h1:IvRRjtjGHNzOeH+r0CuyTKeZRZhwqqFzPw6jgAMK9NM=
471+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka v1.0.403 h1:rD9H4dQkULnRpq1BiD2KuDKsd9VEKHun2gMT+V6DNOE=
472+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka v1.0.403/go.mod h1:yWwwGj2gV0hRPfM9GXG4EgDee0cEWYcAwl/M8CTTvzM=
469473
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb v1.0.283 h1:8pML0UtXgui5WZFLLrCv6QdR8e0fUva0V4W5wSgTCSc=
470474
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb v1.0.283/go.mod h1:zgARzAnsLzpLhdpAHrHTUilOXytH9aEJy5ssCdizVV0=
471475
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit v1.0.199 h1:o41qFAFJGPDTLNWXs7nLw4fsDxFUCe5gkO2YXI9Ye6Q=
@@ -489,6 +493,10 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.397 h1:oYU+
489493
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.397/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
490494
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.398 h1:+VbaPRPCKAplIvwj9oGEOTbZmYiEX9AeqaTCPqLzwS8=
491495
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.398/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
496+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.399 h1:iTkEybEo9axJoE7FXnAS1jP6qGdgLi1FMFBNxPk+99k=
497+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.399/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
498+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.403 h1:61iPtR+lIVT8BtAaviUx0t5InIHcJ/N51xQdezu2r1s=
499+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.403/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
492500
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.385 h1:8bwloRxRwSADSK48KxaUeO9JHmmgniNGJbA7Or/HUEk=
493501
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.385/go.mod h1:PMxA0L4o8Fbx/6+ju1cAMAU7x2bV4C6e/LTqVe745yM=
494502
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.359 h1:cNKqelPgUxrJkLY0Azd2QHr/UMYOPPnmqs88clt2akk=

tencentcloud/resource_tc_ckafka_instance.go

Lines changed: 44 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,6 @@ func resourceTencentCloudCkafkaInstance() *schema.Resource {
8181
"zone_id": {
8282
Type: schema.TypeInt,
8383
Required: true,
84-
ForceNew: true,
8584
Description: "Available zone id.",
8685
DiffSuppressFunc: func(k, old, new string, d *schema.ResourceData) bool {
8786
multiZone := d.Get("multi_zone_flag").(bool)
@@ -99,19 +98,16 @@ func resourceTencentCloudCkafkaInstance() *schema.Resource {
9998
"period": {
10099
Type: schema.TypeInt,
101100
Optional: true,
102-
ForceNew: true,
103101
Description: "Prepaid purchase time, such as 1, is one month.",
104102
},
105103
"vpc_id": {
106104
Type: schema.TypeString,
107105
Required: true,
108-
ForceNew: true,
109106
Description: "Vpc id.",
110107
},
111108
"subnet_id": {
112109
Type: schema.TypeString,
113110
Required: true,
114-
ForceNew: true,
115111
Description: "Subnet id.",
116112
},
117113
"msg_retention_time": {
@@ -125,7 +121,6 @@ func resourceTencentCloudCkafkaInstance() *schema.Resource {
125121
"renew_flag": {
126122
Type: schema.TypeInt,
127123
Optional: true,
128-
ForceNew: true,
129124
Computed: true,
130125
Description: "Prepaid automatic renewal mark, 0 means the default state, the initial state," +
131126
" 1 means automatic renewal, 2 means clear no automatic renewal (user setting).",
@@ -134,50 +129,43 @@ func resourceTencentCloudCkafkaInstance() *schema.Resource {
134129
Type: schema.TypeString,
135130
Optional: true,
136131
Computed: true,
137-
ForceNew: true,
138132
Description: "Kafka version (0.10.2/1.1.1/2.4.1).",
139133
},
140134
"band_width": {
141135
Type: schema.TypeInt,
142136
Optional: true,
143137
Computed: true,
144-
ForceNew: true,
145138
Description: "Instance bandwidth in MBps.",
146139
},
147140
"disk_size": {
148141
Type: schema.TypeInt,
149142
Optional: true,
150143
Computed: true,
151-
ForceNew: true,
152144
Description: "Disk Size. Its interval varies with bandwidth, and the input must be within the interval, which can be viewed through the control. " +
153145
"If it is not within the interval, the plan will cause a change when first created.",
154146
},
155147
"partition": {
156148
Type: schema.TypeInt,
157149
Optional: true,
158150
Computed: true,
159-
ForceNew: true,
160151
Description: "Partition Size. Its interval varies with bandwidth, and the input must be within the interval, which can be viewed through the control. " +
161152
"If it is not within the interval, the plan will cause a change when first created.",
162153
},
163154
"multi_zone_flag": {
164155
Type: schema.TypeBool,
165156
Optional: true,
166-
ForceNew: true,
167157
Description: "Indicates whether the instance is multi zones. NOTE: if set to `true`, `zone_ids` must set together.",
168158
},
169159
"zone_ids": {
170160
Type: schema.TypeSet,
171161
Optional: true,
172-
ForceNew: true,
173162
Description: "List of available zone id. NOTE: this argument must set together with `multi_zone_flag`.",
174163
RequiredWith: []string{"multi_zone_flag"},
175164
Elem: &schema.Schema{Type: schema.TypeInt},
176165
},
177166
"tags": {
178167
Type: schema.TypeList,
179168
Optional: true,
180-
ForceNew: true,
181169
Description: "Partition size, the professional version does not need tag.",
182170
Elem: &schema.Resource{
183171
Schema: map[string]*schema.Schema{
@@ -198,7 +186,6 @@ func resourceTencentCloudCkafkaInstance() *schema.Resource {
198186
Type: schema.TypeString,
199187
Optional: true,
200188
Computed: true,
201-
ForceNew: true,
202189
Description: "Type of disk.",
203190
},
204191
"config": {
@@ -583,6 +570,15 @@ func resourceTencentCloudCkafkaInstanceUpdate(d *schema.ResourceData, meta inter
583570
service := CkafkaService{
584571
client: meta.(*TencentCloudClient).apiV3Conn,
585572
}
573+
574+
if d.HasChange("zone_id") || d.HasChange("period") || d.HasChange("vpc_id") || d.HasChange("subnet_id") ||
575+
d.HasChange("renew_flag") || d.HasChange("kafka_version") || d.HasChange("multi_zone_flag") || d.HasChange("zone_ids") ||
576+
d.HasChange("tags") || d.HasChange("disk_type") {
577+
578+
return fmt.Errorf("parms like 'zone_id | period | vpc_id | subnet_id | renew_flag | " +
579+
"kafka_version | multi_zone_flag | zone_ids | tags | disk_type', do not support change now.")
580+
}
581+
586582
instanceId := d.Id()
587583
request := ckafka.NewModifyInstanceAttributesRequest()
588584
request.InstanceId = &instanceId
@@ -654,6 +650,41 @@ func resourceTencentCloudCkafkaInstanceUpdate(d *schema.ResourceData, meta inter
654650
return fmt.Errorf("[API]Set kafka instance attributes fail, reason:%s", error.Error())
655651
}
656652

653+
if d.HasChange("band_width") || d.HasChange("disk_size") || d.HasChange("partition") {
654+
request := ckafka.NewModifyInstancePreRequest()
655+
request.InstanceId = helper.String(instanceId)
656+
if v, ok := d.GetOk("band_width"); ok {
657+
request.BandWidth = helper.Int64(int64(v.(int)))
658+
}
659+
if v, ok := d.GetOk("disk_size"); ok {
660+
request.DiskSize = helper.Int64(int64(v.(int)))
661+
}
662+
if v, ok := d.GetOk("partition"); ok {
663+
request.Partition = helper.Int64(int64(v.(int)))
664+
}
665+
666+
_, err := service.client.UseCkafkaClient().ModifyInstancePre(request)
667+
if err != nil {
668+
return fmt.Errorf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]", logId,
669+
request.GetAction(), request.ToJsonString(), err.Error())
670+
}
671+
672+
err = resource.Retry(5*readRetryTimeout, func() *resource.RetryError {
673+
_, ready, err := service.CheckCkafkaInstanceReady(ctx, instanceId)
674+
if err != nil {
675+
return resource.NonRetryableError(err)
676+
}
677+
if ready {
678+
return nil
679+
}
680+
return resource.RetryableError(fmt.Errorf("upgrade ckafka instance task is processing"))
681+
})
682+
683+
if err != nil {
684+
return err
685+
}
686+
}
687+
657688
return resourceTencentCloudCkafkaInstanceRead(d, meta)
658689
}
659690

0 commit comments

Comments
 (0)