Skip to content

Commit 2bdf8f8

Browse files
authored
fix(eip): [119848960] support eip cdc (#2849)
* fix(eip): [119848960]support eip cdc * fix(eip): [119848960]support eip cdc * fix: add eip task retry * fix: add eip task retry * fix: add eip task retry * fix: modify eip * fix: modify eip * fix: modify eip * fix: modify eip * fix: modify eip * fix: modify eip * fix: modify eip * fix: add changelog
1 parent 906c669 commit 2bdf8f8

File tree

12 files changed

+256
-31
lines changed

12 files changed

+256
-31
lines changed

.changelog/2849.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_eip: support `cdc_id` params
3+
```

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ require (
4646
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb v1.0.984
4747
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit v1.0.544
4848
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls v1.0.970
49-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1010
49+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1011
5050
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.960
5151
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp v1.0.762
5252
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.692
@@ -96,7 +96,7 @@ require (
9696
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tse v1.0.857
9797
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf v1.0.674
9898
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vod v1.0.860
99-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.978
99+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.1011
100100
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf v1.0.833
101101
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wedata v1.0.792
102102
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wss v1.0.199

go.sum

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -936,6 +936,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1008 h1:BQJ
936936
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1008/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
937937
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1010 h1:HwhKTg+VcQd5M9AyaEZaqKmpKuWxbf5kni23g1KRmOk=
938938
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1010/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
939+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1011 h1:cjqeXTwKKtGVqrf6luwunUnA77buzmzbk+G42US1Sns=
940+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1011/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
939941
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/controlcenter v1.0.993 h1:WlPgXldQCxt7qi5Xrc6j6zTrsXWzN5BcOGs7Irq7fwQ=
940942
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/controlcenter v1.0.993/go.mod h1:Z9U8zNtyuyKhjS0698wqsrG/kLx1TQ5CEixXBwVe7xY=
941943
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/csip v1.0.860 h1:F3esKBIT3HW9+7Gt8cVgf8X06VdGIczpgLBUECzSEzU=
@@ -1054,6 +1056,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vod v1.0.860 h1:vW2NgAH
10541056
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vod v1.0.860/go.mod h1:uCkDh/AW/tb8JGq5b2kqLjqZuhCFR+6oTsq1SrrvT44=
10551057
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.978 h1:EZlxS90zY799+zYB7dmbMqU8XyWT0lesPTPkCtibC54=
10561058
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.978/go.mod h1:+8DNFolL3rl8vlN1hiY8HhJG0SchGhzLbCN0K0TA0vU=
1059+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.1011 h1:QRtuN3T5bF0LWVllUB5ZTxe42P2ZFUB2PmyeWCd1ySs=
1060+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.1011/go.mod h1:7I7JGx2pVizVaXEte38bGHtyD/P1JwbVrBLbtTl2Rrs=
10571061
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf v1.0.833 h1:avaBlZ+Qqv7bfMg/u0jlRsbEBbE18CfqKWbfGc84PLg=
10581062
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf v1.0.833/go.mod h1:fUWG217b//46Oa3VXxC5mgeYeewVAbF+lc81uET89EM=
10591063
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wedata v1.0.792 h1:NLgKNOIHWa38AmW7dyfI9Jlcp2Kr9VRD94f48pPNmxM=

tencentcloud/services/cvm/resource_tc_eip.go

Lines changed: 42 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@ package cvm
22

33
import (
44
"context"
5+
"errors"
56
"fmt"
67
"log"
8+
"strconv"
79

810
tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
911
svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag"
@@ -108,6 +110,12 @@ func ResourceTencentCloudEip() *schema.Resource {
108110
Computed: true,
109111
Description: "ID of anti DDos package, it must set when `type` is `AntiDDoSEIP`.",
110112
},
113+
"cdc_id": {
114+
Type: schema.TypeString,
115+
Optional: true,
116+
Description: "CDC Unique ID.",
117+
},
118+
111119
// computed
112120
"public_ip": {
113121
Type: schema.TypeString,
@@ -131,8 +139,6 @@ func resourceTencentCloudEipCreate(d *schema.ResourceData, meta interface{}) err
131139

132140
client := meta.(tccommon.ProviderMeta).GetAPIV3Conn()
133141
vpcService := svcvpc.NewVpcService(client)
134-
tagService := svctag.NewTagService(client)
135-
region := client.Region
136142

137143
var internetChargeType string
138144

@@ -184,8 +190,12 @@ func resourceTencentCloudEipCreate(d *schema.ResourceData, meta interface{}) err
184190
if v, ok := d.GetOk("anti_ddos_package_id"); ok {
185191
request.AntiDDoSPackageId = helper.String(v.(string))
186192
}
193+
if v, ok := d.GetOk("cdc_id"); ok {
194+
request.DedicatedClusterId = helper.String(v.(string))
195+
}
187196

188197
eipId := ""
198+
taskId := ""
189199
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
190200
ratelimit.Check(request.GetAction())
191201
response, err := client.UseVpcClient().AllocateAddresses(request)
@@ -201,27 +211,47 @@ func resourceTencentCloudEipCreate(d *schema.ResourceData, meta interface{}) err
201211
return resource.RetryableError(fmt.Errorf("eip id is nil"))
202212
}
203213
eipId = *response.Response.AddressSet[0]
214+
taskId = *response.Response.TaskId
204215
return nil
205216
})
206217
if err != nil {
207218
return err
208219
}
209220
d.SetId(eipId)
210221

211-
if tags := helper.GetTags(d, "tags"); len(tags) > 0 {
212-
resourceName := tccommon.BuildTagResourceName(svcvpc.VPC_SERVICE_TYPE, svcvpc.EIP_RESOURCE_TYPE, region, eipId)
213-
if err := tagService.ModifyTags(ctx, resourceName, tags, nil); err != nil {
214-
log.Printf("[CRITAL]%s set eip tags failed: %+v", logId, err)
215-
return err
222+
// wait for status
223+
taskIdUint64, err := strconv.ParseUint(taskId, 10, 64)
224+
if err != nil {
225+
return err
226+
}
227+
taskRequest := vpc.NewDescribeTaskResultRequest()
228+
taskRequest.TaskId = &taskIdUint64
229+
err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError {
230+
ratelimit.Check(taskRequest.GetAction())
231+
taskResponse, err := client.UseVpcClient().DescribeTaskResult(taskRequest)
232+
if err != nil {
233+
return tccommon.RetryError(err)
234+
}
235+
if taskResponse.Response.Result != nil && *taskResponse.Response.Result == svcvpc.VPN_TASK_STATUS_RUNNING {
236+
return resource.RetryableError(errors.New("eip task is running"))
216237
}
238+
if taskResponse.Response.Result != nil && *taskResponse.Response.Result == svcvpc.VPN_TASK_STATUS_FAILED {
239+
return resource.NonRetryableError(errors.New("eip task is failed"))
240+
}
241+
return nil
242+
})
243+
if err != nil {
244+
return err
217245
}
218246

219-
// wait for status
220247
err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError {
221248
eip, errRet := vpcService.DescribeEipById(ctx, eipId)
222249
if errRet != nil {
223250
return tccommon.RetryError(errRet)
224251
}
252+
if eip == nil {
253+
return resource.NonRetryableError(errors.New("eip is nil"))
254+
}
225255
if eip != nil && *eip.AddressStatus == svcvpc.EIP_STATUS_CREATING {
226256
return resource.RetryableError(fmt.Errorf("eip is still creating"))
227257
}
@@ -294,6 +324,10 @@ func resourceTencentCloudEipRead(d *schema.ResourceData, meta interface{}) error
294324
_ = d.Set("anti_ddos_package_id", eip.AntiDDoSPackageId)
295325
}
296326

327+
if eip.DedicatedClusterId != nil {
328+
_ = d.Set("cdc_id", eip.DedicatedClusterId)
329+
}
330+
297331
if bgp != nil {
298332
_ = d.Set("bandwidth_package_id", bgp.BandwidthPackageId)
299333
}

tencentcloud/services/cvm/resource_tc_eip_association.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,7 @@ func resourceTencentCloudEipAssociationRead(d *schema.ResourceData, meta interfa
219219
ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
220220
vpcService = svcvpc.NewVpcService(meta.(tccommon.ProviderMeta).GetAPIV3Conn())
221221
id = d.Id()
222+
eipAddress *vpc.Address
222223
)
223224

224225
association, err := ParseEipAssociationId(id)
@@ -235,6 +236,7 @@ func resourceTencentCloudEipAssociationRead(d *schema.ResourceData, meta interfa
235236
if eip == nil {
236237
d.SetId("")
237238
}
239+
eipAddress = eip
238240

239241
return nil
240242
})
@@ -252,6 +254,9 @@ func resourceTencentCloudEipAssociationRead(d *schema.ResourceData, meta interfa
252254

253255
_ = d.Set("network_interface_id", association.NetworkInterfaceId)
254256
_ = d.Set("private_ip", association.PrivateIp)
257+
if eipAddress.DedicatedClusterId != nil {
258+
_ = d.Set("cdc_id", eipAddress.DedicatedClusterId)
259+
}
255260
return nil
256261
}
257262

tencentcloud/services/vpc/service_tencentcloud_vpc.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2372,6 +2372,37 @@ func (me *VpcService) DescribeEipById(ctx context.Context, eipId string) (eip *v
23722372
var specArgs connectivity.IacExtInfo
23732373
specArgs.InstanceId = eipId
23742374

2375+
response, err := me.client.UseVpcClient(specArgs).DescribeAddresses(request)
2376+
if err != nil {
2377+
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n",
2378+
logId, request.GetAction(), request.ToJsonString(), err.Error())
2379+
errRet = err
2380+
return
2381+
}
2382+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n",
2383+
logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
2384+
2385+
if len(response.Response.AddressSet) < 1 {
2386+
return me.DescribeEipByIdCdc(ctx, eipId)
2387+
}
2388+
eip = response.Response.AddressSet[0]
2389+
return
2390+
}
2391+
2392+
func (me *VpcService) DescribeEipByIdCdc(ctx context.Context, eipId string) (eip *vpc.Address, errRet error) {
2393+
logId := tccommon.GetLogId(ctx)
2394+
request := vpc.NewDescribeAddressesRequest()
2395+
request.AddressIds = []*string{&eipId}
2396+
request.Filters = append(request.Filters, &vpc.Filter{
2397+
Name: helper.String("business-type"),
2398+
Values: []*string{helper.String("CDC")},
2399+
})
2400+
2401+
ratelimit.Check(request.GetAction())
2402+
2403+
var specArgs connectivity.IacExtInfo
2404+
specArgs.InstanceId = eipId
2405+
23752406
response, err := me.client.UseVpcClient(specArgs).DescribeAddresses(request)
23762407
if err != nil {
23772408
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n",

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/vpc/v20170312/client.go

Lines changed: 6 additions & 4 deletions
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/vpc/v20170312/errors.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.

0 commit comments

Comments
 (0)