Skip to content

Commit 424ab6e

Browse files
committed
Merged feat/cvmT3V2 into the current branch and resolved conflicts
2 parents 1622adb + b453387 commit 424ab6e

34 files changed

+3251
-1805
lines changed

tencentcloud/services/cvm/data_source_tc_eips.go

Lines changed: 78 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -2,56 +2,36 @@ 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"
105

116
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
127
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
138
vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312"
149

10+
tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
1511
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
1612
)
1713

1814
func DataSourceTencentCloudEips() *schema.Resource {
1915
return &schema.Resource{
2016
Read: dataSourceTencentCloudEipsRead,
21-
2217
Schema: map[string]*schema.Schema{
2318
"eip_id": {
2419
Type: schema.TypeString,
2520
Optional: true,
2621
Description: "ID of the EIP to be queried.",
2722
},
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-
},
4823

4924
"eip_list": {
5025
Type: schema.TypeList,
5126
Computed: true,
5227
Description: "An information list of EIP. Each element contains the following attributes:",
5328
Elem: &schema.Resource{
5429
Schema: map[string]*schema.Schema{
30+
"create_time": {
31+
Type: schema.TypeString,
32+
Computed: true,
33+
Description: "Creation time of the EIP.",
34+
},
5535
"eip_id": {
5636
Type: schema.TypeString,
5737
Computed: true,
@@ -67,30 +47,25 @@ func DataSourceTencentCloudEips() *schema.Resource {
6747
Computed: true,
6848
Description: "Type of the EIP.",
6949
},
70-
"status": {
71-
Type: schema.TypeString,
72-
Computed: true,
73-
Description: "The EIP current status.",
74-
},
75-
"public_ip": {
50+
"eni_id": {
7651
Type: schema.TypeString,
7752
Computed: true,
78-
Description: "The elastic ip address.",
53+
Description: "The eni id to bind with the EIP.",
7954
},
8055
"instance_id": {
8156
Type: schema.TypeString,
8257
Computed: true,
8358
Description: "The instance id to bind with the EIP.",
8459
},
85-
"eni_id": {
60+
"public_ip": {
8661
Type: schema.TypeString,
8762
Computed: true,
88-
Description: "The eni id to bind with the EIP.",
63+
Description: "The elastic ip address.",
8964
},
90-
"create_time": {
65+
"status": {
9166
Type: schema.TypeString,
9267
Computed: true,
93-
Description: "Creation time of the EIP.",
68+
Description: "The EIP current status.",
9469
},
9570
"tags": {
9671
Type: schema.TypeMap,
@@ -100,91 +75,101 @@ func DataSourceTencentCloudEips() *schema.Resource {
10075
},
10176
},
10277
},
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+
},
103102
},
104103
}
105104
}
106105

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

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

117-
filter := make(map[string][]string)
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
118121
if v, ok := d.GetOk("eip_id"); ok {
119-
filter["address-id"] = []string{v.(string)}
122+
filter.Values = []*string{helper.String(v.(string))}
120123
}
124+
filtersMap["Temp0"] = &filter
125+
if v, ok := filtersMap["Temp0"]; ok && len(v.Values) > 0 {
126+
filtersList = append(filtersList, v)
127+
}
128+
filter2 := vpc.Filter{}
129+
name2 := "address-name"
130+
filter2.Name = &name2
121131
if v, ok := d.GetOk("eip_name"); ok {
122-
filter["address-name"] = []string{v.(string)}
132+
filter2.Values = []*string{helper.String(v.(string))}
133+
}
134+
filtersMap["Temp1"] = &filter2
135+
if v, ok := filtersMap["Temp1"]; ok && len(v.Values) > 0 {
136+
filtersList = append(filtersList, v)
123137
}
138+
filter3 := vpc.Filter{}
139+
name3 := "public-ip"
140+
filter3.Name = &name3
124141
if v, ok := d.GetOk("public_ip"); ok {
125-
filter["public-ip"] = []string{v.(string)}
142+
filter3.Values = []*string{helper.String(v.(string))}
126143
}
144+
filtersMap["Temp2"] = &filter3
145+
if v, ok := filtersMap["Temp2"]; ok && len(v.Values) > 0 {
146+
filtersList = append(filtersList, v)
147+
}
148+
paramMap["Filters"] = filtersList
127149

128-
tags := helper.GetTags(d, "tags")
129-
130-
var eips []*vpc.Address
131-
var errRet error
150+
var respData *vpc.DescribeAddressesResponseParams
132151
err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError {
133-
eips, errRet = vpcService.DescribeEipByFilter(ctx, filter)
134-
if errRet != nil {
135-
return tccommon.RetryError(errRet, tccommon.InternalError)
152+
result, e := service.DescribeEipsByFilter(ctx, paramMap)
153+
if e != nil {
154+
return tccommon.RetryError(e)
136155
}
156+
respData = result
137157
return nil
138158
})
139159
if err != nil {
140160
return err
141161
}
142162

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())
163+
if err := dataSourceTencentCloudEipsReadPostHandleResponse0(ctx, paramMap, respData); err != nil {
180164
return err
181165
}
182166

183167
output, ok := d.GetOk("result_output_file")
184168
if ok && output.(string) != "" {
185-
if err := tccommon.WriteToFile(output.(string), eipList); err != nil {
186-
return err
169+
if e := tccommon.WriteToFile(output.(string), dataSourceTencentCloudEipsReadOutputContent(ctx)); e != nil {
170+
return e
187171
}
188172
}
173+
189174
return nil
190175
}
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package cvm
2+
3+
import (
4+
"context"
5+
"log"
6+
7+
tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
8+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
9+
svctag "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/tag"
10+
svcvpc "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/services/vpc"
11+
12+
vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312"
13+
)
14+
15+
func dataSourceTencentCloudEipsReadOutputContent(ctx context.Context) interface{} {
16+
eipList := ctx.Value("eipList")
17+
return eipList
18+
}
19+
20+
func dataSourceTencentCloudEipsReadPostHandleResponse0(ctx context.Context, req map[string]interface{}, resp *vpc.DescribeAddressesResponseParams) error {
21+
d := tccommon.ResourceDataFromContext(ctx)
22+
meta := tccommon.ProviderMetaFromContext(ctx)
23+
logId := tccommon.GetLogId(tccommon.ContextNil)
24+
client := meta.(tccommon.ProviderMeta).GetAPIV3Conn()
25+
tagService := svctag.NewTagService(client)
26+
region := client.Region
27+
28+
tags := helper.GetTags(d, "tags")
29+
eipList := make([]map[string]interface{}, 0, len(resp.AddressSet))
30+
ids := make([]string, 0, len(resp.AddressSet))
31+
32+
EIP_LOOP:
33+
for _, eip := range resp.AddressSet {
34+
respTags, err := tagService.DescribeResourceTags(ctx, svcvpc.VPC_SERVICE_TYPE, svcvpc.EIP_RESOURCE_TYPE, region, *eip.AddressId)
35+
if err != nil {
36+
log.Printf("[CRITAL]%s describe eip tags failed: %+v", logId, err)
37+
return err
38+
}
39+
40+
for k, v := range tags {
41+
if respTags[k] != v {
42+
continue EIP_LOOP
43+
}
44+
}
45+
46+
mapping := map[string]interface{}{
47+
"eip_id": eip.AddressId,
48+
"eip_name": eip.AddressName,
49+
"eip_type": eip.AddressType,
50+
"status": eip.AddressStatus,
51+
"public_ip": eip.AddressIp,
52+
"instance_id": eip.InstanceId,
53+
"eni_id": eip.NetworkInterfaceId,
54+
"create_time": eip.CreatedTime,
55+
"tags": respTags,
56+
}
57+
58+
eipList = append(eipList, mapping)
59+
ids = append(ids, *eip.AddressId)
60+
}
61+
62+
context.WithValue(ctx, "eipList", eipList)
63+
d.SetId(helper.DataResourceIdsHash(ids))
64+
return nil
65+
}

0 commit comments

Comments
 (0)