Skip to content

Commit d5d5295

Browse files
committed
add
1 parent ea3b72e commit d5d5295

File tree

3 files changed

+125
-84
lines changed

3 files changed

+125
-84
lines changed

tencentcloud/services/cvm/data_source_tc_eips.go

Lines changed: 93 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -2,36 +2,56 @@ package cvm
22

33
import (
44
"context"
5+
"log"
6+
7+
tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
8+
svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag"
9+
svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc"
510

611
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
712
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
813
vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312"
914

10-
tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
1115
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
1216
)
1317

1418
func DataSourceTencentCloudEips() *schema.Resource {
1519
return &schema.Resource{
1620
Read: dataSourceTencentCloudEipsRead,
21+
1722
Schema: map[string]*schema.Schema{
1823
"eip_id": {
1924
Type: schema.TypeString,
2025
Optional: true,
2126
Description: "ID of the EIP to be queried.",
2227
},
28+
"eip_name": {
29+
Type: schema.TypeString,
30+
Optional: true,
31+
Description: "Name of the EIP to be queried.",
32+
},
33+
"public_ip": {
34+
Type: schema.TypeString,
35+
Optional: true,
36+
Description: "The elastic ip address.",
37+
},
38+
"tags": {
39+
Type: schema.TypeMap,
40+
Optional: true,
41+
Description: "The tags of EIP.",
42+
},
43+
"result_output_file": {
44+
Type: schema.TypeString,
45+
Optional: true,
46+
Description: "Used to save results.",
47+
},
2348

2449
"eip_list": {
2550
Type: schema.TypeList,
2651
Computed: true,
2752
Description: "An information list of EIP. Each element contains the following attributes:",
2853
Elem: &schema.Resource{
2954
Schema: map[string]*schema.Schema{
30-
"create_time": {
31-
Type: schema.TypeString,
32-
Computed: true,
33-
Description: "Creation time of the EIP.",
34-
},
3555
"eip_id": {
3656
Type: schema.TypeString,
3757
Computed: true,
@@ -47,25 +67,30 @@ func DataSourceTencentCloudEips() *schema.Resource {
4767
Computed: true,
4868
Description: "Type of the EIP.",
4969
},
50-
"eni_id": {
70+
"status": {
5171
Type: schema.TypeString,
5272
Computed: true,
53-
Description: "The eni id to bind with the EIP.",
73+
Description: "The EIP current status.",
74+
},
75+
"public_ip": {
76+
Type: schema.TypeString,
77+
Computed: true,
78+
Description: "The elastic ip address.",
5479
},
5580
"instance_id": {
5681
Type: schema.TypeString,
5782
Computed: true,
5883
Description: "The instance id to bind with the EIP.",
5984
},
60-
"public_ip": {
85+
"eni_id": {
6186
Type: schema.TypeString,
6287
Computed: true,
63-
Description: "The elastic ip address.",
88+
Description: "The eni id to bind with the EIP.",
6489
},
65-
"status": {
90+
"create_time": {
6691
Type: schema.TypeString,
6792
Computed: true,
68-
Description: "The EIP current status.",
93+
Description: "Creation time of the EIP.",
6994
},
7095
"tags": {
7196
Type: schema.TypeMap,
@@ -75,101 +100,91 @@ func DataSourceTencentCloudEips() *schema.Resource {
75100
},
76101
},
77102
},
78-
79-
"eip_name": {
80-
Type: schema.TypeString,
81-
Optional: true,
82-
Description: "Name of the EIP to be queried.",
83-
},
84-
85-
"public_ip": {
86-
Type: schema.TypeString,
87-
Optional: true,
88-
Description: "The elastic ip address.",
89-
},
90-
91-
"tags": {
92-
Type: schema.TypeMap,
93-
Optional: true,
94-
Description: "The tags of EIP.",
95-
},
96-
97-
"result_output_file": {
98-
Type: schema.TypeString,
99-
Optional: true,
100-
Description: "Used to save results.",
101-
},
102103
},
103104
}
104105
}
105106

106107
func dataSourceTencentCloudEipsRead(d *schema.ResourceData, meta interface{}) error {
107108
defer tccommon.LogElapsed("data_source.tencentcloud_eips.read")()
108-
defer tccommon.InconsistentCheck(d, meta)()
109-
110-
logId := tccommon.GetLogId(nil)
111-
ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta)
109+
logId := tccommon.GetLogId(tccommon.ContextNil)
110+
ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
112111

113-
service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
112+
client := meta.(tccommon.ProviderMeta).GetAPIV3Conn()
113+
vpcService := svcvpc.NewVpcService(client)
114+
tagService := svctag.NewTagService(client)
115+
region := client.Region
114116

115-
paramMap := make(map[string]interface{})
116-
var filtersList []*vpc.Filter
117-
filtersMap := map[string]*vpc.Filter{}
118-
filter := vpc.Filter{}
119-
name := "address-id"
120-
filter.Name = &name
117+
filter := make(map[string][]string)
121118
if v, ok := d.GetOk("eip_id"); ok {
122-
filter.Values = []*string{helper.String(v.(string))}
119+
filter["address-id"] = []string{v.(string)}
123120
}
124-
filtersMap["Temp0"] = &filter
125-
if v, ok := filtersMap["Temp0"]; ok {
126-
filtersList = append(filtersList, v)
127-
}
128-
filter2 := vpc.Filter{}
129-
name2 := "address-name"
130-
filter2.Name = &name2
131121
if v, ok := d.GetOk("eip_name"); ok {
132-
filter2.Values = []*string{helper.String(v.(string))}
133-
}
134-
filtersMap["Temp1"] = &filter2
135-
if v, ok := filtersMap["Temp1"]; ok {
136-
filtersList = append(filtersList, v)
122+
filter["address-name"] = []string{v.(string)}
137123
}
138-
filter3 := vpc.Filter{}
139-
name3 := "public-ip"
140-
filter3.Name = &name3
141124
if v, ok := d.GetOk("public_ip"); ok {
142-
filter3.Values = []*string{helper.String(v.(string))}
143-
}
144-
filtersMap["Temp2"] = &filter3
145-
if v, ok := filtersMap["Temp2"]; ok {
146-
filtersList = append(filtersList, v)
125+
filter["public-ip"] = []string{v.(string)}
147126
}
148-
paramMap["Filters"] = filtersList
149127

150-
var respData *vpc.DescribeAddressesResponseParams
128+
tags := helper.GetTags(d, "tags")
129+
130+
var eips []*vpc.Address
131+
var errRet error
151132
err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError {
152-
result, e := service.DescribeEipsByFilter(ctx, paramMap)
153-
if e != nil {
154-
return tccommon.RetryError(e)
133+
eips, errRet = vpcService.DescribeEipByFilter(ctx, filter)
134+
if errRet != nil {
135+
return tccommon.RetryError(errRet, tccommon.InternalError)
155136
}
156-
respData = result
157137
return nil
158138
})
159139
if err != nil {
160140
return err
161141
}
162142

163-
if err := dataSourceTencentCloudEipsReadPostHandleResponse0(ctx, paramMap, respData); err != nil {
143+
eipList := make([]map[string]interface{}, 0, len(eips))
144+
ids := make([]string, 0, len(eips))
145+
146+
EIP_LOOP:
147+
for _, eip := range eips {
148+
respTags, err := tagService.DescribeResourceTags(ctx, svcvpc.VPC_SERVICE_TYPE, svcvpc.EIP_RESOURCE_TYPE, region, *eip.AddressId)
149+
if err != nil {
150+
log.Printf("[CRITAL]%s describe eip tags failed: %+v", logId, err)
151+
return err
152+
}
153+
154+
for k, v := range tags {
155+
if respTags[k] != v {
156+
continue EIP_LOOP
157+
}
158+
}
159+
160+
mapping := map[string]interface{}{
161+
"eip_id": eip.AddressId,
162+
"eip_name": eip.AddressName,
163+
"eip_type": eip.AddressType,
164+
"status": eip.AddressStatus,
165+
"public_ip": eip.AddressIp,
166+
"instance_id": eip.InstanceId,
167+
"eni_id": eip.NetworkInterfaceId,
168+
"create_time": eip.CreatedTime,
169+
"tags": respTags,
170+
}
171+
172+
eipList = append(eipList, mapping)
173+
ids = append(ids, *eip.AddressId)
174+
}
175+
176+
d.SetId(helper.DataResourceIdsHash(ids))
177+
err = d.Set("eip_list", eipList)
178+
if err != nil {
179+
log.Printf("[CRITAL]%s provider set eip list fail, reason:%s\n ", logId, err.Error())
164180
return err
165181
}
166182

167183
output, ok := d.GetOk("result_output_file")
168184
if ok && output.(string) != "" {
169-
if e := tccommon.WriteToFile(output.(string), dataSourceTencentCloudEipsReadOutputContent(ctx)); e != nil {
170-
return e
185+
if err := tccommon.WriteToFile(output.(string), eipList); err != nil {
186+
return err
171187
}
172188
}
173-
174189
return nil
175190
}

tencentcloud/services/cvm/resource_tc_eip.go

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -274,10 +274,6 @@ func resourceTencentCloudEipRead(d *schema.ResourceData, meta interface{}) error
274274
_ = d.Set("internet_service_provider", respData.InternetServiceProvider)
275275
}
276276

277-
if respData.LocalBgp != nil {
278-
_ = d.Set("local_bgp", respData.LocalBgp)
279-
}
280-
281277
if respData.Bandwidth != nil {
282278
_ = d.Set("internet_max_bandwidth_out", respData.Bandwidth)
283279
}
@@ -294,8 +290,8 @@ func resourceTencentCloudEipRead(d *schema.ResourceData, meta interface{}) error
294290
_ = d.Set("anti_ddos_package_id", respData.AntiDDoSPackageId)
295291
}
296292

297-
if respData.BandwidthPackageId != nil {
298-
_ = d.Set("bandwidth_package_id", respData.BandwidthPackageId)
293+
if err := resourceTencentCloudEipReadPostHandleResponse0(ctx, respData); err != nil {
294+
return err
299295
}
300296

301297
return nil

tencentcloud/services/cvm/resource_tc_eip_extension.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,36 @@ func resourceTencentCloudEipCreatePostHandleResponse0(ctx context.Context, resp
6262
return nil
6363
}
6464

65+
func resourceTencentCloudEipReadPostHandleResponse0(ctx context.Context, resp *vpc.Address) error {
66+
d := tccommon.ResourceDataFromContext(ctx)
67+
logId := tccommon.GetLogId(tccommon.ContextNil)
68+
meta := tccommon.ProviderMetaFromContext(ctx)
69+
client := meta.(tccommon.ProviderMeta).GetAPIV3Conn()
70+
vpcService := svcvpc.NewVpcService(client)
71+
tagService := svctag.NewTagService(client)
72+
region := client.Region
73+
eipId := d.Id()
74+
75+
tags, err := tagService.DescribeResourceTags(ctx, svcvpc.VPC_SERVICE_TYPE, svcvpc.EIP_RESOURCE_TYPE, region, eipId)
76+
if err != nil {
77+
log.Printf("[CRITAL]%s describe eip tags failed: %+v", logId, err)
78+
return err
79+
}
80+
81+
bgp, err := vpcService.DescribeVpcBandwidthPackageByEip(ctx, eipId)
82+
if err != nil {
83+
log.Printf("[CRITAL]%s describe eip tags failed: %+v", logId, err)
84+
return err
85+
}
86+
87+
_ = d.Set("tags", tags)
88+
if bgp != nil {
89+
_ = d.Set("bandwidth_package_id", bgp.BandwidthPackageId)
90+
}
91+
92+
return nil
93+
}
94+
6595
func resourceTencentCloudEipUpdatePostFillRequest1(ctx context.Context, req *vpc.ModifyAddressInternetChargeTypeRequest) error {
6696
d := tccommon.ResourceDataFromContext(ctx)
6797
period := d.Get("prepaid_period").(int)

0 commit comments

Comments
 (0)