Skip to content

feat(ccn): [115175599] add new resource #2730

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Jul 17, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions .changelog/2730.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
```release-note:new-resource
tencentcloud_ccn_route_table
```

```release-note:new-resource
tencentcloud_ccn_route_table_input_policies
```

```release-note:new-resource
tencentcloud_ccn_route_table_broadcast_policies
```

```release-note:new-resource
tencentcloud_ccn_route_table_associate_instance_config
```

```release-note:new-data-source
tencentcloud_ccn_routes
```
4 changes: 2 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ require (
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb v1.0.860
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit v1.0.544
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls v1.0.952
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.960
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.964
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.624
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp v1.0.762
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.692
Expand Down Expand Up @@ -96,7 +96,7 @@ require (
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tse v1.0.857
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf v1.0.674
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vod v1.0.860
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.960
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.964
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf v1.0.833
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wedata v1.0.792
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wss v1.0.199
Expand Down
8 changes: 8 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -946,6 +946,10 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.958 h1:WoN2
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.958/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.960 h1:hde8uWA3624nGUvC8QPf9njcyBZ7A9weqscRrqyM1Rk=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.960/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.963 h1:lUVCMP5eiSHc2HGfSVc07Tytn4p6DklJkKldObRvJrU=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.963/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.964 h1:ET3EulYQvWrdD5FNwOP+196w5Vbniy/uRGucM5ILExQ=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.964/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/csip v1.0.860 h1:F3esKBIT3HW9+7Gt8cVgf8X06VdGIczpgLBUECzSEzU=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/csip v1.0.860/go.mod h1:NZo1WplQcC314kMlCRUoy8NQju2BnolIJj7NAWgsuhY=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.624 h1:nEZqsoqt1pEoaP9JjkHQy3/H00suCfzlHW1qOm2nYD8=
Expand Down Expand Up @@ -1076,6 +1080,10 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.958 h1:PbvPRXd
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.958/go.mod h1:EzkGUZh/Tjzu1ZMsxsC3F0JqXc4GAvpXwsSdd15/xOM=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.960 h1:5huPVKrsLOrhBms2cz8w3w3v0uQmdHnwGCwRn1UTds0=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.960/go.mod h1:WX06bRa+EC/wiBsn3dHuDK8et1sx1FPkSRIBYL89g+w=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.963 h1:6Hl5u9jnDY3xzH6cWV4DV0hkaHkHjZaKRgKxwrgsne8=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.963/go.mod h1:I/v4TeM6kXoYesJ67MpDqJMRLDEypA4c0QjZBYwaka8=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.964 h1:+HsB7iMFYfDAYD0Xoj1tBsqLT1R6h/94DiooYJnorr8=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.964/go.mod h1:ohfNiTUrMTR50FAUe4wALZVYa1404YQvYB57pvVVADM=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf v1.0.833 h1:avaBlZ+Qqv7bfMg/u0jlRsbEBbE18CfqKWbfGc84PLg=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf v1.0.833/go.mod h1:fUWG217b//46Oa3VXxC5mgeYeewVAbF+lc81uET89EM=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wedata v1.0.792 h1:NLgKNOIHWa38AmW7dyfI9Jlcp2Kr9VRD94f48pPNmxM=
Expand Down
16 changes: 16 additions & 0 deletions tencentcloud/connectivity/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package connectivity

import (
"fmt"
"log"
"net/http"
"net/url"
"os"
Expand Down Expand Up @@ -207,6 +208,8 @@ type TencentCloudClient struct {
//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.
//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.
tke2Conn *tke2.Client
//omit nil client
omitNilConn *common.Client
}

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

func (me *TencentCloudClient) UseOmitNilClient(module string) *common.Client {
secretId := me.Credential.SecretId
secretKey := me.Credential.SecretKey
region := me.Region
credential := common.NewCredential(secretId, secretKey)
cpf := profile.NewClientProfile()
cpf.HttpProfile.Endpoint = fmt.Sprintf("%s.tencentcloudapi.com", module)
cpf.HttpProfile.ReqMethod = "POST"
me.omitNilConn = common.NewCommonClient(credential, region, cpf).WithLogger(log.Default())

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

请求头是否还带?

return me.omitNilConn
}

// UseCbsClient returns cbs client for service
func (me *TencentCloudClient) UseCbsClient(iacExtInfo ...IacExtInfo) *cbs.Client {
var logRoundTripper LogRoundTripper
Expand Down
6 changes: 6 additions & 0 deletions tencentcloud/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -325,6 +325,7 @@ func Provider() *schema.Provider {
"tencentcloud_ha_vips": vpc.DataSourceTencentCloudHaVips(),
"tencentcloud_ha_vip_eip_attachments": vpc.DataSourceTencentCloudHaVipEipAttachments(),
"tencentcloud_ccn_instances": ccn.DataSourceTencentCloudCcnInstances(),
"tencentcloud_ccn_routes": ccn.DataSourceTencentCloudCcnRoutes(),
"tencentcloud_ccn_bandwidth_limits": ccn.DataSourceTencentCloudCcnBandwidthLimits(),
"tencentcloud_ccn_cross_border_compliance": ccn.DataSourceTencentCloudCcnCrossBorderCompliance(),
"tencentcloud_ccn_tenant_instances": ccn.DataSourceTencentCloudCcnTenantInstance(),
Expand Down Expand Up @@ -1061,7 +1062,12 @@ func Provider() *schema.Provider {
"tencentcloud_ccn": ccn.ResourceTencentCloudCcn(),
"tencentcloud_ccn_attachment": ccn.ResourceTencentCloudCcnAttachment(),
"tencentcloud_ccn_bandwidth_limit": ccn.ResourceTencentCloudCcnBandwidthLimit(),
"tencentcloud_ccn_route_table": ccn.ResourceTencentCloudCcnRouteTable(),
"tencentcloud_ccn_route_table_input_policies": ccn.ResourceTencentCloudCcnRouteTableInputPolicies(),
"tencentcloud_ccn_route_table_broadcast_policies": ccn.ResourceTencentCloudCcnRouteTableBroadcastPolicies(),
"tencentcloud_ccn_route_table_selection_policies": ccn.ResourceTencentCloudCcnRouteTableSelectionPolicies(),
"tencentcloud_ccn_routes": ccn.ResourceTencentCloudCcnRoutes(),
"tencentcloud_ccn_route_table_associate_instance_config": ccn.ResourceTencentCloudCcnRouteTableAssociateInstanceConfig(),
"tencentcloud_ccn_instances_accept_attach": ccn.ResourceTencentCloudCcnInstancesAcceptAttach(),
"tencentcloud_ccn_instances_reject_attach": ccn.ResourceTencentCloudCcnInstancesRejectAttach(),
"tencentcloud_ccn_instances_reset_attach": ccn.ResourceTencentCloudCcnInstancesResetAttach(),
Expand Down
251 changes: 251 additions & 0 deletions tencentcloud/services/ccn/data_source_tc_ccn_routes.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,251 @@
package ccn

import (
"context"

"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312"
tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
)

func DataSourceTencentCloudCcnRoutes() *schema.Resource {
return &schema.Resource{
Read: dataSourceTencentCloudCcnRoutesRead,

Schema: map[string]*schema.Schema{
"ccn_id": {
Type: schema.TypeString,
Required: true,
Description: "ID of the CCN to be queried.",
},
"filters": {
Optional: true,
Type: schema.TypeList,
Description: "Filter conditions.",
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"name": {
Type: schema.TypeString,
Required: true,
Description: "Field to be filtered. Support `route-id`, `cidr-block`, `instance-type`, `instance-region`, `instance-id`, `route-table-id`.",
},
"values": {
Type: schema.TypeSet,
Elem: &schema.Schema{Type: schema.TypeString},
Required: true,
Description: "Filter value of the field.",
},
},
},
},
// Computed
"route_list": {
Computed: true,
Type: schema.TypeList,
Description: "CCN route list.",
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"route_id": {
Type: schema.TypeString,
Computed: true,
Description: "route ID.",
},
"destination_cidr_block": {
Type: schema.TypeString,
Computed: true,
Description: "Destination.",
},
"instance_type": {
Type: schema.TypeString,
Computed: true,
Description: "Next hop type (associated instance type), all types: VPC, DIRECTCONNECT.",
},
"instance_id": {
Type: schema.TypeString,
Computed: true,
Description: "Next jump (associated instance ID).",
},
"instance_name": {
Type: schema.TypeString,
Computed: true,
Description: "Next jump (associated instance name).",
},
"instance_region": {
Type: schema.TypeString,
Computed: true,
Description: "Next jump (associated instance region).",
},
"update_time": {
Type: schema.TypeString,
Computed: true,
Description: "update time.",
},
"enabled": {
Type: schema.TypeBool,
Computed: true,
Description: "Is routing enabled.",
},
"instance_uin": {
Type: schema.TypeString,
Computed: true,
Description: "The UIN (root account) to which the associated instance belongs.",
},
"extra_state": {
Type: schema.TypeString,
Computed: true,
Description: "Extension status of routing.",
},
"is_bgp": {
Type: schema.TypeBool,
Computed: true,
Description: "Is it dynamic routing.",
},
"route_priority": {
Type: schema.TypeInt,
Computed: true,
Description: "Routing priority.",
},
"instance_extra_name": {
Type: schema.TypeString,
Computed: true,
Description: "Next hop extension name (associated instance extension name).",
},
},
},
},
"result_output_file": {
Type: schema.TypeString,
Optional: true,
Description: "Used to save results.",
},
},
}
}

func dataSourceTencentCloudCcnRoutesRead(d *schema.ResourceData, meta interface{}) error {
defer tccommon.LogElapsed("data_source.tencentcloud_ccn_routes.read")()

var (
logId = tccommon.GetLogId(tccommon.ContextNil)
ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
service = VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
)

paramMap := make(map[string]interface{})
if v, ok := d.GetOk("ccn_id"); ok {
paramMap["CcnId"] = helper.String(v.(string))
}

if v, ok := d.GetOk("filters"); ok {
filtersSet := v.([]interface{})
tmpSet := make([]*vpc.Filter, 0, len(filtersSet))
for _, item := range filtersSet {
filter := vpc.Filter{}
filterMap := item.(map[string]interface{})
if v, ok := filterMap["name"]; ok {
filter.Name = helper.String(v.(string))
}

if v, ok := filterMap["values"]; ok {
valuesSet := v.(*schema.Set).List()
filter.Values = helper.InterfacesStringsPoint(valuesSet)
}

tmpSet = append(tmpSet, &filter)
}

paramMap["Filters"] = tmpSet
}

var routeSet []*vpc.CcnRoute
err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError {
result, e := service.DescribeVpcDescribeCcnRoutesByFilter(ctx, paramMap)
if e != nil {
return tccommon.RetryError(e)
}

routeSet = result
return nil
})

if err != nil {
return err
}

ids := make([]string, 0, len(routeSet))
tmpList := make([]map[string]interface{}, 0, len(routeSet))

if routeSet != nil {
for _, route := range routeSet {
tmpMap := make(map[string]interface{})
if route.RouteId != nil {
tmpMap["route_id"] = route.RouteId
}

if route.DestinationCidrBlock != nil {
tmpMap["destination_cidr_block"] = route.DestinationCidrBlock
}

if route.InstanceType != nil {
tmpMap["instance_type"] = route.InstanceType
}

if route.InstanceId != nil {
tmpMap["instance_id"] = route.InstanceId
}

if route.InstanceName != nil {
tmpMap["instance_name"] = route.InstanceName
}

if route.InstanceRegion != nil {
tmpMap["instance_region"] = route.InstanceRegion
}

if route.UpdateTime != nil {
tmpMap["update_time"] = route.UpdateTime
}

if route.Enabled != nil {
tmpMap["enabled"] = route.Enabled
}

if route.InstanceUin != nil {
tmpMap["instance_uin"] = route.InstanceUin
}

if route.ExtraState != nil {
tmpMap["extra_state"] = route.ExtraState
}

if route.IsBgp != nil {
tmpMap["is_bgp"] = route.IsBgp
}

if route.RoutePriority != nil {
tmpMap["route_priority"] = route.RoutePriority
}

if route.InstanceExtraName != nil {
tmpMap["instance_extra_name"] = route.InstanceExtraName
}

ids = append(ids, *route.RouteId)
tmpList = append(tmpList, tmpMap)
}

_ = d.Set("route_list", tmpList)
}

d.SetId(helper.DataResourceIdsHash(ids))
output, ok := d.GetOk("result_output_file")
if ok && output.(string) != "" {
if e := tccommon.WriteToFile(output.(string), tmpList); e != nil {
return e
}
}

return nil
}
23 changes: 23 additions & 0 deletions tencentcloud/services/ccn/data_source_tc_ccn_routes.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
Use this data source to query detailed information of CCN routes.

Example Usage

Query CCN instance all routes

```hcl
data "tencentcloud_ccn_routes" "routes" {
ccn_id = "ccn-gr7nynbd"
}
```

Query CCN instance routes by filter

```hcl
data "tencentcloud_ccn_routes" "routes" {
ccn_id = "ccn-gr7nynbd"
filters {
name = "route-table-id"
values = ["ccnrtb-jpf7bzn3"]
}
}
```
Loading
Loading