Skip to content

Commit 5a83d4e

Browse files
authored
feat(ccn): [115175599] add new resource (#2730)
* add * add * add * add
1 parent ed9a944 commit 5a83d4e

33 files changed

+5168
-289
lines changed

.changelog/2730.txt

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
```release-note:new-resource
2+
tencentcloud_ccn_route_table
3+
```
4+
5+
```release-note:new-resource
6+
tencentcloud_ccn_route_table_input_policies
7+
```
8+
9+
```release-note:new-resource
10+
tencentcloud_ccn_route_table_broadcast_policies
11+
```
12+
13+
```release-note:new-resource
14+
tencentcloud_ccn_route_table_associate_instance_config
15+
```
16+
17+
```release-note:new-data-source
18+
tencentcloud_ccn_routes
19+
```

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.860
4747
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit v1.0.544
4848
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls v1.0.952
49-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.960
49+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.964
5050
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.624
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.960
99+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.964
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: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -946,6 +946,10 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.958 h1:WoN2
946946
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.958/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
947947
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.960 h1:hde8uWA3624nGUvC8QPf9njcyBZ7A9weqscRrqyM1Rk=
948948
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.960/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
949+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.963 h1:lUVCMP5eiSHc2HGfSVc07Tytn4p6DklJkKldObRvJrU=
950+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.963/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
951+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.964 h1:ET3EulYQvWrdD5FNwOP+196w5Vbniy/uRGucM5ILExQ=
952+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.964/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
949953
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/csip v1.0.860 h1:F3esKBIT3HW9+7Gt8cVgf8X06VdGIczpgLBUECzSEzU=
950954
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/csip v1.0.860/go.mod h1:NZo1WplQcC314kMlCRUoy8NQju2BnolIJj7NAWgsuhY=
951955
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.624 h1:nEZqsoqt1pEoaP9JjkHQy3/H00suCfzlHW1qOm2nYD8=
@@ -1076,6 +1080,10 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.958 h1:PbvPRXd
10761080
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.958/go.mod h1:EzkGUZh/Tjzu1ZMsxsC3F0JqXc4GAvpXwsSdd15/xOM=
10771081
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.960 h1:5huPVKrsLOrhBms2cz8w3w3v0uQmdHnwGCwRn1UTds0=
10781082
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.960/go.mod h1:WX06bRa+EC/wiBsn3dHuDK8et1sx1FPkSRIBYL89g+w=
1083+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.963 h1:6Hl5u9jnDY3xzH6cWV4DV0hkaHkHjZaKRgKxwrgsne8=
1084+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.963/go.mod h1:I/v4TeM6kXoYesJ67MpDqJMRLDEypA4c0QjZBYwaka8=
1085+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.964 h1:+HsB7iMFYfDAYD0Xoj1tBsqLT1R6h/94DiooYJnorr8=
1086+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.964/go.mod h1:ohfNiTUrMTR50FAUe4wALZVYa1404YQvYB57pvVVADM=
10791087
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf v1.0.833 h1:avaBlZ+Qqv7bfMg/u0jlRsbEBbE18CfqKWbfGc84PLg=
10801088
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf v1.0.833/go.mod h1:fUWG217b//46Oa3VXxC5mgeYeewVAbF+lc81uET89EM=
10811089
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wedata v1.0.792 h1:NLgKNOIHWa38AmW7dyfI9Jlcp2Kr9VRD94f48pPNmxM=

tencentcloud/connectivity/client.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package connectivity
22

33
import (
44
"fmt"
5+
"log"
56
"net/http"
67
"net/url"
78
"os"
@@ -207,6 +208,8 @@ type TencentCloudClient struct {
207208
//internal version: replace client begin, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation.
208209
//internal version: replace client end, please do not modify this annotation and refrain from inserting any code between the beginning and end lines of the annotation.
209210
tke2Conn *tke2.Client
211+
//omit nil client
212+
omitNilConn *common.Client
210213
}
211214

212215
// NewClientProfile returns a new ClientProfile
@@ -359,6 +362,19 @@ func (me *TencentCloudClient) UseVpcClient(iacExtInfo ...IacExtInfo) *vpc.Client
359362
return me.vpcConn
360363
}
361364

365+
func (me *TencentCloudClient) UseOmitNilClient(module string) *common.Client {
366+
secretId := me.Credential.SecretId
367+
secretKey := me.Credential.SecretKey
368+
region := me.Region
369+
credential := common.NewCredential(secretId, secretKey)
370+
cpf := profile.NewClientProfile()
371+
cpf.HttpProfile.Endpoint = fmt.Sprintf("%s.tencentcloudapi.com", module)
372+
cpf.HttpProfile.ReqMethod = "POST"
373+
me.omitNilConn = common.NewCommonClient(credential, region, cpf).WithLogger(log.Default())
374+
375+
return me.omitNilConn
376+
}
377+
362378
// UseCbsClient returns cbs client for service
363379
func (me *TencentCloudClient) UseCbsClient(iacExtInfo ...IacExtInfo) *cbs.Client {
364380
var logRoundTripper LogRoundTripper

tencentcloud/provider.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -325,6 +325,7 @@ func Provider() *schema.Provider {
325325
"tencentcloud_ha_vips": vpc.DataSourceTencentCloudHaVips(),
326326
"tencentcloud_ha_vip_eip_attachments": vpc.DataSourceTencentCloudHaVipEipAttachments(),
327327
"tencentcloud_ccn_instances": ccn.DataSourceTencentCloudCcnInstances(),
328+
"tencentcloud_ccn_routes": ccn.DataSourceTencentCloudCcnRoutes(),
328329
"tencentcloud_ccn_bandwidth_limits": ccn.DataSourceTencentCloudCcnBandwidthLimits(),
329330
"tencentcloud_ccn_cross_border_compliance": ccn.DataSourceTencentCloudCcnCrossBorderCompliance(),
330331
"tencentcloud_ccn_tenant_instances": ccn.DataSourceTencentCloudCcnTenantInstance(),
@@ -1061,7 +1062,12 @@ func Provider() *schema.Provider {
10611062
"tencentcloud_ccn": ccn.ResourceTencentCloudCcn(),
10621063
"tencentcloud_ccn_attachment": ccn.ResourceTencentCloudCcnAttachment(),
10631064
"tencentcloud_ccn_bandwidth_limit": ccn.ResourceTencentCloudCcnBandwidthLimit(),
1065+
"tencentcloud_ccn_route_table": ccn.ResourceTencentCloudCcnRouteTable(),
1066+
"tencentcloud_ccn_route_table_input_policies": ccn.ResourceTencentCloudCcnRouteTableInputPolicies(),
1067+
"tencentcloud_ccn_route_table_broadcast_policies": ccn.ResourceTencentCloudCcnRouteTableBroadcastPolicies(),
1068+
"tencentcloud_ccn_route_table_selection_policies": ccn.ResourceTencentCloudCcnRouteTableSelectionPolicies(),
10641069
"tencentcloud_ccn_routes": ccn.ResourceTencentCloudCcnRoutes(),
1070+
"tencentcloud_ccn_route_table_associate_instance_config": ccn.ResourceTencentCloudCcnRouteTableAssociateInstanceConfig(),
10651071
"tencentcloud_ccn_instances_accept_attach": ccn.ResourceTencentCloudCcnInstancesAcceptAttach(),
10661072
"tencentcloud_ccn_instances_reject_attach": ccn.ResourceTencentCloudCcnInstancesRejectAttach(),
10671073
"tencentcloud_ccn_instances_reset_attach": ccn.ResourceTencentCloudCcnInstancesResetAttach(),
Lines changed: 251 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,251 @@
1+
package ccn
2+
3+
import (
4+
"context"
5+
6+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
7+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
8+
vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312"
9+
tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
10+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
11+
)
12+
13+
func DataSourceTencentCloudCcnRoutes() *schema.Resource {
14+
return &schema.Resource{
15+
Read: dataSourceTencentCloudCcnRoutesRead,
16+
17+
Schema: map[string]*schema.Schema{
18+
"ccn_id": {
19+
Type: schema.TypeString,
20+
Required: true,
21+
Description: "ID of the CCN to be queried.",
22+
},
23+
"filters": {
24+
Optional: true,
25+
Type: schema.TypeList,
26+
Description: "Filter conditions.",
27+
Elem: &schema.Resource{
28+
Schema: map[string]*schema.Schema{
29+
"name": {
30+
Type: schema.TypeString,
31+
Required: true,
32+
Description: "Field to be filtered. Support `route-id`, `cidr-block`, `instance-type`, `instance-region`, `instance-id`, `route-table-id`.",
33+
},
34+
"values": {
35+
Type: schema.TypeSet,
36+
Elem: &schema.Schema{Type: schema.TypeString},
37+
Required: true,
38+
Description: "Filter value of the field.",
39+
},
40+
},
41+
},
42+
},
43+
// Computed
44+
"route_list": {
45+
Computed: true,
46+
Type: schema.TypeList,
47+
Description: "CCN route list.",
48+
Elem: &schema.Resource{
49+
Schema: map[string]*schema.Schema{
50+
"route_id": {
51+
Type: schema.TypeString,
52+
Computed: true,
53+
Description: "route ID.",
54+
},
55+
"destination_cidr_block": {
56+
Type: schema.TypeString,
57+
Computed: true,
58+
Description: "Destination.",
59+
},
60+
"instance_type": {
61+
Type: schema.TypeString,
62+
Computed: true,
63+
Description: "Next hop type (associated instance type), all types: VPC, DIRECTCONNECT.",
64+
},
65+
"instance_id": {
66+
Type: schema.TypeString,
67+
Computed: true,
68+
Description: "Next jump (associated instance ID).",
69+
},
70+
"instance_name": {
71+
Type: schema.TypeString,
72+
Computed: true,
73+
Description: "Next jump (associated instance name).",
74+
},
75+
"instance_region": {
76+
Type: schema.TypeString,
77+
Computed: true,
78+
Description: "Next jump (associated instance region).",
79+
},
80+
"update_time": {
81+
Type: schema.TypeString,
82+
Computed: true,
83+
Description: "update time.",
84+
},
85+
"enabled": {
86+
Type: schema.TypeBool,
87+
Computed: true,
88+
Description: "Is routing enabled.",
89+
},
90+
"instance_uin": {
91+
Type: schema.TypeString,
92+
Computed: true,
93+
Description: "The UIN (root account) to which the associated instance belongs.",
94+
},
95+
"extra_state": {
96+
Type: schema.TypeString,
97+
Computed: true,
98+
Description: "Extension status of routing.",
99+
},
100+
"is_bgp": {
101+
Type: schema.TypeBool,
102+
Computed: true,
103+
Description: "Is it dynamic routing.",
104+
},
105+
"route_priority": {
106+
Type: schema.TypeInt,
107+
Computed: true,
108+
Description: "Routing priority.",
109+
},
110+
"instance_extra_name": {
111+
Type: schema.TypeString,
112+
Computed: true,
113+
Description: "Next hop extension name (associated instance extension name).",
114+
},
115+
},
116+
},
117+
},
118+
"result_output_file": {
119+
Type: schema.TypeString,
120+
Optional: true,
121+
Description: "Used to save results.",
122+
},
123+
},
124+
}
125+
}
126+
127+
func dataSourceTencentCloudCcnRoutesRead(d *schema.ResourceData, meta interface{}) error {
128+
defer tccommon.LogElapsed("data_source.tencentcloud_ccn_routes.read")()
129+
130+
var (
131+
logId = tccommon.GetLogId(tccommon.ContextNil)
132+
ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
133+
service = VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
134+
)
135+
136+
paramMap := make(map[string]interface{})
137+
if v, ok := d.GetOk("ccn_id"); ok {
138+
paramMap["CcnId"] = helper.String(v.(string))
139+
}
140+
141+
if v, ok := d.GetOk("filters"); ok {
142+
filtersSet := v.([]interface{})
143+
tmpSet := make([]*vpc.Filter, 0, len(filtersSet))
144+
for _, item := range filtersSet {
145+
filter := vpc.Filter{}
146+
filterMap := item.(map[string]interface{})
147+
if v, ok := filterMap["name"]; ok {
148+
filter.Name = helper.String(v.(string))
149+
}
150+
151+
if v, ok := filterMap["values"]; ok {
152+
valuesSet := v.(*schema.Set).List()
153+
filter.Values = helper.InterfacesStringsPoint(valuesSet)
154+
}
155+
156+
tmpSet = append(tmpSet, &filter)
157+
}
158+
159+
paramMap["Filters"] = tmpSet
160+
}
161+
162+
var routeSet []*vpc.CcnRoute
163+
err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError {
164+
result, e := service.DescribeVpcDescribeCcnRoutesByFilter(ctx, paramMap)
165+
if e != nil {
166+
return tccommon.RetryError(e)
167+
}
168+
169+
routeSet = result
170+
return nil
171+
})
172+
173+
if err != nil {
174+
return err
175+
}
176+
177+
ids := make([]string, 0, len(routeSet))
178+
tmpList := make([]map[string]interface{}, 0, len(routeSet))
179+
180+
if routeSet != nil {
181+
for _, route := range routeSet {
182+
tmpMap := make(map[string]interface{})
183+
if route.RouteId != nil {
184+
tmpMap["route_id"] = route.RouteId
185+
}
186+
187+
if route.DestinationCidrBlock != nil {
188+
tmpMap["destination_cidr_block"] = route.DestinationCidrBlock
189+
}
190+
191+
if route.InstanceType != nil {
192+
tmpMap["instance_type"] = route.InstanceType
193+
}
194+
195+
if route.InstanceId != nil {
196+
tmpMap["instance_id"] = route.InstanceId
197+
}
198+
199+
if route.InstanceName != nil {
200+
tmpMap["instance_name"] = route.InstanceName
201+
}
202+
203+
if route.InstanceRegion != nil {
204+
tmpMap["instance_region"] = route.InstanceRegion
205+
}
206+
207+
if route.UpdateTime != nil {
208+
tmpMap["update_time"] = route.UpdateTime
209+
}
210+
211+
if route.Enabled != nil {
212+
tmpMap["enabled"] = route.Enabled
213+
}
214+
215+
if route.InstanceUin != nil {
216+
tmpMap["instance_uin"] = route.InstanceUin
217+
}
218+
219+
if route.ExtraState != nil {
220+
tmpMap["extra_state"] = route.ExtraState
221+
}
222+
223+
if route.IsBgp != nil {
224+
tmpMap["is_bgp"] = route.IsBgp
225+
}
226+
227+
if route.RoutePriority != nil {
228+
tmpMap["route_priority"] = route.RoutePriority
229+
}
230+
231+
if route.InstanceExtraName != nil {
232+
tmpMap["instance_extra_name"] = route.InstanceExtraName
233+
}
234+
235+
ids = append(ids, *route.RouteId)
236+
tmpList = append(tmpList, tmpMap)
237+
}
238+
239+
_ = d.Set("route_list", tmpList)
240+
}
241+
242+
d.SetId(helper.DataResourceIdsHash(ids))
243+
output, ok := d.GetOk("result_output_file")
244+
if ok && output.(string) != "" {
245+
if e := tccommon.WriteToFile(output.(string), tmpList); e != nil {
246+
return e
247+
}
248+
}
249+
250+
return nil
251+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
Use this data source to query detailed information of CCN routes.
2+
3+
Example Usage
4+
5+
Query CCN instance all routes
6+
7+
```hcl
8+
data "tencentcloud_ccn_routes" "routes" {
9+
ccn_id = "ccn-gr7nynbd"
10+
}
11+
```
12+
13+
Query CCN instance routes by filter
14+
15+
```hcl
16+
data "tencentcloud_ccn_routes" "routes" {
17+
ccn_id = "ccn-gr7nynbd"
18+
filters {
19+
name = "route-table-id"
20+
values = ["ccnrtb-jpf7bzn3"]
21+
}
22+
}
23+
```

0 commit comments

Comments
 (0)