diff --git a/.changelog/2730.txt b/.changelog/2730.txt
new file mode 100644
index 0000000000..e8eda38167
--- /dev/null
+++ b/.changelog/2730.txt
@@ -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
+```
diff --git a/go.mod b/go.mod
index 5b9ed9da3b..d177aedd7f 100644
--- a/go.mod
+++ b/go.mod
@@ -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
@@ -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
diff --git a/go.sum b/go.sum
index 1344fd885f..affa250d03 100644
--- a/go.sum
+++ b/go.sum
@@ -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=
@@ -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=
diff --git a/tencentcloud/connectivity/client.go b/tencentcloud/connectivity/client.go
index 86931924a1..0f60d46269 100644
--- a/tencentcloud/connectivity/client.go
+++ b/tencentcloud/connectivity/client.go
@@ -2,6 +2,7 @@ package connectivity
import (
"fmt"
+ "log"
"net/http"
"net/url"
"os"
@@ -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
@@ -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())
+
+ return me.omitNilConn
+}
+
// UseCbsClient returns cbs client for service
func (me *TencentCloudClient) UseCbsClient(iacExtInfo ...IacExtInfo) *cbs.Client {
var logRoundTripper LogRoundTripper
diff --git a/tencentcloud/provider.go b/tencentcloud/provider.go
index fb25cf25cc..93f949cb51 100644
--- a/tencentcloud/provider.go
+++ b/tencentcloud/provider.go
@@ -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(),
@@ -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(),
diff --git a/tencentcloud/services/ccn/data_source_tc_ccn_routes.go b/tencentcloud/services/ccn/data_source_tc_ccn_routes.go
new file mode 100644
index 0000000000..410fe16d57
--- /dev/null
+++ b/tencentcloud/services/ccn/data_source_tc_ccn_routes.go
@@ -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
+}
diff --git a/tencentcloud/services/ccn/data_source_tc_ccn_routes.md b/tencentcloud/services/ccn/data_source_tc_ccn_routes.md
new file mode 100644
index 0000000000..4faa05c119
--- /dev/null
+++ b/tencentcloud/services/ccn/data_source_tc_ccn_routes.md
@@ -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"]
+ }
+}
+```
diff --git a/tencentcloud/services/ccn/resource_tc_ccn.go b/tencentcloud/services/ccn/resource_tc_ccn.go
index fc2fcff28f..8d4ac38383 100644
--- a/tencentcloud/services/ccn/resource_tc_ccn.go
+++ b/tencentcloud/services/ccn/resource_tc_ccn.go
@@ -67,6 +67,11 @@ func ResourceTencentCloudCcn() *schema.Resource {
"`INTER_REGION_LIMIT` is the inter-regional speed limit. " +
"The default is `OUTER_REGION_LIMIT`.",
},
+ "tags": {
+ Type: schema.TypeMap,
+ Optional: true,
+ Description: "Instance tag.",
+ },
// Computed values
"state": {
Type: schema.TypeString,
@@ -83,11 +88,6 @@ func ResourceTencentCloudCcn() *schema.Resource {
Computed: true,
Description: "Creation time of resource.",
},
- "tags": {
- Type: schema.TypeMap,
- Optional: true,
- Description: "Instance tag.",
- },
},
}
}
@@ -95,25 +95,42 @@ func ResourceTencentCloudCcn() *schema.Resource {
func resourceTencentCloudCcnCreate(d *schema.ResourceData, meta interface{}) error {
defer tccommon.LogElapsed("resource.tencentcloud_ccn.create")()
- logId := tccommon.GetLogId(tccommon.ContextNil)
- ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
-
- service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
-
var (
- name = d.Get("name").(string)
- description = ""
- qos = d.Get("qos").(string)
- chargeType = d.Get("charge_type").(string)
- bandwidthLimitType = d.Get("bandwidth_limit_type").(string)
+ logId = tccommon.GetLogId(tccommon.ContextNil)
+ ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
+ service = VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
+ name string
+ description string
+ qos string
+ chargeType string
+ bandwidthLimitType string
)
+
+ if temp, ok := d.GetOk("name"); ok {
+ name = temp.(string)
+ }
+
if temp, ok := d.GetOk("description"); ok {
description = temp.(string)
}
+
+ if temp, ok := d.GetOk("qos"); ok {
+ qos = temp.(string)
+ }
+
+ if temp, ok := d.GetOk("charge_type"); ok {
+ chargeType = temp.(string)
+ }
+
+ if temp, ok := d.GetOk("bandwidth_limit_type"); ok {
+ bandwidthLimitType = temp.(string)
+ }
+
info, err := service.CreateCcn(ctx, name, description, qos, chargeType, bandwidthLimitType)
if err != nil {
return err
}
+
d.SetId(info.ccnId)
if tags := helper.GetTags(d, "tags"); len(tags) > 0 {
@@ -132,10 +149,12 @@ func resourceTencentCloudCcnRead(d *schema.ResourceData, meta interface{}) error
defer tccommon.LogElapsed("resource.tencentcloud_ccn.read")()
defer tccommon.InconsistentCheck(d, meta)()
- logId := tccommon.GetLogId(tccommon.ContextNil)
- ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
+ var (
+ logId = tccommon.GetLogId(tccommon.ContextNil)
+ ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
+ service = VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
+ )
- service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError {
info, has, e := service.DescribeCcn(ctx, d.Id())
if e != nil {
@@ -158,9 +177,11 @@ func resourceTencentCloudCcnRead(d *schema.ResourceData, meta interface{}) error
return nil
})
+
if err != nil {
return err
}
+
tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn()
tagService := svctag.NewTagService(tcClient)
tags, err := tagService.DescribeResourceTags(ctx, "vpc", "ccn", tcClient.Region, d.Id())
@@ -175,16 +196,15 @@ func resourceTencentCloudCcnRead(d *schema.ResourceData, meta interface{}) error
func resourceTencentCloudCcnUpdate(d *schema.ResourceData, meta interface{}) error {
defer tccommon.LogElapsed("resource.tencentcloud_ccn.update")()
- logId := tccommon.GetLogId(tccommon.ContextNil)
- ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
-
- service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
-
var (
- name = ""
- description = ""
- change = false
+ logId = tccommon.GetLogId(tccommon.ContextNil)
+ ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
+ service = VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
+ name string
+ description string
+ change bool
)
+
if d.HasChange("name") {
name = d.Get("name").(string)
change = true
@@ -194,9 +214,11 @@ func resourceTencentCloudCcnUpdate(d *schema.ResourceData, meta interface{}) err
if temp, ok := d.GetOk("description"); ok {
description = temp.(string)
}
+
if description == "" {
return fmt.Errorf("can not set description='' ")
}
+
change = true
}
@@ -206,6 +228,7 @@ func resourceTencentCloudCcnUpdate(d *schema.ResourceData, meta interface{}) err
return err
}
}
+
// modify band width limit type
if d.HasChange("bandwidth_limit_type") {
_, news := d.GetChange("bandwidth_limit_type")
@@ -213,6 +236,7 @@ func resourceTencentCloudCcnUpdate(d *schema.ResourceData, meta interface{}) err
if err := service.ModifyCcnRegionBandwidthLimitsType(ctx, d.Id(), news.(string)); err != nil {
return tccommon.RetryError(err)
}
+
return nil
}); err != nil {
return err
@@ -220,10 +244,8 @@ func resourceTencentCloudCcnUpdate(d *schema.ResourceData, meta interface{}) err
}
if d.HasChange("tags") {
-
oldValue, newValue := d.GetChange("tags")
replaceTags, deleteTags := svctag.DiffTags(oldValue.(map[string]interface{}), newValue.(map[string]interface{}))
-
tcClient := meta.(tccommon.ProviderMeta).GetAPIV3Conn()
tagService := svctag.NewTagService(tcClient)
resourceName := tccommon.BuildTagResourceName("vpc", "ccn", tcClient.Region, d.Id())
@@ -231,8 +253,8 @@ func resourceTencentCloudCcnUpdate(d *schema.ResourceData, meta interface{}) err
if err != nil {
return err
}
-
}
+
d.Partial(false)
return resourceTencentCloudCcnRead(d, meta)
}
@@ -240,21 +262,26 @@ func resourceTencentCloudCcnUpdate(d *schema.ResourceData, meta interface{}) err
func resourceTencentCloudCcnDelete(d *schema.ResourceData, meta interface{}) error {
defer tccommon.LogElapsed("resource.tencentcloud_ccn.delete")()
- logId := tccommon.GetLogId(tccommon.ContextNil)
- ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
+ var (
+ logId = tccommon.GetLogId(tccommon.ContextNil)
+ ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
+ service = VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
+ )
- service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError {
_, has, e := service.DescribeCcn(ctx, d.Id())
if e != nil {
return tccommon.RetryError(e)
}
+
if has == 0 {
d.SetId("")
return nil
}
+
return nil
})
+
if err != nil {
return err
}
@@ -268,9 +295,11 @@ func resourceTencentCloudCcnDelete(d *schema.ResourceData, meta interface{}) err
if err != nil {
return resource.RetryableError(err)
}
+
if has == 0 {
return nil
}
+
return resource.RetryableError(fmt.Errorf("delete fail"))
})
}
diff --git a/tencentcloud/services/ccn/resource_tc_ccn.md b/tencentcloud/services/ccn/resource_tc_ccn.md
index 09f0fed229..0bc252167b 100644
--- a/tencentcloud/services/ccn/resource_tc_ccn.md
+++ b/tencentcloud/services/ccn/resource_tc_ccn.md
@@ -5,33 +5,39 @@ Example Usage
Create a prepaid CCN
```hcl
-resource "tencentcloud_ccn" "main" {
- name = "ci-temp-test-ccn"
- description = "ci-temp-test-ccn-des"
+resource "tencentcloud_ccn" "example" {
+ name = "tf-example"
+ description = "desc."
qos = "AG"
charge_type = "PREPAID"
bandwidth_limit_type = "INTER_REGION_LIMIT"
+ tags = {
+ createBy = "terraform"
+ }
}
```
Create a post-paid regional export speed limit type CCN
```hcl
-resource "tencentcloud_ccn" "main" {
- name = "ci-temp-test-ccn"
- description = "ci-temp-test-ccn-des"
+resource "tencentcloud_ccn" "example" {
+ name = "tf-example"
+ description = "desc."
qos = "AG"
charge_type = "POSTPAID"
bandwidth_limit_type = "OUTER_REGION_LIMIT"
+ tags = {
+ createBy = "terraform"
+ }
}
```
Create a post-paid inter-regional rate limit type CNN
```hcl
-resource "tencentcloud_ccn" "main" {
- name = "ci-temp-test-ccn"
- description = "ci-temp-test-ccn-des"
+resource "tencentcloud_ccn" "example" {
+ name = "tf-example"
+ description = "desc."
qos = "AG"
charge_type = "POSTPAID"
bandwidth_limit_type = "INTER_REGION_LIMIT"
@@ -43,5 +49,5 @@ Import
Ccn instance can be imported, e.g.
```
-$ terraform import tencentcloud_ccn.test ccn-id
-```
\ No newline at end of file
+$ terraform import tencentcloud_ccn.example ccn-al70jo89
+```
diff --git a/tencentcloud/services/ccn/resource_tc_ccn_attachment.go b/tencentcloud/services/ccn/resource_tc_ccn_attachment.go
index e22078a089..32b90d2979 100644
--- a/tencentcloud/services/ccn/resource_tc_ccn_attachment.go
+++ b/tencentcloud/services/ccn/resource_tc_ccn_attachment.go
@@ -62,6 +62,13 @@ func ResourceTencentCloudCcnAttachment() *schema.Resource {
Computed: true,
Description: "Uin of the ccn attached. If not set, which means the uin of this account. This parameter is used with case when attaching ccn of other account to the instance of this account. For now only support instance type `VPC`.",
},
+ "route_table_id": {
+ Type: schema.TypeString,
+ Optional: true,
+ ForceNew: true,
+ Computed: true,
+ Description: "Ccn instance route table ID.",
+ },
// Computed values
"state": {
Type: schema.TypeString,
@@ -96,18 +103,17 @@ func ResourceTencentCloudCcnAttachment() *schema.Resource {
func resourceTencentCloudCcnAttachmentCreate(d *schema.ResourceData, meta interface{}) error {
defer tccommon.LogElapsed("resource.tencentcloud_ccn_attachment.create")()
- logId := tccommon.GetLogId(tccommon.ContextNil)
- ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
-
- service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
-
var (
+ logId = tccommon.GetLogId(tccommon.ContextNil)
+ ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
+ service = VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
ccnId = d.Get("ccn_id").(string)
instanceType = d.Get("instance_type").(string)
instanceRegion = d.Get("instance_region").(string)
instanceId = d.Get("instance_id").(string)
description = ""
ccnUin = ""
+ routeTableId = ""
)
if len(ccnId) < 4 || len(instanceRegion) < 3 || len(instanceId) < 3 {
@@ -128,12 +134,17 @@ func resourceTencentCloudCcnAttachmentCreate(d *schema.ResourceData, meta interf
if err != nil {
return err
}
+
if has == 0 {
return fmt.Errorf("ccn[%s] doesn't exist", ccnId)
}
}
- if err := service.AttachCcnInstances(ctx, ccnId, instanceRegion, instanceType, instanceId, ccnUin, description); err != nil {
+ if v, ok := d.GetOk("route_table_id"); ok {
+ routeTableId = v.(string)
+ }
+
+ if err := service.AttachCcnInstances(ctx, ccnId, instanceRegion, instanceType, instanceId, ccnUin, description, routeTableId); err != nil {
return err
}
@@ -142,6 +153,7 @@ func resourceTencentCloudCcnAttachmentCreate(d *schema.ResourceData, meta interf
if err != nil {
return err
}
+
d.SetId(fmt.Sprintf("%x", m.Sum(nil)))
return resourceTencentCloudCcnAttachmentRead(d, meta)
@@ -151,10 +163,11 @@ func resourceTencentCloudCcnAttachmentRead(d *schema.ResourceData, meta interfac
defer tccommon.LogElapsed("resource.tencentcloud_ccn_attachment.read")()
defer tccommon.InconsistentCheck(d, meta)()
- logId := tccommon.GetLogId(tccommon.ContextNil)
- ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
-
- service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
+ var (
+ logId = tccommon.GetLogId(tccommon.ContextNil)
+ ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
+ service = VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
+ )
if v, ok := d.GetOk("ccn_uin"); ok {
ccnUin := v.(string)
@@ -173,6 +186,7 @@ func resourceTencentCloudCcnAttachmentRead(d *schema.ResourceData, meta interfac
d.SetId("")
return nil
}
+
findFlag := false
for _, info := range infos {
if *info.CcnUin == ccnUin && *info.CcnId == ccnId {
@@ -203,6 +217,7 @@ func resourceTencentCloudCcnAttachmentRead(d *schema.ResourceData, meta interfac
instanceId = d.Get("instance_id").(string)
onlineHas = true
)
+
err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError {
_, has, e := service.DescribeCcn(ctx, ccnId)
if e != nil {
@@ -214,30 +229,37 @@ func resourceTencentCloudCcnAttachmentRead(d *schema.ResourceData, meta interfac
onlineHas = false
return nil
}
+
return nil
})
+
if err != nil {
return err
}
+
if !onlineHas {
return nil
}
+
err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError {
info, has, e := service.DescribeCcnAttachedInstance(ctx, ccnId, instanceRegion, instanceType, instanceId)
if e != nil {
return tccommon.RetryError(e)
}
+
if has == 0 {
d.SetId("")
return nil
}
_ = d.Set("description", info.description)
+ _ = d.Set("route_table_id", info.routeTableId)
_ = d.Set("state", strings.ToUpper(info.state))
_ = d.Set("attached_time", info.attachedTime)
_ = d.Set("cidr_block", info.cidrBlock)
return nil
})
+
if err != nil {
return err
}
@@ -245,22 +267,22 @@ func resourceTencentCloudCcnAttachmentRead(d *schema.ResourceData, meta interfac
err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError {
request := vpc.NewDescribeCcnRoutesRequest()
request.CcnId = &ccnId
-
response, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().DescribeCcnRoutes(request)
if e != nil {
return tccommon.RetryError(e)
}
+
routeIds := make([]string, 0)
if response != nil && response.Response != nil && len(response.Response.RouteSet) > 0 {
for _, route := range response.Response.RouteSet {
routeIds = append(routeIds, *route.RouteId)
}
-
}
- _ = d.Set("route_ids", routeIds)
+ _ = d.Set("route_ids", routeIds)
return nil
})
+
if err != nil {
return err
}
@@ -269,29 +291,28 @@ func resourceTencentCloudCcnAttachmentRead(d *schema.ResourceData, meta interfac
}
func resourceTencentCloudCcnAttachmentUpdate(d *schema.ResourceData, meta interface{}) error {
- defer tccommon.LogElapsed("resource.tencentcloud_ccn_attachment.create")()
- logId := tccommon.GetLogId(tccommon.ContextNil)
+ defer tccommon.LogElapsed("resource.tencentcloud_ccn_attachment.update")()
if d.HasChange("description") {
var (
+ logId = tccommon.GetLogId(tccommon.ContextNil)
+ request = vpc.NewModifyCcnAttachedInstancesAttributeRequest()
+ ccnInstance vpc.CcnInstance
ccnId = d.Get("ccn_id").(string)
instanceType = d.Get("instance_type").(string)
instanceRegion = d.Get("instance_region").(string)
instanceId = d.Get("instance_id").(string)
description = d.Get("description").(string)
+ routeTableId = d.Get("route_table_id").(string)
)
- request := vpc.NewModifyCcnAttachedInstancesAttributeRequest()
request.CcnId = &ccnId
-
- var ccnInstance vpc.CcnInstance
ccnInstance.InstanceId = &instanceId
ccnInstance.InstanceRegion = &instanceRegion
ccnInstance.InstanceType = &instanceType
ccnInstance.Description = &description
-
+ ccnInstance.RouteTableId = &routeTableId
request.Instances = []*vpc.CcnInstance{&ccnInstance}
-
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
ratelimit.Check(request.GetAction())
response, err := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().ModifyCcnAttachedInstancesAttribute(request)
@@ -300,44 +321,50 @@ func resourceTencentCloudCcnAttachmentUpdate(d *schema.ResourceData, meta interf
logId, request.GetAction(), request.ToJsonString(), err.Error())
return tccommon.RetryError(err)
}
+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n",
logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
return nil
})
+
if err != nil {
return err
}
}
+
return resourceTencentCloudCcnAttachmentRead(d, meta)
}
func resourceTencentCloudCcnAttachmentDelete(d *schema.ResourceData, meta interface{}) error {
defer tccommon.LogElapsed("resource.tencentcloud_ccn_attachment.delete")()
- logId := tccommon.GetLogId(tccommon.ContextNil)
- ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
-
- service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
-
var (
+ logId = tccommon.GetLogId(tccommon.ContextNil)
+ ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
+ service = VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
ccnId = d.Get("ccn_id").(string)
instanceType = d.Get("instance_type").(string)
instanceRegion = d.Get("instance_region").(string)
instanceId = d.Get("instance_id").(string)
)
+
err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError {
_, has, e := service.DescribeCcn(ctx, ccnId)
if e != nil {
return tccommon.RetryError(e)
}
+
if has == 0 {
return nil
}
+
return nil
})
+
if err != nil {
return err
}
+
if err := service.DetachCcnInstances(ctx, ccnId, instanceRegion, instanceType, instanceId); err != nil {
return err
}
@@ -347,9 +374,11 @@ func resourceTencentCloudCcnAttachmentDelete(d *schema.ResourceData, meta interf
if err != nil {
return resource.RetryableError(err)
}
+
if has == 0 {
return nil
}
+
return resource.RetryableError(fmt.Errorf("delete fail"))
})
}
diff --git a/tencentcloud/services/ccn/resource_tc_ccn_attachment.md b/tencentcloud/services/ccn/resource_tc_ccn_attachment.md
index d4a89649a3..8c61fa1321 100644
--- a/tencentcloud/services/ccn/resource_tc_ccn_attachment.md
+++ b/tencentcloud/services/ccn/resource_tc_ccn_attachment.md
@@ -2,44 +2,121 @@ Provides a CCN attaching resource.
Example Usage
+Only Attachment instance
+
```hcl
variable "region" {
default = "ap-guangzhou"
}
-variable "otheruin" {
- default = "123353"
+variable "availability_zone" {
+ default = "ap-guangzhou-4"
+}
+
+variable "other_uin" {
+ default = "100031344528"
}
-variable "otherccn" {
- default = "ccn-151ssaga"
+variable "other_ccn" {
+ default = "ccn-qhgojahx"
}
+# create vpc
resource "tencentcloud_vpc" "vpc" {
- name = "ci-temp-test-vpc"
- cidr_block = "10.0.0.0/16"
- dns_servers = ["119.29.29.29", "8.8.8.8"]
- is_multicast = false
+ name = "vpc"
+ cidr_block = "172.16.0.0/16"
+}
+
+# create subnet
+resource "tencentcloud_subnet" "subnet" {
+ availability_zone = var.availability_zone
+ name = "subnet"
+ vpc_id = tencentcloud_vpc.vpc.id
+ cidr_block = "172.16.0.0/24"
+ is_multicast = false
}
-resource "tencentcloud_ccn" "main" {
- name = "ci-temp-test-ccn"
- description = "ci-temp-test-ccn-des"
- qos = "AG"
+# create ccn
+resource "tencentcloud_ccn" "example" {
+ name = "tf-example"
+ description = "desc."
+ qos = "AG"
+ charge_type = "PREPAID"
+ bandwidth_limit_type = "INTER_REGION_LIMIT"
+ tags = {
+ createBy = "terraform"
+ }
}
+# attachment instance
resource "tencentcloud_ccn_attachment" "attachment" {
- ccn_id = tencentcloud_ccn.main.id
- instance_type = "VPC"
+ ccn_id = tencentcloud_ccn.example.id
instance_id = tencentcloud_vpc.vpc.id
+ instance_type = "VPC"
instance_region = var.region
}
+# attachment other instance
resource "tencentcloud_ccn_attachment" "other_account" {
- ccn_id = var.otherccn
+ ccn_id = var.other_ccn
+ instance_id = tencentcloud_vpc.vpc.id
instance_type = "VPC"
+ instance_region = var.region
+ ccn_uin = var.other_uin
+}
+```
+
+Attachment instance & route table
+
+```hcl
+variable "region" {
+ default = "ap-guangzhou"
+}
+
+variable "availability_zone" {
+ default = "ap-guangzhou-4"
+}
+
+# create vpc
+resource "tencentcloud_vpc" "vpc" {
+ name = "vpc"
+ cidr_block = "172.16.0.0/16"
+}
+
+# create subnet
+resource "tencentcloud_subnet" "subnet" {
+ availability_zone = var.availability_zone
+ name = "subnet"
+ vpc_id = tencentcloud_vpc.vpc.id
+ cidr_block = "172.16.0.0/24"
+ is_multicast = false
+}
+
+# create ccn
+resource "tencentcloud_ccn" "example" {
+ name = "tf-example"
+ description = "desc."
+ qos = "AG"
+ charge_type = "PREPAID"
+ bandwidth_limit_type = "INTER_REGION_LIMIT"
+ tags = {
+ createBy = "terraform"
+ }
+}
+
+# create ccn route table
+resource "tencentcloud_ccn_route_table" "example" {
+ ccn_id = tencentcloud_ccn.example.id
+ name = "tf-example"
+ description = "desc."
+}
+
+# attachment instance & route table
+resource "tencentcloud_ccn_attachment" "attachment" {
+ ccn_id = tencentcloud_ccn.example.id
instance_id = tencentcloud_vpc.vpc.id
+ instance_type = "VPC"
instance_region = var.region
- ccn_uin = var.otheruin
+ route_table_id = tencentcloud_ccn_route_table.example.id
}
-```
\ No newline at end of file
+```
diff --git a/tencentcloud/services/ccn/resource_tc_ccn_bandwidth_limit.go b/tencentcloud/services/ccn/resource_tc_ccn_bandwidth_limit.go
index 50107e62cc..5f95bb25bc 100644
--- a/tencentcloud/services/ccn/resource_tc_ccn_bandwidth_limit.go
+++ b/tencentcloud/services/ccn/resource_tc_ccn_bandwidth_limit.go
@@ -50,71 +50,44 @@ func ResourceTencentCloudCcnBandwidthLimit() *schema.Resource {
func resourceTencentCloudCcnBandwidthLimitCreate(d *schema.ResourceData, meta interface{}) error {
defer tccommon.LogElapsed("resource.tencentcloud_ccn_bandwidth_limit.create")()
- logId := tccommon.GetLogId(tccommon.ContextNil)
- ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
-
- service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
-
var (
- ccnId = d.Get("ccn_id").(string)
- region = d.Get("region").(string)
+ logId = tccommon.GetLogId(tccommon.ContextNil)
+ ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
+ service = VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
+ ccnId = d.Get("ccn_id").(string)
+ region = d.Get("region").(string)
)
_, has, err := service.DescribeCcn(ctx, ccnId)
if err != nil {
return err
}
+
if has == 0 {
return fmt.Errorf("ccn[%s] doesn't exist", ccnId)
}
+
id := fmt.Sprintf("%s#%s", ccnId, region)
+
var (
dstRegion string
limit int64
)
+
if v, ok := d.GetOkExists("dst_region"); ok {
dstRegion = v.(string)
}
+
if v, ok := d.GetOk("bandwidth_limit"); ok {
limit = int64(v.(int))
}
+
if err := service.SetCcnRegionBandwidthLimits(ctx, ccnId, region, dstRegion, limit, false); err != nil {
return err
}
- d.SetId(id)
-
- return resourceTencentCloudCcnBandwidthLimitRead(d, meta)
-}
-
-func resourceTencentCloudCcnBandwidthLimitUpdate(d *schema.ResourceData, meta interface{}) error {
- defer tccommon.LogElapsed("resource.tencentcloud_ccn_bandwidth_limit.update")()
- logId := tccommon.GetLogId(tccommon.ContextNil)
- ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
-
- service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
+ d.SetId(id)
- var (
- ccnId = d.Get("ccn_id").(string)
- region = d.Get("region").(string)
- )
- _, has, err := service.DescribeCcn(ctx, ccnId)
- if err != nil {
- return err
- }
- if has == 0 {
- return fmt.Errorf("ccn[%s] doesn't exist", ccnId)
- }
- if d.HasChange("bandwidth_limit") {
- var limitTemp int64
- if v, ok := d.GetOk("bandwidth_limit"); ok {
- limitTemp = int64(v.(int))
- }
- _, dstRegion := d.GetChange("dst_region")
- if err := service.SetCcnRegionBandwidthLimits(ctx, ccnId, region, dstRegion.(string), limitTemp, false); err != nil {
- return err
- }
- }
return resourceTencentCloudCcnBandwidthLimitRead(d, meta)
}
@@ -122,18 +95,17 @@ func resourceTencentCloudCcnBandwidthLimitRead(d *schema.ResourceData, meta inte
defer tccommon.LogElapsed("resource.tencentcloud_ccn_bandwidth_limit.read")()
defer tccommon.InconsistentCheck(d, meta)()
- logId := tccommon.GetLogId(tccommon.ContextNil)
- ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
-
- service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
-
var (
+ logId = tccommon.GetLogId(tccommon.ContextNil)
+ ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
+ service = VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
ccnId = d.Get("ccn_id").(string)
region = d.Get("region").(string)
dstRegion = d.Get("dst_region").(string)
onlineHas = true
info CcnBasicInfo
)
+
err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError {
infoTmp, has, e := service.DescribeCcn(ctx, ccnId)
if e != nil {
@@ -145,53 +117,95 @@ func resourceTencentCloudCcnBandwidthLimitRead(d *schema.ResourceData, meta inte
onlineHas = false
return nil
}
+
info = infoTmp
return nil
})
+
if err != nil {
return err
}
+
if !onlineHas {
return nil
}
+
err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError {
bandwidth, e := service.GetCcnRegionBandwidthLimit(ctx, ccnId, region, dstRegion, info.bandWithLimitType)
if e != nil {
return tccommon.RetryError(e)
}
+
_ = d.Set("bandwidth_limit", bandwidth)
_ = d.Set("dst_region", dstRegion)
return nil
})
+
if err != nil {
return err
}
+
return nil
}
+func resourceTencentCloudCcnBandwidthLimitUpdate(d *schema.ResourceData, meta interface{}) error {
+ defer tccommon.LogElapsed("resource.tencentcloud_ccn_bandwidth_limit.update")()
+
+ var (
+ logId = tccommon.GetLogId(tccommon.ContextNil)
+ ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
+ service = VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
+ ccnId = d.Get("ccn_id").(string)
+ region = d.Get("region").(string)
+ )
+
+ _, has, err := service.DescribeCcn(ctx, ccnId)
+ if err != nil {
+ return err
+ }
+
+ if has == 0 {
+ return fmt.Errorf("ccn[%s] doesn't exist", ccnId)
+ }
+
+ if d.HasChange("bandwidth_limit") {
+ var limitTemp int64
+ if v, ok := d.GetOk("bandwidth_limit"); ok {
+ limitTemp = int64(v.(int))
+ }
+
+ _, dstRegion := d.GetChange("dst_region")
+ if err := service.SetCcnRegionBandwidthLimits(ctx, ccnId, region, dstRegion.(string), limitTemp, false); err != nil {
+ return err
+ }
+ }
+ return resourceTencentCloudCcnBandwidthLimitRead(d, meta)
+}
+
func resourceTencentCloudCcnBandwidthLimitDelete(d *schema.ResourceData, meta interface{}) error {
defer tccommon.LogElapsed("resource.tencentcloud_ccn_bandwidth_limit.delete")()
var (
+ logId = tccommon.GetLogId(tccommon.ContextNil)
+ ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
+ service = VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
ccnId = d.Get("ccn_id").(string)
region = d.Get("region").(string)
dstRegion string
limit int64
)
- logId := tccommon.GetLogId(tccommon.ContextNil)
- ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
-
- service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
-
if v, ok := d.GetOk("dst_region"); ok {
dstRegion = v.(string)
}
+
if v, ok := d.GetOk("bandwidth_limit"); ok {
limit = int64(v.(int))
}
+
if err := service.SetCcnRegionBandwidthLimits(ctx, ccnId, region, dstRegion, limit, true); err != nil {
return err
}
+
return nil
}
diff --git a/tencentcloud/services/ccn/resource_tc_ccn_route_table.go b/tencentcloud/services/ccn/resource_tc_ccn_route_table.go
new file mode 100644
index 0000000000..64abb6b573
--- /dev/null
+++ b/tencentcloud/services/ccn/resource_tc_ccn_route_table.go
@@ -0,0 +1,241 @@
+package ccn
+
+import (
+ "context"
+ "fmt"
+ "log"
+
+ tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
+ "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
+
+ "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"
+)
+
+func ResourceTencentCloudCcnRouteTable() *schema.Resource {
+ return &schema.Resource{
+ Create: resourceTencentCloudCcnRouteTableCreate,
+ Read: resourceTencentCloudCcnRouteTableRead,
+ Update: resourceTencentCloudCcnRouteTableUpdate,
+ Delete: resourceTencentCloudCcnRouteTableDelete,
+ Importer: &schema.ResourceImporter{
+ State: schema.ImportStatePassthrough,
+ },
+ Schema: map[string]*schema.Schema{
+ "ccn_id": {
+ Required: true,
+ ForceNew: true,
+ Type: schema.TypeString,
+ Description: "CCN Instance ID.",
+ },
+ "name": {
+ Required: true,
+ Type: schema.TypeString,
+ Description: "CCN Route table name.",
+ },
+ "description": {
+ Required: true,
+ Type: schema.TypeString,
+ Description: "Description of CCN Route table.",
+ },
+ // computed
+ "is_default_table": {
+ Computed: true,
+ Type: schema.TypeBool,
+ Description: "True: default routing table False: non default routing table.",
+ },
+ "create_time": {
+ Computed: true,
+ Type: schema.TypeString,
+ Description: "create time.",
+ },
+ },
+ }
+}
+
+func resourceTencentCloudCcnRouteTableCreate(d *schema.ResourceData, meta interface{}) error {
+ defer tccommon.LogElapsed("resource.tencentcloud_ccn_route_table.create")()
+ defer tccommon.InconsistentCheck(d, meta)()
+
+ var (
+ logId = tccommon.GetLogId(tccommon.ContextNil)
+ request = vpc.NewCreateCcnRouteTablesRequest()
+ response = vpc.NewCreateCcnRouteTablesResponse()
+ ccnId string
+ name string
+ description string
+ )
+
+ if v, ok := d.GetOk("ccn_id"); ok {
+ ccnId = v.(string)
+ }
+
+ if v, ok := d.GetOk("name"); ok {
+ name = v.(string)
+ }
+
+ if v, ok := d.GetOk("description"); ok {
+ description = v.(string)
+ }
+
+ request.RouteTable = []*vpc.CcnBatchRouteTable{
+ {
+ CcnId: helper.String(ccnId),
+ Name: helper.String(name),
+ Description: helper.String(description),
+ },
+ }
+ err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError {
+ result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().CreateCcnRouteTables(request)
+ if e != nil {
+ log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n",
+ logId, request.GetAction(), request.ToJsonString(), e.Error())
+ return tccommon.RetryError(e)
+ }
+
+ if result == nil || result.Response == nil || len(result.Response.CcnRouteTableSet) != 1 {
+ e = fmt.Errorf("create ccn route table failed")
+ return resource.NonRetryableError(e)
+ }
+
+ response = result
+ return nil
+ })
+
+ if err != nil {
+ log.Printf("[CRITAL]%s create ccn route table failed, reason:%s\n", logId, err.Error())
+ return err
+ }
+
+ routeTableId := *response.Response.CcnRouteTableSet[0].CcnRouteTableId
+ d.SetId(routeTableId)
+
+ return resourceTencentCloudCcnRouteTableRead(d, meta)
+}
+
+func resourceTencentCloudCcnRouteTableRead(d *schema.ResourceData, meta interface{}) error {
+ defer tccommon.LogElapsed("resource.tencentcloud_ccn_route_table.read")()
+ defer tccommon.InconsistentCheck(d, meta)()
+
+ var (
+ logId = tccommon.GetLogId(tccommon.ContextNil)
+ ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
+ service = VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
+ )
+
+ routeTableId := d.Id()
+ ccnRouteTable, err := service.DescribeVpcCcnRouteTablesById(ctx, routeTableId)
+ if err != nil {
+ return err
+ }
+
+ if ccnRouteTable == nil {
+ d.SetId("")
+ log.Printf("[WARN]%s resource `VpcCcnRouteTable` [%s] not found, please check if it has been deleted.\n", logId, d.Id())
+ return nil
+ }
+
+ if ccnRouteTable.CcnId != nil {
+ _ = d.Set("ccn_id", ccnRouteTable.CcnId)
+ }
+
+ if ccnRouteTable.RouteTableName != nil {
+ _ = d.Set("name", ccnRouteTable.RouteTableName)
+ }
+
+ if ccnRouteTable.RouteTableDescription != nil {
+ _ = d.Set("description", ccnRouteTable.RouteTableDescription)
+ }
+
+ if ccnRouteTable.IsDefaultTable != nil {
+ _ = d.Set("is_default_table", ccnRouteTable.IsDefaultTable)
+ }
+
+ if ccnRouteTable.CreateTime != nil {
+ _ = d.Set("create_time", ccnRouteTable.CreateTime)
+ }
+
+ return nil
+}
+
+func resourceTencentCloudCcnRouteTableUpdate(d *schema.ResourceData, meta interface{}) error {
+ defer tccommon.LogElapsed("resource.tencentcloud_ccn_route_table.update")()
+ defer tccommon.InconsistentCheck(d, meta)()
+
+ var (
+ logId = tccommon.GetLogId(tccommon.ContextNil)
+ routeTableId = d.Id()
+ )
+
+ if d.HasChange("name") || d.HasChange("description") {
+ var (
+ request = vpc.NewModifyCcnRouteTablesRequest()
+ name string
+ description string
+ )
+
+ if v, ok := d.GetOk("name"); ok {
+ name = v.(string)
+ }
+
+ if v, ok := d.GetOk("description"); ok {
+ description = v.(string)
+ }
+
+ request.RouteTableInfo = []*vpc.ModifyRouteTableInfo{
+ {
+ RouteTableId: helper.String(routeTableId),
+ Name: helper.String(name),
+ Description: helper.String(description),
+ },
+ }
+ err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError {
+ _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().ModifyCcnRouteTables(request)
+ if e != nil {
+ log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n",
+ logId, request.GetAction(), request.ToJsonString(), e.Error())
+ return tccommon.RetryError(e)
+ }
+
+ return nil
+ })
+
+ if err != nil {
+ log.Printf("[CRITAL]%s modify ccn route table failed, reason:%s\n", logId, err.Error())
+ return err
+ }
+ }
+
+ return resourceTencentCloudCcnRouteTableRead(d, meta)
+}
+
+func resourceTencentCloudCcnRouteTableDelete(d *schema.ResourceData, meta interface{}) error {
+ defer tccommon.LogElapsed("resource.tencentcloud_ccn_route_table.delete")()
+ defer tccommon.InconsistentCheck(d, meta)()
+
+ var (
+ logId = tccommon.GetLogId(tccommon.ContextNil)
+ request = vpc.NewDeleteCcnRouteTablesRequest()
+ routeTableId = d.Id()
+ )
+
+ request.RouteTableId = helper.Strings([]string{routeTableId})
+ err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
+ _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().DeleteCcnRouteTables(request)
+ if e != nil {
+ log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n",
+ logId, request.GetAction(), request.ToJsonString(), e.Error())
+ return tccommon.RetryError(e)
+ }
+
+ return nil
+ })
+
+ if err != nil {
+ log.Printf("[CRITAL]%s delete ccn route table failed, reason:%s\n", logId, err.Error())
+ return err
+ }
+
+ return nil
+}
diff --git a/tencentcloud/services/ccn/resource_tc_ccn_route_table.md b/tencentcloud/services/ccn/resource_tc_ccn_route_table.md
new file mode 100644
index 0000000000..7753d337f9
--- /dev/null
+++ b/tencentcloud/services/ccn/resource_tc_ccn_route_table.md
@@ -0,0 +1,55 @@
+Provides a resource to create a CCN Route table.
+
+Example Usage
+
+```hcl
+variable "region" {
+ default = "ap-guangzhou"
+}
+
+variable "availability_zone" {
+ default = "ap-guangzhou-4"
+}
+
+# create vpc
+resource "tencentcloud_vpc" "vpc" {
+ name = "vpc"
+ cidr_block = "172.16.0.0/16"
+}
+
+# create subnet
+resource "tencentcloud_subnet" "subnet" {
+ availability_zone = var.availability_zone
+ name = "subnet"
+ vpc_id = tencentcloud_vpc.vpc.id
+ cidr_block = "10.0.20.0/28"
+ is_multicast = false
+}
+
+# create ccn
+resource "tencentcloud_ccn" "example" {
+ name = "tf-example"
+ description = "desc."
+ qos = "AG"
+ charge_type = "PREPAID"
+ bandwidth_limit_type = "INTER_REGION_LIMIT"
+ tags = {
+ createBy = "terraform"
+ }
+}
+
+# create ccn route table
+resource "tencentcloud_ccn_route_table" "example" {
+ ccn_id = tencentcloud_ccn.example.id
+ name = "tf-example"
+ description = "desc."
+}
+```
+
+Import
+
+Ccn instance can be imported, e.g.
+
+```
+$ terraform import tencentcloud_ccn_route_table.example ccnrtb-r5hrr417
+```
diff --git a/tencentcloud/services/ccn/resource_tc_ccn_route_table_associate_instance_config.go b/tencentcloud/services/ccn/resource_tc_ccn_route_table_associate_instance_config.go
new file mode 100644
index 0000000000..5ed30b90db
--- /dev/null
+++ b/tencentcloud/services/ccn/resource_tc_ccn_route_table_associate_instance_config.go
@@ -0,0 +1,183 @@
+package ccn
+
+import (
+ "context"
+ "fmt"
+ "log"
+ "strings"
+
+ vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312"
+
+ tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
+
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
+ "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
+)
+
+func ResourceTencentCloudCcnRouteTableAssociateInstanceConfig() *schema.Resource {
+ return &schema.Resource{
+ Create: resourceTencentCloudCcnRouteTableAssociateInstanceConfigCreate,
+ Read: resourceTencentCloudCcnRouteTableAssociateInstanceConfigRead,
+ Update: resourceTencentCloudCcnRouteTableAssociateInstanceConfigUpdate,
+ Delete: resourceTencentCloudCcnRouteTableAssociateInstanceConfigDelete,
+ Importer: &schema.ResourceImporter{
+ State: schema.ImportStatePassthrough,
+ },
+ Schema: map[string]*schema.Schema{
+ "ccn_id": {
+ Type: schema.TypeString,
+ Required: true,
+ Description: "ID of the CCN.",
+ },
+ "route_table_id": {
+ Type: schema.TypeString,
+ Required: true,
+ Description: "Ccn instance route table ID.",
+ },
+ "instances": {
+ Required: true,
+ Type: schema.TypeSet,
+ Description: "Instances list.",
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "instance_id": {
+ Type: schema.TypeString,
+ Required: true,
+ Description: "Instances ID.",
+ },
+ "instance_type": {
+ Type: schema.TypeString,
+ Required: true,
+ Description: "Cloud networking supports instance types: VPC, DIRECTCONNECT, BMVPC, EDGE, EDGE_TUNNEL, EDGE_VPNGW, VPNGW.",
+ },
+ },
+ },
+ },
+ },
+ }
+}
+
+func resourceTencentCloudCcnRouteTableAssociateInstanceConfigCreate(d *schema.ResourceData, meta interface{}) error {
+ defer tccommon.LogElapsed("resource.tencentcloud_ccn_route_table_associate_instance_config.create")()
+ defer tccommon.InconsistentCheck(d, meta)()
+
+ ccnId := d.Get("ccn_id").(string)
+ routeTableId := d.Get("route_table_id").(string)
+
+ d.SetId(strings.Join([]string{ccnId, routeTableId}, tccommon.FILED_SP))
+
+ return resourceTencentCloudCcnRouteTableAssociateInstanceConfigUpdate(d, meta)
+}
+
+func resourceTencentCloudCcnRouteTableAssociateInstanceConfigRead(d *schema.ResourceData, meta interface{}) error {
+ defer tccommon.LogElapsed("resource.tencentcloud_ccn_route_table_associate_instance_config.read")()
+ defer tccommon.InconsistentCheck(d, meta)()
+
+ var (
+ logId = tccommon.GetLogId(tccommon.ContextNil)
+ ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
+ service = VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
+ )
+
+ items := strings.Split(d.Id(), tccommon.FILED_SP)
+ if len(items) < 2 {
+ return fmt.Errorf("id is broken,%s", d.Id())
+ }
+ ccnId := items[0]
+ routeTableId := items[1]
+
+ instanceBindList, err := service.DescribeRouteTableAssociatedInstancesById(ctx, meta, ccnId, routeTableId)
+ if err != nil {
+ return err
+ }
+
+ if instanceBindList == nil {
+ d.SetId("")
+ log.Printf("[WARN]%s resource `tencentcloud_ccn_route_table_associate_instance_config` [%s] not found, please check if it has been deleted.\n", logId, d.Id())
+ return nil
+ }
+
+ _ = d.Set("ccn_id", ccnId)
+ _ = d.Set("route_table_id", routeTableId)
+
+ tmpList := make([]map[string]interface{}, 0, len(instanceBindList))
+ for _, instanceBind := range instanceBindList {
+ instanceMap := map[string]interface{}{}
+ if instanceBind.instanceId != "" {
+ instanceMap["instance_id"] = instanceBind.instanceId
+ }
+
+ if instanceBind.instanceType != "" {
+ instanceMap["instance_type"] = instanceBind.instanceType
+ }
+
+ tmpList = append(tmpList, instanceMap)
+ }
+
+ _ = d.Set("instances", tmpList)
+
+ return nil
+}
+
+func resourceTencentCloudCcnRouteTableAssociateInstanceConfigUpdate(d *schema.ResourceData, meta interface{}) error {
+ defer tccommon.LogElapsed("resource.tencentcloud_ccn_route_table_associate_instance_config.update")()
+ defer tccommon.InconsistentCheck(d, meta)()
+
+ var (
+ logId = tccommon.GetLogId(tccommon.ContextNil)
+ request = vpc.NewAssociateInstancesToCcnRouteTableRequest()
+ )
+
+ items := strings.Split(d.Id(), tccommon.FILED_SP)
+ if len(items) < 2 {
+ return fmt.Errorf("id is broken,%s", d.Id())
+ }
+ ccnId := items[0]
+ routeTableId := items[1]
+
+ request.CcnId = helper.String(ccnId)
+ request.RouteTableId = helper.String(routeTableId)
+
+ if v, ok := d.GetOk("instances"); ok {
+ tmpV := v.(*schema.Set).List()
+ for _, item := range tmpV {
+ instanceMap := item.(map[string]interface{})
+ instanceInfo := vpc.CcnInstanceWithoutRegion{}
+ if v, ok := instanceMap["instance_id"]; ok {
+ instanceInfo.InstanceId = helper.String(v.(string))
+ }
+
+ if v, ok := instanceMap["instance_type"]; ok {
+ instanceInfo.InstanceType = helper.String(v.(string))
+ }
+
+ request.Instances = append(request.Instances, &instanceInfo)
+ }
+ }
+
+ err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
+ result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().AssociateInstancesToCcnRouteTable(request)
+ if e != nil {
+ return tccommon.RetryError(e)
+ } else {
+ log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
+ }
+
+ return nil
+ })
+
+ if err != nil {
+ log.Printf("[CRITAL]%s update dc AssociateInstancesToCcnRouteTable failed, reason:%+v", logId, err)
+ return err
+ }
+
+ return resourceTencentCloudCcnRouteTableAssociateInstanceConfigRead(d, meta)
+}
+
+func resourceTencentCloudCcnRouteTableAssociateInstanceConfigDelete(d *schema.ResourceData, meta interface{}) error {
+ defer tccommon.LogElapsed("resource.tencentcloud_ccn_route_table_associate_instance_config.delete")()
+ defer tccommon.InconsistentCheck(d, meta)()
+
+ return nil
+}
diff --git a/tencentcloud/services/ccn/resource_tc_ccn_route_table_associate_instance_config.md b/tencentcloud/services/ccn/resource_tc_ccn_route_table_associate_instance_config.md
new file mode 100644
index 0000000000..11ecda63fe
--- /dev/null
+++ b/tencentcloud/services/ccn/resource_tc_ccn_route_table_associate_instance_config.md
@@ -0,0 +1,74 @@
+Provides a resource to create a CCN Route table associate instance config.
+
+Example Usage
+
+```hcl
+variable "region" {
+ default = "ap-guangzhou"
+}
+
+variable "availability_zone" {
+ default = "ap-guangzhou-4"
+}
+
+# create vpc
+resource "tencentcloud_vpc" "vpc" {
+ name = "vpc"
+ cidr_block = "172.16.0.0/16"
+}
+
+# create subnet
+resource "tencentcloud_subnet" "subnet" {
+ availability_zone = var.availability_zone
+ name = "subnet"
+ vpc_id = tencentcloud_vpc.vpc.id
+ cidr_block = "172.16.0.0/24"
+ is_multicast = false
+}
+
+# create ccn
+resource "tencentcloud_ccn" "example" {
+ name = "tf-example"
+ description = "desc."
+ qos = "AG"
+ charge_type = "PREPAID"
+ bandwidth_limit_type = "INTER_REGION_LIMIT"
+ tags = {
+ createBy = "terraform"
+ }
+}
+
+# create ccn route table
+resource "tencentcloud_ccn_route_table" "example" {
+ ccn_id = tencentcloud_ccn.example.id
+ name = "tf-example"
+ description = "desc."
+}
+
+# attachment instance
+resource "tencentcloud_ccn_attachment" "attachment" {
+ ccn_id = tencentcloud_ccn.example.id
+ instance_id = tencentcloud_vpc.vpc.id
+ instance_type = "VPC"
+ instance_region = var.region
+ route_table_id = tencentcloud_ccn_route_table.example.id
+}
+
+# route table associate instance
+resource "tencentcloud_ccn_route_table_associate_instance_config" "example" {
+ ccn_id = tencentcloud_ccn.example.id
+ route_table_id = tencentcloud_ccn_route_table.example.id
+ instances {
+ instance_id = tencentcloud_vpc.vpc.id
+ instance_type = "VPC"
+ }
+}
+```
+
+Import
+
+Ccn instance can be imported, e.g.
+
+```
+$ terraform import tencentcloud_ccn_route_table_associate_instance_config.example ccn-gr7nynbd#ccnrtb-jpf7bzn3
+```
diff --git a/tencentcloud/services/ccn/resource_tc_ccn_route_table_broadcast_policies.go b/tencentcloud/services/ccn/resource_tc_ccn_route_table_broadcast_policies.go
new file mode 100644
index 0000000000..8bf629fac1
--- /dev/null
+++ b/tencentcloud/services/ccn/resource_tc_ccn_route_table_broadcast_policies.go
@@ -0,0 +1,472 @@
+package ccn
+
+import (
+ "context"
+ "fmt"
+ "log"
+ "strings"
+
+ tchttp "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http"
+ tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
+ "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
+
+ "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"
+)
+
+func ResourceTencentCloudCcnRouteTableBroadcastPolicies() *schema.Resource {
+ return &schema.Resource{
+ Create: resourceTencentCloudCcnRouteTableBroadcastPoliciesCreate,
+ Read: resourceTencentCloudCcnRouteTableBroadcastPoliciesRead,
+ Update: resourceTencentCloudCcnRouteTableBroadcastPoliciesUpdate,
+ Delete: resourceTencentCloudCcnRouteTableBroadcastPoliciesDelete,
+ Importer: &schema.ResourceImporter{
+ State: schema.ImportStatePassthrough,
+ },
+ Schema: map[string]*schema.Schema{
+ "ccn_id": {
+ Required: true,
+ ForceNew: true,
+ Type: schema.TypeString,
+ Description: "CCN Instance ID.",
+ },
+ "route_table_id": {
+ Required: true,
+ ForceNew: true,
+ Type: schema.TypeString,
+ Description: "CCN Route table ID.",
+ },
+ "policies": {
+ Required: true,
+ Type: schema.TypeList,
+ Description: "Routing propagation strategy.",
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "action": {
+ Type: schema.TypeString,
+ Required: true,
+ Description: "Routing behavior, `accept` allows, `drop` rejects.",
+ },
+ "description": {
+ Type: schema.TypeString,
+ Required: true,
+ Description: "Policy description.",
+ },
+ "route_conditions": {
+ Type: schema.TypeList,
+ Required: true,
+ Description: "Routing conditions.",
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "name": {
+ Type: schema.TypeString,
+ Required: true,
+ Description: "condition type.",
+ },
+ "values": {
+ Type: schema.TypeList,
+ Required: true,
+ Elem: &schema.Schema{Type: schema.TypeString},
+ Description: "List of conditional values.",
+ },
+ "match_pattern": {
+ Type: schema.TypeInt,
+ Required: true,
+ Description: "Matching mode, `1` precise matching, `0` fuzzy matching.",
+ },
+ },
+ },
+ },
+ "broadcast_conditions": {
+ Type: schema.TypeList,
+ Required: true,
+ Description: "propagation conditions.",
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "name": {
+ Type: schema.TypeString,
+ Required: true,
+ Description: "condition type.",
+ },
+ "values": {
+ Type: schema.TypeList,
+ Required: true,
+ Elem: &schema.Schema{Type: schema.TypeString},
+ Description: "List of conditional values.",
+ },
+ "match_pattern": {
+ Type: schema.TypeInt,
+ Required: true,
+ Description: "Matching mode, `1` precise matching, `0` fuzzy matching.",
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ }
+}
+
+func resourceTencentCloudCcnRouteTableBroadcastPoliciesCreate(d *schema.ResourceData, meta interface{}) error {
+ defer tccommon.LogElapsed("resource.tencentcloud_ccn_route_table_broadcast_policies.create")()
+ defer tccommon.InconsistentCheck(d, meta)()
+
+ var (
+ logId = tccommon.GetLogId(tccommon.ContextNil)
+ request = vpc.NewReplaceCcnRouteTableBroadcastPolicysRequest()
+ ccnId string
+ routeTableId string
+ )
+
+ if v, ok := d.GetOk("ccn_id"); ok {
+ request.CcnId = helper.String(v.(string))
+ ccnId = v.(string)
+ }
+
+ if v, ok := d.GetOk("route_table_id"); ok {
+ request.RouteTableId = helper.String(v.(string))
+ routeTableId = v.(string)
+ }
+
+ if v, ok := d.GetOk("policies"); ok {
+ for _, item := range v.([]interface{}) {
+ dMap := item.(map[string]interface{})
+ ccnRouteTableBroadcastPolicy := vpc.CcnRouteTableBroadcastPolicy{}
+ if v, ok := dMap["route_conditions"]; ok {
+ for _, item := range v.([]interface{}) {
+ routeConditionsMap := item.(map[string]interface{})
+ ccnRouteBroadcastPolicyRouteCondition := vpc.CcnRouteBroadcastPolicyRouteCondition{}
+ if v, ok := routeConditionsMap["name"]; ok {
+ ccnRouteBroadcastPolicyRouteCondition.Name = helper.String(v.(string))
+ }
+
+ if v, ok := routeConditionsMap["values"]; ok {
+ valuesSet := v.([]interface{})
+ for i := range valuesSet {
+ if valuesSet[i] != nil {
+ values := valuesSet[i].(string)
+ ccnRouteBroadcastPolicyRouteCondition.Values = append(ccnRouteBroadcastPolicyRouteCondition.Values, &values)
+ }
+ }
+ }
+
+ if v, ok := routeConditionsMap["match_pattern"]; ok {
+ ccnRouteBroadcastPolicyRouteCondition.MatchPattern = helper.IntUint64(v.(int))
+ }
+
+ ccnRouteTableBroadcastPolicy.RouteConditions = append(ccnRouteTableBroadcastPolicy.RouteConditions, &ccnRouteBroadcastPolicyRouteCondition)
+ }
+ }
+
+ if v, ok := dMap["broadcast_conditions"]; ok {
+ for _, item := range v.([]interface{}) {
+ broadcastConditionsMap := item.(map[string]interface{})
+ ccnRouteBroadcastPolicyRouteCondition := vpc.CcnRouteBroadcastPolicyRouteCondition{}
+ if v, ok := broadcastConditionsMap["name"]; ok {
+ ccnRouteBroadcastPolicyRouteCondition.Name = helper.String(v.(string))
+ }
+
+ if v, ok := broadcastConditionsMap["values"]; ok {
+ valuesSet := v.([]interface{})
+ for i := range valuesSet {
+ if valuesSet[i] != nil {
+ values := valuesSet[i].(string)
+ ccnRouteBroadcastPolicyRouteCondition.Values = append(ccnRouteBroadcastPolicyRouteCondition.Values, &values)
+ }
+ }
+ }
+
+ if v, ok := broadcastConditionsMap["match_pattern"]; ok {
+ ccnRouteBroadcastPolicyRouteCondition.MatchPattern = helper.IntUint64(v.(int))
+ }
+
+ ccnRouteTableBroadcastPolicy.BroadcastConditions = append(ccnRouteTableBroadcastPolicy.BroadcastConditions, &ccnRouteBroadcastPolicyRouteCondition)
+ }
+ }
+
+ if v, ok := dMap["action"]; ok {
+ ccnRouteTableBroadcastPolicy.Action = helper.String(v.(string))
+ }
+
+ if v, ok := dMap["description"]; ok {
+ ccnRouteTableBroadcastPolicy.Description = helper.String(v.(string))
+ }
+
+ request.Policys = append(request.Policys, &ccnRouteTableBroadcastPolicy)
+ }
+ }
+
+ err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
+ result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().ReplaceCcnRouteTableBroadcastPolicys(request)
+ if e != nil {
+ return tccommon.RetryError(e)
+ } else {
+ log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
+ }
+
+ if result == nil {
+ e = fmt.Errorf("create vpc ReplaceCcnRouteTableBroadcastPolicys failed")
+ return resource.NonRetryableError(e)
+ }
+
+ return nil
+ })
+
+ if err != nil {
+ log.Printf("[CRITAL]%s create vpc ReplaceCcnRouteTableBroadcastPolicys failed, reason:%+v", logId, err)
+ return err
+ }
+
+ d.SetId(strings.Join([]string{ccnId, routeTableId}, tccommon.FILED_SP))
+
+ return resourceTencentCloudCcnRouteTableBroadcastPoliciesRead(d, meta)
+}
+
+func resourceTencentCloudCcnRouteTableBroadcastPoliciesRead(d *schema.ResourceData, meta interface{}) error {
+ defer tccommon.LogElapsed("resource.tencentcloud_ccn_route_table_broadcast_policies.read")()
+ defer tccommon.InconsistentCheck(d, meta)()
+
+ var (
+ logId = tccommon.GetLogId(tccommon.ContextNil)
+ ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
+ service = VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
+ )
+
+ items := strings.Split(d.Id(), tccommon.FILED_SP)
+ if len(items) < 2 {
+ return fmt.Errorf("id is broken,%s", d.Id())
+ }
+ ccnId := items[0]
+ routeTableId := items[1]
+
+ policySet, err := service.DescribeVpcReplaceCcnRouteTableBroadcastPolicysById(ctx, ccnId, routeTableId)
+ if err != nil {
+ return err
+ }
+
+ if policySet == nil {
+ d.SetId("")
+ log.Printf("[WARN]%s resource `VpcCcnRouteTable` [%s] not found, please check if it has been deleted.\n", logId, d.Id())
+ return nil
+ }
+
+ _ = d.Set("ccn_id", ccnId)
+ _ = d.Set("route_table_id", routeTableId)
+
+ if policySet.Policys != nil {
+ policyList := []interface{}{}
+ for _, policy := range policySet.Policys {
+ policyMap := map[string]interface{}{}
+
+ if policy.RouteConditions != nil {
+ routeConditionsList := []interface{}{}
+ for _, routeConditions := range policy.RouteConditions {
+ routeConditionsMap := map[string]interface{}{}
+
+ if routeConditions.Name != nil {
+ routeConditionsMap["name"] = routeConditions.Name
+ }
+
+ if routeConditions.Values != nil {
+ routeConditionsMap["values"] = routeConditions.Values
+ }
+
+ if routeConditions.MatchPattern != nil {
+ routeConditionsMap["match_pattern"] = routeConditions.MatchPattern
+ }
+
+ routeConditionsList = append(routeConditionsList, routeConditionsMap)
+ }
+
+ policyMap["route_conditions"] = routeConditionsList
+ }
+
+ if policy.BroadcastConditions != nil {
+ broadcastConditionsList := []interface{}{}
+ for _, broadcastConditions := range policy.BroadcastConditions {
+ broadcastConditionsMap := map[string]interface{}{}
+
+ if broadcastConditions.Name != nil {
+ broadcastConditionsMap["name"] = broadcastConditions.Name
+ }
+
+ if broadcastConditions.Values != nil {
+ broadcastConditionsMap["values"] = broadcastConditions.Values
+ }
+
+ if broadcastConditions.MatchPattern != nil {
+ broadcastConditionsMap["match_pattern"] = broadcastConditions.MatchPattern
+ }
+
+ broadcastConditionsList = append(broadcastConditionsList, broadcastConditionsMap)
+ }
+
+ policyMap["broadcast_conditions"] = broadcastConditionsList
+ }
+
+ if policy.Action != nil {
+ policyMap["action"] = policy.Action
+ }
+
+ if policy.Description != nil {
+ policyMap["description"] = policy.Description
+ }
+
+ policyList = append(policyList, policyMap)
+ }
+
+ _ = d.Set("policies", policyList)
+ }
+
+ return nil
+}
+
+func resourceTencentCloudCcnRouteTableBroadcastPoliciesUpdate(d *schema.ResourceData, meta interface{}) error {
+ defer tccommon.LogElapsed("resource.tencentcloud_ccn_route_table_broadcast_policies.update")()
+ defer tccommon.InconsistentCheck(d, meta)()
+
+ var (
+ logId = tccommon.GetLogId(tccommon.ContextNil)
+ request = vpc.NewReplaceCcnRouteTableBroadcastPolicysRequest()
+ )
+
+ items := strings.Split(d.Id(), tccommon.FILED_SP)
+ if len(items) < 2 {
+ return fmt.Errorf("id is broken,%s", d.Id())
+ }
+ ccnId := items[0]
+ routeTableId := items[1]
+
+ if d.HasChange("policies") {
+ request.CcnId = &ccnId
+ request.RouteTableId = &routeTableId
+
+ if v, ok := d.GetOk("policies"); ok {
+ for _, item := range v.([]interface{}) {
+ dMap := item.(map[string]interface{})
+ ccnRouteTableBroadcastPolicy := vpc.CcnRouteTableBroadcastPolicy{}
+ if v, ok := dMap["route_conditions"]; ok {
+ for _, item := range v.([]interface{}) {
+ routeConditionsMap := item.(map[string]interface{})
+ ccnRouteBroadcastPolicyRouteCondition := vpc.CcnRouteBroadcastPolicyRouteCondition{}
+ if v, ok := routeConditionsMap["name"]; ok {
+ ccnRouteBroadcastPolicyRouteCondition.Name = helper.String(v.(string))
+ }
+
+ if v, ok := routeConditionsMap["values"]; ok {
+ valuesSet := v.([]interface{})
+ for i := range valuesSet {
+ if valuesSet[i] != nil {
+ values := valuesSet[i].(string)
+ ccnRouteBroadcastPolicyRouteCondition.Values = append(ccnRouteBroadcastPolicyRouteCondition.Values, &values)
+ }
+ }
+ }
+
+ if v, ok := routeConditionsMap["match_pattern"]; ok {
+ ccnRouteBroadcastPolicyRouteCondition.MatchPattern = helper.IntUint64(v.(int))
+ }
+
+ ccnRouteTableBroadcastPolicy.RouteConditions = append(ccnRouteTableBroadcastPolicy.RouteConditions, &ccnRouteBroadcastPolicyRouteCondition)
+ }
+ }
+
+ if v, ok := dMap["broadcast_conditions"]; ok {
+ for _, item := range v.([]interface{}) {
+ broadcastConditionsMap := item.(map[string]interface{})
+ ccnRouteBroadcastPolicyRouteCondition := vpc.CcnRouteBroadcastPolicyRouteCondition{}
+ if v, ok := broadcastConditionsMap["name"]; ok {
+ ccnRouteBroadcastPolicyRouteCondition.Name = helper.String(v.(string))
+ }
+
+ if v, ok := broadcastConditionsMap["values"]; ok {
+ valuesSet := v.([]interface{})
+ for i := range valuesSet {
+ if valuesSet[i] != nil {
+ values := valuesSet[i].(string)
+ ccnRouteBroadcastPolicyRouteCondition.Values = append(ccnRouteBroadcastPolicyRouteCondition.Values, &values)
+ }
+ }
+ }
+
+ if v, ok := broadcastConditionsMap["match_pattern"]; ok {
+ ccnRouteBroadcastPolicyRouteCondition.MatchPattern = helper.IntUint64(v.(int))
+ }
+
+ ccnRouteTableBroadcastPolicy.BroadcastConditions = append(ccnRouteTableBroadcastPolicy.BroadcastConditions, &ccnRouteBroadcastPolicyRouteCondition)
+ }
+ }
+
+ if v, ok := dMap["action"]; ok {
+ ccnRouteTableBroadcastPolicy.Action = helper.String(v.(string))
+ }
+
+ if v, ok := dMap["description"]; ok {
+ ccnRouteTableBroadcastPolicy.Description = helper.String(v.(string))
+ }
+
+ request.Policys = append(request.Policys, &ccnRouteTableBroadcastPolicy)
+ }
+ }
+ }
+
+ err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
+ result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().ReplaceCcnRouteTableBroadcastPolicys(request)
+ if e != nil {
+ return tccommon.RetryError(e)
+ } else {
+ log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
+ }
+
+ if result == nil {
+ e = fmt.Errorf("update vpc ReplaceCcnRouteTableBroadcastPolicys failed")
+ return resource.NonRetryableError(e)
+ }
+
+ return nil
+ })
+
+ if err != nil {
+ log.Printf("[CRITAL]%s update vpc ReplaceCcnRouteTableBroadcastPolicys failed, reason:%+v", logId, err)
+ return err
+ }
+
+ return resourceTencentCloudCcnRouteTableBroadcastPoliciesRead(d, meta)
+}
+
+func resourceTencentCloudCcnRouteTableBroadcastPoliciesDelete(d *schema.ResourceData, meta interface{}) error {
+ defer tccommon.LogElapsed("resource.tencentcloud_ccn_route_table_broadcast_policies.delete")()
+ defer tccommon.InconsistentCheck(d, meta)()
+
+ items := strings.Split(d.Id(), tccommon.FILED_SP)
+ if len(items) < 2 {
+ return fmt.Errorf("id is broken,%s", d.Id())
+ }
+ ccnId := items[0]
+ routeTableId := items[1]
+
+ body := map[string]interface{}{
+ "CcnId": ccnId,
+ "RouteTableId": routeTableId,
+ "Policys": []interface{}{},
+ }
+
+ client := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseOmitNilClient("vpc")
+ request := tchttp.NewCommonRequest("vpc", "2017-03-12", "ReplaceCcnRouteTableBroadcastPolicys")
+ err := request.SetActionParameters(body)
+ if err != nil {
+ return err
+ }
+
+ response := tchttp.NewCommonResponse()
+ err = client.Send(request, response)
+ if err != nil {
+ fmt.Printf("delete vpc ReplaceCcnRouteTableBroadcastPolicys failed: %v \n", err)
+ return err
+ }
+
+ return nil
+}
diff --git a/tencentcloud/services/ccn/resource_tc_ccn_route_table_broadcast_policies.md b/tencentcloud/services/ccn/resource_tc_ccn_route_table_broadcast_policies.md
new file mode 100644
index 0000000000..3dce13d205
--- /dev/null
+++ b/tencentcloud/services/ccn/resource_tc_ccn_route_table_broadcast_policies.md
@@ -0,0 +1,87 @@
+Provides a resource to create a CCN Route table broadcast policies.
+
+~> **NOTE:** Use this resource to manage all broadcast policies under the routing table of CCN instances.
+
+Example Usage
+
+```hcl
+variable "region" {
+ default = "ap-guangzhou"
+}
+
+variable "availability_zone" {
+ default = "ap-guangzhou-4"
+}
+
+# create vpc
+resource "tencentcloud_vpc" "vpc" {
+ name = "vpc"
+ cidr_block = "172.16.0.0/16"
+}
+
+# create subnet
+resource "tencentcloud_subnet" "subnet" {
+ availability_zone = var.availability_zone
+ name = "subnet"
+ vpc_id = tencentcloud_vpc.vpc.id
+ cidr_block = "172.16.0.0/24"
+ is_multicast = false
+}
+
+# create ccn
+resource "tencentcloud_ccn" "example" {
+ name = "tf-example"
+ description = "desc."
+ qos = "AG"
+ charge_type = "PREPAID"
+ bandwidth_limit_type = "INTER_REGION_LIMIT"
+ tags = {
+ createBy = "terraform"
+ }
+}
+
+# create ccn route table
+resource "tencentcloud_ccn_route_table" "example" {
+ ccn_id = tencentcloud_ccn.example.id
+ name = "tf-example"
+ description = "desc."
+}
+
+# attachment instance
+resource "tencentcloud_ccn_attachment" "attachment" {
+ ccn_id = tencentcloud_ccn.example.id
+ instance_id = tencentcloud_vpc.vpc.id
+ instance_type = "VPC"
+ instance_region = var.region
+ route_table_id = tencentcloud_ccn_route_table.example.id
+}
+
+# create route table broadcast policy
+resource "tencentcloud_ccn_route_table_broadcast_policies" "example" {
+ ccn_id = tencentcloud_ccn.example.id
+ route_table_id = tencentcloud_ccn_route_table.example.id
+ policies {
+ action = "accept"
+ description = "desc."
+ route_conditions {
+ name = "instance-region"
+ values = ["ap-guangzhou"]
+ match_pattern = 1
+ }
+
+ broadcast_conditions {
+ name = "instance-region"
+ values = ["ap-shanghai"]
+ match_pattern = 1
+ }
+ }
+}
+```
+
+Import
+
+Ccn instance can be imported, e.g.
+
+```
+$ terraform import tencentcloud_ccn_route_table_broadcast_policies.example ccn-gr7nynbd#ccnrtb-jpf7bzn3
+```
diff --git a/tencentcloud/services/ccn/resource_tc_ccn_route_table_input_policies.go b/tencentcloud/services/ccn/resource_tc_ccn_route_table_input_policies.go
new file mode 100644
index 0000000000..4046111889
--- /dev/null
+++ b/tencentcloud/services/ccn/resource_tc_ccn_route_table_input_policies.go
@@ -0,0 +1,372 @@
+package ccn
+
+import (
+ "context"
+ "fmt"
+ "log"
+ "strings"
+
+ tchttp "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http"
+ tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
+ "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
+
+ "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"
+)
+
+func ResourceTencentCloudCcnRouteTableInputPolicies() *schema.Resource {
+ return &schema.Resource{
+ Create: resourceTencentCloudCcnRouteTableInputPoliciesCreate,
+ Read: resourceTencentCloudCcnRouteTableInputPoliciesRead,
+ Update: resourceTencentCloudCcnRouteTableInputPoliciesUpdate,
+ Delete: resourceTencentCloudCcnRouteTableInputPoliciesDelete,
+ Importer: &schema.ResourceImporter{
+ State: schema.ImportStatePassthrough,
+ },
+ Schema: map[string]*schema.Schema{
+ "ccn_id": {
+ Required: true,
+ ForceNew: true,
+ Type: schema.TypeString,
+ Description: "CCN Instance ID.",
+ },
+ "route_table_id": {
+ Required: true,
+ ForceNew: true,
+ Type: schema.TypeString,
+ Description: "CCN Route table ID.",
+ },
+ "policies": {
+ Optional: true,
+ Type: schema.TypeList,
+ Description: "Routing reception strategy.",
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "action": {
+ Type: schema.TypeString,
+ Required: true,
+ Description: "Routing behavior, `accept` allows, `drop` rejects.",
+ },
+ "description": {
+ Type: schema.TypeString,
+ Required: true,
+ Description: "Policy description.",
+ },
+ "route_conditions": {
+ Type: schema.TypeList,
+ Required: true,
+ Description: "Routing conditions.",
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "name": {
+ Type: schema.TypeString,
+ Required: true,
+ Description: "condition type.",
+ },
+ "values": {
+ Type: schema.TypeList,
+ Required: true,
+ Elem: &schema.Schema{Type: schema.TypeString},
+ Description: "List of conditional values.",
+ },
+ "match_pattern": {
+ Type: schema.TypeInt,
+ Required: true,
+ Description: "Matching mode, `1` precise matching, `0` fuzzy matching.",
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ }
+}
+
+func resourceTencentCloudCcnRouteTableInputPoliciesCreate(d *schema.ResourceData, meta interface{}) error {
+ defer tccommon.LogElapsed("resource.tencentcloud_ccn_route_table_input_policies.create")()
+ defer tccommon.InconsistentCheck(d, meta)()
+
+ var (
+ logId = tccommon.GetLogId(tccommon.ContextNil)
+ request = vpc.NewReplaceCcnRouteTableInputPolicysRequest()
+ ccnId string
+ routeTableId string
+ )
+
+ if v, ok := d.GetOk("ccn_id"); ok {
+ request.CcnId = helper.String(v.(string))
+ ccnId = v.(string)
+ }
+
+ if v, ok := d.GetOk("route_table_id"); ok {
+ request.RouteTableId = helper.String(v.(string))
+ routeTableId = v.(string)
+ }
+
+ if v, ok := d.GetOk("policies"); ok {
+ for _, item := range v.([]interface{}) {
+ dMap := item.(map[string]interface{})
+ ccnRouteTableInputPolicy := vpc.CcnRouteTableInputPolicy{}
+ if v, ok := dMap["route_conditions"]; ok {
+ for _, item := range v.([]interface{}) {
+ routeConditionsMap := item.(map[string]interface{})
+ ccnRouteBroadcastPolicyRouteCondition := vpc.CcnRouteBroadcastPolicyRouteCondition{}
+ if v, ok := routeConditionsMap["name"]; ok {
+ ccnRouteBroadcastPolicyRouteCondition.Name = helper.String(v.(string))
+ }
+
+ if v, ok := routeConditionsMap["values"]; ok {
+ valuesSet := v.([]interface{})
+ for i := range valuesSet {
+ if valuesSet[i] != nil {
+ values := valuesSet[i].(string)
+ ccnRouteBroadcastPolicyRouteCondition.Values = append(ccnRouteBroadcastPolicyRouteCondition.Values, &values)
+ }
+ }
+ }
+
+ if v, ok := routeConditionsMap["match_pattern"]; ok {
+ ccnRouteBroadcastPolicyRouteCondition.MatchPattern = helper.IntUint64(v.(int))
+ }
+
+ ccnRouteTableInputPolicy.RouteConditions = append(ccnRouteTableInputPolicy.RouteConditions, &ccnRouteBroadcastPolicyRouteCondition)
+ }
+ }
+
+ if v, ok := dMap["action"]; ok {
+ ccnRouteTableInputPolicy.Action = helper.String(v.(string))
+ }
+
+ if v, ok := dMap["description"]; ok {
+ ccnRouteTableInputPolicy.Description = helper.String(v.(string))
+ }
+
+ request.Policys = append(request.Policys, &ccnRouteTableInputPolicy)
+ }
+ }
+
+ err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
+ result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().ReplaceCcnRouteTableInputPolicys(request)
+ if e != nil {
+ return tccommon.RetryError(e)
+ } else {
+ log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
+ }
+
+ if result == nil {
+ e = fmt.Errorf("create vpc ReplaceCcnRouteTableInputPolicys failed")
+ return resource.NonRetryableError(e)
+ }
+
+ return nil
+ })
+
+ if err != nil {
+ log.Printf("[CRITAL]%s create vpc ReplaceCcnRouteTableInputPolicys failed, reason:%+v", logId, err)
+ return err
+ }
+
+ d.SetId(strings.Join([]string{ccnId, routeTableId}, tccommon.FILED_SP))
+
+ return resourceTencentCloudCcnRouteTableInputPoliciesRead(d, meta)
+}
+
+func resourceTencentCloudCcnRouteTableInputPoliciesRead(d *schema.ResourceData, meta interface{}) error {
+ defer tccommon.LogElapsed("resource.tencentcloud_ccn_route_table_input_policies.read")()
+ defer tccommon.InconsistentCheck(d, meta)()
+
+ var (
+ logId = tccommon.GetLogId(tccommon.ContextNil)
+ ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
+ service = VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
+ )
+
+ items := strings.Split(d.Id(), tccommon.FILED_SP)
+ if len(items) < 2 {
+ return fmt.Errorf("id is broken,%s", d.Id())
+ }
+ ccnId := items[0]
+ routeTableId := items[1]
+
+ policySet, err := service.DescribeVpcReplaceCcnRouteTableInputPolicysById(ctx, ccnId, routeTableId)
+ if err != nil {
+ return err
+ }
+
+ if policySet == nil {
+ d.SetId("")
+ log.Printf("[WARN]%s resource `VpcCcnRouteTable` [%s] not found, please check if it has been deleted.\n", logId, d.Id())
+ return nil
+ }
+
+ _ = d.Set("ccn_id", ccnId)
+ _ = d.Set("route_table_id", routeTableId)
+
+ if policySet.Policys != nil {
+ policysList := []interface{}{}
+ for _, policys := range policySet.Policys {
+ policysMap := map[string]interface{}{}
+
+ if policys.RouteConditions != nil {
+ routeConditionsList := []interface{}{}
+ for _, routeConditions := range policys.RouteConditions {
+ routeConditionsMap := map[string]interface{}{}
+
+ if routeConditions.Name != nil {
+ routeConditionsMap["name"] = routeConditions.Name
+ }
+
+ if routeConditions.Values != nil {
+ routeConditionsMap["values"] = routeConditions.Values
+ }
+
+ if routeConditions.MatchPattern != nil {
+ routeConditionsMap["match_pattern"] = routeConditions.MatchPattern
+ }
+
+ routeConditionsList = append(routeConditionsList, routeConditionsMap)
+ }
+
+ policysMap["route_conditions"] = routeConditionsList
+ }
+
+ if policys.Action != nil {
+ policysMap["action"] = policys.Action
+ }
+
+ if policys.Description != nil {
+ policysMap["description"] = policys.Description
+ }
+
+ policysList = append(policysList, policysMap)
+ }
+
+ _ = d.Set("policies", policysList)
+ }
+
+ return nil
+}
+
+func resourceTencentCloudCcnRouteTableInputPoliciesUpdate(d *schema.ResourceData, meta interface{}) error {
+ defer tccommon.LogElapsed("resource.tencentcloud_ccn_route_table_input_policies.update")()
+ defer tccommon.InconsistentCheck(d, meta)()
+
+ var (
+ logId = tccommon.GetLogId(tccommon.ContextNil)
+ request = vpc.NewReplaceCcnRouteTableInputPolicysRequest()
+ )
+
+ items := strings.Split(d.Id(), tccommon.FILED_SP)
+ if len(items) < 2 {
+ return fmt.Errorf("id is broken,%s", d.Id())
+ }
+ ccnId := items[0]
+ routeTableId := items[1]
+
+ if d.HasChange("policies") {
+ request.CcnId = &ccnId
+ request.RouteTableId = &routeTableId
+
+ if v, ok := d.GetOk("policies"); ok {
+ for _, item := range v.([]interface{}) {
+ dMap := item.(map[string]interface{})
+ ccnRouteTableInputPolicy := vpc.CcnRouteTableInputPolicy{}
+ if v, ok := dMap["route_conditions"]; ok {
+ for _, item := range v.([]interface{}) {
+ routeConditionsMap := item.(map[string]interface{})
+ ccnRouteBroadcastPolicyRouteCondition := vpc.CcnRouteBroadcastPolicyRouteCondition{}
+ if v, ok := routeConditionsMap["name"]; ok {
+ ccnRouteBroadcastPolicyRouteCondition.Name = helper.String(v.(string))
+ }
+
+ if v, ok := routeConditionsMap["values"]; ok {
+ valuesSet := v.([]interface{})
+ for i := range valuesSet {
+ if valuesSet[i] != nil {
+ values := valuesSet[i].(string)
+ ccnRouteBroadcastPolicyRouteCondition.Values = append(ccnRouteBroadcastPolicyRouteCondition.Values, &values)
+ }
+ }
+ }
+
+ if v, ok := routeConditionsMap["match_pattern"]; ok {
+ ccnRouteBroadcastPolicyRouteCondition.MatchPattern = helper.IntUint64(v.(int))
+ }
+
+ ccnRouteTableInputPolicy.RouteConditions = append(ccnRouteTableInputPolicy.RouteConditions, &ccnRouteBroadcastPolicyRouteCondition)
+ }
+ }
+
+ if v, ok := dMap["action"]; ok {
+ ccnRouteTableInputPolicy.Action = helper.String(v.(string))
+ }
+
+ if v, ok := dMap["description"]; ok {
+ ccnRouteTableInputPolicy.Description = helper.String(v.(string))
+ }
+
+ request.Policys = append(request.Policys, &ccnRouteTableInputPolicy)
+ }
+ }
+ }
+
+ err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
+ result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().ReplaceCcnRouteTableInputPolicys(request)
+ if e != nil {
+ return tccommon.RetryError(e)
+ } else {
+ log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
+ }
+
+ if result == nil {
+ e = fmt.Errorf("update vpc ReplaceCcnRouteTableInputPolicys failed")
+ return resource.NonRetryableError(e)
+ }
+
+ return nil
+ })
+
+ if err != nil {
+ log.Printf("[CRITAL]%s update vpc ReplaceCcnRouteTableInputPolicys failed, reason:%+v", logId, err)
+ return err
+ }
+
+ return resourceTencentCloudCcnRouteTableInputPoliciesRead(d, meta)
+}
+
+func resourceTencentCloudCcnRouteTableInputPoliciesDelete(d *schema.ResourceData, meta interface{}) error {
+ defer tccommon.LogElapsed("resource.tencentcloud_ccn_route_table_input_policies.delete")()
+ defer tccommon.InconsistentCheck(d, meta)()
+
+ items := strings.Split(d.Id(), tccommon.FILED_SP)
+ if len(items) < 2 {
+ return fmt.Errorf("id is broken,%s", d.Id())
+ }
+ ccnId := items[0]
+ routeTableId := items[1]
+
+ body := map[string]interface{}{
+ "CcnId": ccnId,
+ "RouteTableId": routeTableId,
+ "Policys": []interface{}{},
+ }
+
+ client := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseOmitNilClient("vpc")
+ request := tchttp.NewCommonRequest("vpc", "2017-03-12", "ReplaceCcnRouteTableInputPolicys")
+ err := request.SetActionParameters(body)
+ if err != nil {
+ return err
+ }
+
+ response := tchttp.NewCommonResponse()
+ err = client.Send(request, response)
+ if err != nil {
+ fmt.Printf("delete vpc ReplaceCcnRouteTableInputPolicys failed: %v \n", err)
+ return err
+ }
+
+ return nil
+}
diff --git a/tencentcloud/services/ccn/resource_tc_ccn_route_table_input_policies.md b/tencentcloud/services/ccn/resource_tc_ccn_route_table_input_policies.md
new file mode 100644
index 0000000000..f887fd7251
--- /dev/null
+++ b/tencentcloud/services/ccn/resource_tc_ccn_route_table_input_policies.md
@@ -0,0 +1,81 @@
+Provides a resource to create a CCN Route table input policies.
+
+~> **NOTE:** Use this resource to manage all input policies under the routing table of CCN instances.
+
+Example Usage
+
+```hcl
+variable "region" {
+ default = "ap-guangzhou"
+}
+
+variable "availability_zone" {
+ default = "ap-guangzhou-4"
+}
+
+# create vpc
+resource "tencentcloud_vpc" "vpc" {
+ name = "vpc"
+ cidr_block = "172.16.0.0/16"
+}
+
+# create subnet
+resource "tencentcloud_subnet" "subnet" {
+ availability_zone = var.availability_zone
+ name = "subnet"
+ vpc_id = tencentcloud_vpc.vpc.id
+ cidr_block = "172.16.0.0/24"
+ is_multicast = false
+}
+
+# create ccn
+resource "tencentcloud_ccn" "example" {
+ name = "tf-example"
+ description = "desc."
+ qos = "AG"
+ charge_type = "PREPAID"
+ bandwidth_limit_type = "INTER_REGION_LIMIT"
+ tags = {
+ createBy = "terraform"
+ }
+}
+
+# create ccn route table
+resource "tencentcloud_ccn_route_table" "example" {
+ ccn_id = tencentcloud_ccn.example.id
+ name = "tf-example"
+ description = "desc."
+}
+
+# attachment instance
+resource "tencentcloud_ccn_attachment" "attachment" {
+ ccn_id = tencentcloud_ccn.example.id
+ instance_id = tencentcloud_vpc.vpc.id
+ instance_type = "VPC"
+ instance_region = var.region
+ route_table_id = tencentcloud_ccn_route_table.example.id
+}
+
+# create route table input policy
+resource "tencentcloud_ccn_route_table_input_policies" "example" {
+ ccn_id = tencentcloud_ccn.example.id
+ route_table_id = tencentcloud_ccn_route_table.example.id
+ policies {
+ action = "accept"
+ description = "desc."
+ route_conditions {
+ name = "instance-region"
+ values = [var.region]
+ match_pattern = 1
+ }
+ }
+}
+```
+
+Import
+
+Ccn instance can be imported, e.g.
+
+```
+$ terraform import tencentcloud_ccn_route_table_input_policies.example ccn-gr7nynbd#ccnrtb-jpf7bzn3
+```
diff --git a/tencentcloud/services/ccn/resource_tc_ccn_route_table_selection_policies.go b/tencentcloud/services/ccn/resource_tc_ccn_route_table_selection_policies.go
new file mode 100644
index 0000000000..4a46a389c4
--- /dev/null
+++ b/tencentcloud/services/ccn/resource_tc_ccn_route_table_selection_policies.go
@@ -0,0 +1,285 @@
+package ccn
+
+import (
+ "context"
+ "fmt"
+ "log"
+
+ "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 ResourceTencentCloudCcnRouteTableSelectionPolicies() *schema.Resource {
+ return &schema.Resource{
+ Create: resourceTencentCloudCcnRouteTableSelectionPoliciesCreate,
+ Read: resourceTencentCloudCcnRouteTableSelectionPoliciesRead,
+ Update: resourceTencentCloudCcnRouteTableSelectionPoliciesUpdate,
+ Delete: resourceTencentCloudCcnRouteTableSelectionPoliciesDelete,
+ Importer: &schema.ResourceImporter{
+ State: schema.ImportStatePassthrough,
+ },
+ Schema: map[string]*schema.Schema{
+ "ccn_id": {
+ Required: true,
+ ForceNew: true,
+ Type: schema.TypeString,
+ Description: "CCN Instance ID.",
+ },
+ "selection_policies": {
+ Required: true,
+ Type: schema.TypeList,
+ Description: "Select strategy information set.",
+ Elem: &schema.Resource{
+ Schema: map[string]*schema.Schema{
+ "instance_type": {
+ Type: schema.TypeString,
+ Required: true,
+ Description: "Instance Type: Private Network: VPC, Dedicated Gateway: DIRECTCONNECT, Blackstone Private Network: BMVPC, EDGE Device: EDGE, EDGE Tunnel: EDGE_TUNNEL, EDGE Gateway: EDGE_VPNGW, VPN Gateway: VPNGW.",
+ },
+ "instance_id": {
+ Type: schema.TypeString,
+ Required: true,
+ Description: "Instance ID.",
+ },
+ "source_cidr_block": {
+ Type: schema.TypeString,
+ Required: true,
+ Description: "Source CIDR.",
+ },
+ "route_table_id": {
+ Type: schema.TypeString,
+ Required: true,
+ Description: "route table ID.",
+ },
+ "description": {
+ Type: schema.TypeString,
+ Required: true,
+ Description: "description.",
+ },
+ },
+ },
+ },
+ },
+ }
+}
+
+func resourceTencentCloudCcnRouteTableSelectionPoliciesCreate(d *schema.ResourceData, meta interface{}) error {
+ defer tccommon.LogElapsed("resource.tencentcloud_ccn_route_table_selection_policies.create")()
+ defer tccommon.InconsistentCheck(d, meta)()
+
+ var (
+ logId = tccommon.GetLogId(tccommon.ContextNil)
+ request = vpc.NewModifyRouteTableSelectionPoliciesRequest()
+ ccnId string
+ )
+
+ if v, ok := d.GetOk("ccn_id"); ok {
+ request.CcnId = helper.String(v.(string))
+ ccnId = v.(string)
+ }
+
+ if v, ok := d.GetOk("selection_policies"); ok {
+ for _, item := range v.([]interface{}) {
+ selectionPolicy := item.(map[string]interface{})
+ selectionPolicyMap := vpc.CcnRouteTableSelectPolicy{}
+ if v, ok := selectionPolicy["instance_type"]; ok {
+ selectionPolicyMap.InstanceType = helper.String(v.(string))
+ }
+
+ if v, ok := selectionPolicy["instance_id"]; ok {
+ selectionPolicyMap.InstanceId = helper.String(v.(string))
+ }
+
+ if v, ok := selectionPolicy["source_cidr_block"]; ok {
+ selectionPolicyMap.SourceCidrBlock = helper.String(v.(string))
+ }
+
+ if v, ok := selectionPolicy["route_table_id"]; ok {
+ selectionPolicyMap.RouteTableId = helper.String(v.(string))
+ }
+
+ if v, ok := selectionPolicy["description"]; ok {
+ selectionPolicyMap.Description = helper.String(v.(string))
+ }
+
+ request.SelectionPolicies = append(request.SelectionPolicies, &selectionPolicyMap)
+ }
+ }
+
+ err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
+ result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().ModifyRouteTableSelectionPolicies(request)
+ if e != nil {
+ return tccommon.RetryError(e)
+ } else {
+ log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
+ }
+
+ if result == nil {
+ e = fmt.Errorf("create vpc ModifyRouteTableSelectionPolicies failed")
+ return resource.NonRetryableError(e)
+ }
+
+ return nil
+ })
+
+ if err != nil {
+ log.Printf("[CRITAL]%s create vpc ModifyRouteTableSelectionPolicies failed, reason:%+v", logId, err)
+ return err
+ }
+
+ d.SetId(ccnId)
+
+ return resourceTencentCloudCcnRouteTableSelectionPoliciesRead(d, meta)
+}
+
+func resourceTencentCloudCcnRouteTableSelectionPoliciesRead(d *schema.ResourceData, meta interface{}) error {
+ defer tccommon.LogElapsed("resource.tencentcloud_ccn_route_table_selection_policies.read")()
+ defer tccommon.InconsistentCheck(d, meta)()
+
+ var (
+ logId = tccommon.GetLogId(tccommon.ContextNil)
+ ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
+ service = VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
+ ccnId = d.Id()
+ )
+
+ routeSelectionPolicySet, err := service.DescribeVpcReplaceCcnRouteTableSelectionPolicysById(ctx, ccnId)
+ if err != nil {
+ return err
+ }
+
+ if routeSelectionPolicySet == nil {
+ d.SetId("")
+ log.Printf("[WARN]%s resource `RouteTableSelectionPolicies` [%s] not found, please check if it has been deleted.\n", logId, d.Id())
+ return nil
+ }
+
+ _ = d.Set("ccn_id", ccnId)
+ policyList := []interface{}{}
+ for _, policy := range routeSelectionPolicySet {
+ policyMap := map[string]interface{}{}
+ if policy.InstanceType != nil {
+ policyMap["instance_type"] = policy.InstanceType
+ }
+
+ if policy.InstanceId != nil {
+ policyMap["instance_id"] = policy.InstanceId
+ }
+
+ if policy.SourceCidrBlock != nil {
+ policyMap["source_cidr_block"] = policy.SourceCidrBlock
+ }
+
+ if policy.RouteTableId != nil {
+ policyMap["route_table_id"] = policy.RouteTableId
+ }
+
+ if policy.Description != nil {
+ policyMap["description"] = policy.Description
+ }
+
+ policyList = append(policyList, policyMap)
+ }
+
+ _ = d.Set("selection_policies", policyList)
+
+ return nil
+}
+
+func resourceTencentCloudCcnRouteTableSelectionPoliciesUpdate(d *schema.ResourceData, meta interface{}) error {
+ defer tccommon.LogElapsed("resource.tencentcloud_ccn_route_table_selection_policies.update")()
+ defer tccommon.InconsistentCheck(d, meta)()
+
+ var (
+ logId = tccommon.GetLogId(tccommon.ContextNil)
+ request = vpc.NewModifyRouteTableSelectionPoliciesRequest()
+ ccnId = d.Id()
+ )
+
+ if d.HasChange("selection_policies") {
+ request.CcnId = &ccnId
+ if v, ok := d.GetOk("selection_policies"); ok {
+ for _, item := range v.([]interface{}) {
+ selectionPolicy := item.(map[string]interface{})
+ selectionPolicyMap := vpc.CcnRouteTableSelectPolicy{}
+ if v, ok := selectionPolicy["instance_type"]; ok {
+ selectionPolicyMap.InstanceType = helper.String(v.(string))
+ }
+
+ if v, ok := selectionPolicy["instance_id"]; ok {
+ selectionPolicyMap.InstanceId = helper.String(v.(string))
+ }
+
+ if v, ok := selectionPolicy["source_cidr_block"]; ok {
+ selectionPolicyMap.SourceCidrBlock = helper.String(v.(string))
+ }
+
+ if v, ok := selectionPolicy["route_table_id"]; ok {
+ selectionPolicyMap.RouteTableId = helper.String(v.(string))
+ }
+
+ if v, ok := selectionPolicy["description"]; ok {
+ selectionPolicyMap.Description = helper.String(v.(string))
+ }
+
+ request.SelectionPolicies = append(request.SelectionPolicies, &selectionPolicyMap)
+ }
+ }
+ }
+
+ err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
+ result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().ModifyRouteTableSelectionPolicies(request)
+ if e != nil {
+ return tccommon.RetryError(e)
+ } else {
+ log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
+ }
+
+ if result == nil {
+ e = fmt.Errorf("update vpc ModifyRouteTableSelectionPolicies failed")
+ return resource.NonRetryableError(e)
+ }
+
+ return nil
+ })
+
+ if err != nil {
+ log.Printf("[CRITAL]%s update vpc ModifyRouteTableSelectionPolicies failed, reason:%+v", logId, err)
+ return err
+ }
+
+ return resourceTencentCloudCcnRouteTableSelectionPoliciesRead(d, meta)
+}
+
+func resourceTencentCloudCcnRouteTableSelectionPoliciesDelete(d *schema.ResourceData, meta interface{}) error {
+ defer tccommon.LogElapsed("resource.tencentcloud_ccn_route_table_selection_policies.delete")()
+ defer tccommon.InconsistentCheck(d, meta)()
+
+ var (
+ logId = tccommon.GetLogId(tccommon.ContextNil)
+ request = vpc.NewClearRouteTableSelectionPoliciesRequest()
+ ccnId = d.Id()
+ )
+
+ request.CcnId = &ccnId
+ err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
+ _, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().ClearRouteTableSelectionPolicies(request)
+ if e != nil {
+ log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n",
+ logId, request.GetAction(), request.ToJsonString(), e.Error())
+ return tccommon.RetryError(e)
+ }
+
+ return nil
+ })
+
+ if err != nil {
+ log.Printf("[CRITAL]%s delete vpc ClearRouteTableSelectionPolicies failed, reason:%s\n", logId, err.Error())
+ return err
+ }
+
+ return nil
+}
diff --git a/tencentcloud/services/ccn/resource_tc_ccn_route_table_selection_policies.md b/tencentcloud/services/ccn/resource_tc_ccn_route_table_selection_policies.md
new file mode 100644
index 0000000000..5d43fe7f75
--- /dev/null
+++ b/tencentcloud/services/ccn/resource_tc_ccn_route_table_selection_policies.md
@@ -0,0 +1,78 @@
+Provides a resource to create a CCN Route table selection policies.
+
+~> **NOTE:** Use this resource to manage all selection policies under the routing table of CCN instances.
+
+Example Usage
+
+```hcl
+variable "region" {
+ default = "ap-guangzhou"
+}
+
+variable "availability_zone" {
+ default = "ap-guangzhou-4"
+}
+
+# create vpc
+resource "tencentcloud_vpc" "vpc" {
+ name = "vpc"
+ cidr_block = "172.16.0.0/16"
+}
+
+# create subnet
+resource "tencentcloud_subnet" "subnet" {
+ availability_zone = var.availability_zone
+ name = "subnet"
+ vpc_id = tencentcloud_vpc.vpc.id
+ cidr_block = "172.16.0.0/24"
+ is_multicast = false
+}
+
+# create ccn
+resource "tencentcloud_ccn" "example" {
+ name = "tf-example"
+ description = "desc."
+ qos = "AG"
+ charge_type = "PREPAID"
+ bandwidth_limit_type = "INTER_REGION_LIMIT"
+ tags = {
+ createBy = "terraform"
+ }
+}
+
+# create ccn route table
+resource "tencentcloud_ccn_route_table" "example" {
+ ccn_id = tencentcloud_ccn.example.id
+ name = "tf-example"
+ description = "desc."
+}
+
+# attachment instance
+resource "tencentcloud_ccn_attachment" "attachment" {
+ ccn_id = tencentcloud_ccn.example.id
+ instance_id = tencentcloud_vpc.vpc.id
+ instance_type = "VPC"
+ instance_region = var.region
+ route_table_id = tencentcloud_ccn_route_table.example.id
+}
+
+# create route table selection policy
+resource "tencentcloud_ccn_route_table_selection_policies" "example" {
+ ccn_id = tencentcloud_ccn.example.id
+ selection_policies {
+ instance_type = "VPC"
+ instance_id = tencentcloud_vpc.vpc.id
+ source_cidr_block = "192.168.100.0/24"
+ route_table_id = tencentcloud_ccn_route_table.example.id
+ description = "desc."
+ }
+}
+```
+
+Import
+
+Ccn instance can be imported, e.g.
+
+```
+$ terraform import tencentcloud_ccn_route_table_selection_policies.example ccn-gr7nynbd
+```
diff --git a/tencentcloud/services/ccn/resource_tc_ccn_routes.go b/tencentcloud/services/ccn/resource_tc_ccn_routes.go
index 0fe709424a..9ba11009dc 100644
--- a/tencentcloud/services/ccn/resource_tc_ccn_routes.go
+++ b/tencentcloud/services/ccn/resource_tc_ccn_routes.go
@@ -29,14 +29,12 @@ func ResourceTencentCloudCcnRoutes() *schema.Resource {
ForceNew: true,
Description: "CCN Instance ID.",
},
-
"route_id": {
Required: true,
Type: schema.TypeString,
ForceNew: true,
Description: "CCN Route Id List.",
},
-
"switch": {
Required: true,
Type: schema.TypeString,
@@ -62,11 +60,11 @@ func resourceTencentCloudCcnRoutesRead(d *schema.ResourceData, meta interface{})
defer tccommon.LogElapsed("resource.tencentcloud_ccn_routes.read")()
defer tccommon.InconsistentCheck(d, meta)()
- logId := tccommon.GetLogId(tccommon.ContextNil)
-
- ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
-
- service := VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
+ var (
+ logId = tccommon.GetLogId(tccommon.ContextNil)
+ ctx = context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
+ service = VpcService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
+ )
idSplit := strings.Split(d.Id(), tccommon.FILED_SP)
if len(idSplit) != 2 {
@@ -104,7 +102,9 @@ func resourceTencentCloudCcnRoutesUpdate(d *schema.ResourceData, meta interface{
defer tccommon.LogElapsed("resource.tencentcloud_ccn_routes.update")()
defer tccommon.InconsistentCheck(d, meta)()
- logId := tccommon.GetLogId(tccommon.ContextNil)
+ var (
+ logId = tccommon.GetLogId(tccommon.ContextNil)
+ )
idSplit := strings.Split(d.Id(), tccommon.FILED_SP)
if len(idSplit) != 2 {
@@ -114,15 +114,10 @@ func resourceTencentCloudCcnRoutesUpdate(d *schema.ResourceData, meta interface{
routeId := idSplit[1]
certSwitch := d.Get("switch").(string)
-
if certSwitch == "on" {
-
- var (
- request = vpc.NewEnableCcnRoutesRequest()
- )
+ request := vpc.NewEnableCcnRoutesRequest()
request.CcnId = &ccnId
request.RouteIds = []*string{&routeId}
-
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().EnableCcnRoutes(request)
if e != nil {
@@ -130,20 +125,18 @@ func resourceTencentCloudCcnRoutesUpdate(d *schema.ResourceData, meta interface{
} else {
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
}
+
return nil
})
+
if err != nil {
log.Printf("[CRITAL]%s update vpc ccnRoutes failed, reason:%+v", logId, err)
return err
}
} else {
-
- var (
- request = vpc.NewDisableCcnRoutesRequest()
- )
+ request := vpc.NewDisableCcnRoutesRequest()
request.CcnId = &ccnId
request.RouteIds = []*string{&routeId}
-
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().DisableCcnRoutes(request)
if e != nil {
@@ -151,13 +144,14 @@ func resourceTencentCloudCcnRoutesUpdate(d *schema.ResourceData, meta interface{
} else {
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
}
+
return nil
})
+
if err != nil {
log.Printf("[CRITAL]%s update vpc ccnRoutes failed, reason:%+v", logId, err)
return err
}
-
}
return resourceTencentCloudCcnRoutesRead(d, meta)
diff --git a/tencentcloud/services/ccn/resource_tc_ccn_routes.md b/tencentcloud/services/ccn/resource_tc_ccn_routes.md
index 911e3001de..ca2a92ecd4 100644
--- a/tencentcloud/services/ccn/resource_tc_ccn_routes.md
+++ b/tencentcloud/services/ccn/resource_tc_ccn_routes.md
@@ -1,12 +1,12 @@
-Provides a resource to create a vpc ccn_routes
+Provides a resource to create a vpc ccn_routes switch
Example Usage
```hcl
-resource "tencentcloud_ccn_routes" "ccn_routes" {
- ccn_id = "ccn-39lqkygf"
- route_id = "ccnr-3o0dfyuw"
- switch = "on"
+resource "tencentcloud_ccn_routes" "example" {
+ ccn_id = "ccn-gr7nynbd"
+ route_id = "ccnrtb-jpf7bzn3"
+ switch = "off"
}
```
@@ -15,5 +15,5 @@ Import
vpc ccn_routes can be imported using the id, e.g.
```
-terraform import tencentcloud_ccn_routes.ccn_routes ccnId#routesId
-```
\ No newline at end of file
+terraform import tencentcloud_ccn_routes.ccn_routes ccn-gr7nynbd#ccnr-5uhewx1s
+```
diff --git a/tencentcloud/services/ccn/service_tencentcloud_ccn.go b/tencentcloud/services/ccn/service_tencentcloud_ccn.go
index 957b149462..6bbbc45bc2 100644
--- a/tencentcloud/services/ccn/service_tencentcloud_ccn.go
+++ b/tencentcloud/services/ccn/service_tencentcloud_ccn.go
@@ -2,10 +2,13 @@ package ccn
import (
"context"
+ "encoding/json"
"fmt"
"log"
"strings"
+ tchttp "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http"
+
vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312"
tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
@@ -27,6 +30,33 @@ type CcnBasicInfo struct {
createTime string
}
+type CcnInstanceBind struct {
+ instanceId string
+ instanceType string
+}
+
+type CcnInstanceBindResponseData struct {
+ InstanceBindSet []struct {
+ AliasInstanceId string `json:"AliasInstanceId"`
+ AliasType string `json:"AliasType"`
+ CcnId string `json:"CcnId"`
+ InstanceBindTime string `json:"InstanceBindTime"`
+ InstanceId string `json:"InstanceId"`
+ InstanceName string `json:"InstanceName"`
+ InstanceRegion string `json:"InstanceRegion"`
+ InstanceType string `json:"InstanceType"`
+ InstanceUin string `json:"InstanceUin"`
+ RouteTableId string `json:"RouteTableId"`
+ State string `json:"State"`
+ } `json:"InstanceBindSet"`
+ RequestId string `json:"RequestId"`
+ TotalCount int `json:"TotalCount"`
+}
+
+type CcnInstanceBindApiResponse struct {
+ Response CcnInstanceBindResponseData `json:"Response"`
+}
+
func (info CcnBasicInfo) CcnId() string {
return info.ccnId
}
@@ -52,6 +82,7 @@ type CcnAttachedInstanceInfo struct {
attachedTime string
cidrBlock []string
description string
+ routeTableId string
}
type CcnBandwidthLimit struct {
@@ -465,11 +496,59 @@ func (me *VpcService) DescribeCcnAttachedInstances(ctx context.Context, ccnId st
info.instanceType = *item.InstanceType
info.state = *item.State
info.description = *item.Description
+ info.routeTableId = *item.RouteTableId
infos = append(infos, info)
}
return
}
+func (me *VpcService) DescribeVpcDescribeCcnRoutesByFilter(ctx context.Context, paramMap map[string]interface{}) (RouteSet []*vpc.CcnRoute, errRet error) {
+ var (
+ logId = tccommon.GetLogId(ctx)
+ request = vpc.NewDescribeCcnRoutesRequest()
+ response = vpc.NewDescribeCcnRoutesResponse()
+ limit uint64 = 20
+ offset uint64 = 0
+ err error
+ )
+
+ for k, v := range paramMap {
+ if k == "CcnId" {
+ request.CcnId = v.(*string)
+ }
+
+ if k == "Filters" {
+ request.Filters = v.([]*vpc.Filter)
+ }
+ }
+
+ ratelimit.Check(request.GetAction())
+
+ for {
+ request.Limit = &limit
+ request.Offset = &offset
+ response, err = me.client.UseVpcClient().DescribeCcnRoutes(request)
+ if err != nil {
+ log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%v]", logId, request.GetAction(), request.ToJsonString(), err)
+ errRet = err
+ return
+ }
+
+ if response == nil || len(response.Response.RouteSet) < 1 {
+ break
+ }
+
+ RouteSet = append(RouteSet, response.Response.RouteSet...)
+ if len(response.Response.RouteSet) < int(limit) {
+ break
+ }
+
+ offset += limit
+ }
+
+ return
+}
+
func (me *VpcService) DescribeCcnAttachmentsByInstance(ctx context.Context, instanceType string, instanceId string, instanceRegion string) (infos []vpc.CcnAttachedInstance, errRet error) {
logId := tccommon.GetLogId(ctx)
@@ -515,7 +594,7 @@ func (me *VpcService) DescribeCcnAttachmentsByInstance(ctx context.Context, inst
return
}
-func (me *VpcService) AttachCcnInstances(ctx context.Context, ccnId, instanceRegion, instanceType, instanceId string, ccnUin string, description string) (errRet error) {
+func (me *VpcService) AttachCcnInstances(ctx context.Context, ccnId, instanceRegion, instanceType, instanceId, ccnUin, description, routeTableId string) (errRet error) {
logId := tccommon.GetLogId(ctx)
request := vpc.NewAttachCcnInstancesRequest()
@@ -533,6 +612,10 @@ func (me *VpcService) AttachCcnInstances(ctx context.Context, ccnId, instanceReg
ccnInstance.Description = &description
}
+ if routeTableId != "" {
+ ccnInstance.RouteTableId = &routeTableId
+ }
+
request.Instances = []*vpc.CcnInstance{&ccnInstance}
ratelimit.Check(request.GetAction())
response, err := me.client.UseVpcClient().AttachCcnInstances(request)
@@ -947,6 +1030,222 @@ func (me *VpcService) DescribeCcnCrossBorderComplianceByFilter(ctx context.Conte
return
}
+func (me *VpcService) DescribeRouteTableAssociatedInstancesById(ctx context.Context, meta interface{}, ccnId, routeTableId string) (instanceBindList []CcnInstanceBind, errRet error) {
+ body := map[string]interface{}{
+ "Filters": []map[string]interface{}{
+ {
+ "Name": "ccn-id",
+ "Values": []string{ccnId},
+ },
+ {
+ "Name": "ccn-route-table-id",
+ "Values": []string{routeTableId},
+ },
+ },
+ "Offset": 0,
+ "Limit": 100,
+ }
+
+ client := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseOmitNilClient("vpc")
+ request := tchttp.NewCommonRequest("vpc", "2017-03-12", "DescribeRouteTableAssociatedInstances")
+ err := request.SetActionParameters(body)
+ if err != nil {
+ errRet = err
+ return
+ }
+
+ response := tchttp.NewCommonResponse()
+ err = client.Send(request, response)
+ if err != nil {
+ fmt.Printf("describe vpc DescribeRouteTableAssociatedInstances failed: %v \n", err)
+ errRet = err
+ return
+ }
+
+ resultStr := string(response.GetBody())
+ var ccnInstanceBindApiResponse CcnInstanceBindApiResponse
+ err = json.Unmarshal([]byte(resultStr), &ccnInstanceBindApiResponse)
+ if err != nil {
+ errRet = err
+ return
+ }
+
+ InstanceBindSet := ccnInstanceBindApiResponse.Response.InstanceBindSet
+ for _, BindSet := range InstanceBindSet {
+ var tmpBind CcnInstanceBind
+ if BindSet.InstanceId != "" {
+ tmpBind.instanceId = BindSet.InstanceId
+ }
+
+ if BindSet.InstanceType != "" {
+ tmpBind.instanceType = BindSet.InstanceType
+ }
+
+ instanceBindList = append(instanceBindList, tmpBind)
+ }
+
+ return
+
+ //logId := tccommon.GetLogId(ctx)
+ //
+ //request := vpc.NewDescribeRouteTableAssociatedInstancesRequest()
+ //request.Filters = []*vpc.Filter{
+ // {
+ // Name: helper.String("ccn-id"),
+ // Values: helper.Strings([]string{ccnId}),
+ // },
+ // {
+ // Name: helper.String("ccn-route-table-id"),
+ // Values: helper.Strings([]string{routeTableId}),
+ // },
+ //}
+ //
+ //defer func() {
+ // if errRet != nil {
+ // log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error())
+ // }
+ //}()
+ //
+ //ratelimit.Check(request.GetAction())
+ //response, err := me.client.UseVpcClient().DescribeRouteTableAssociatedInstances(request)
+ //if err != nil {
+ // errRet = err
+ // return
+ //}
+ //
+ //log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
+ //if response.Response == nil || len(response.Response.InstanceBindSet) < 1 {
+ // return
+ //}
+ //
+ //instanceBindList = response.Response.InstanceBindSet
+ //return
+}
+
+func (me *VpcService) DescribeVpcReplaceCcnRouteTableInputPolicysById(ctx context.Context, ccnId, routeTableId string) (policySet *vpc.CcnRouteTableInputPolicys, errRet error) {
+ logId := tccommon.GetLogId(ctx)
+
+ request := vpc.NewDescribeCcnRouteTableInputPolicysRequest()
+ request.CcnId = helper.String(ccnId)
+ request.RouteTableId = helper.String(routeTableId)
+
+ defer func() {
+ if errRet != nil {
+ log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error())
+ }
+ }()
+
+ ratelimit.Check(request.GetAction())
+ response, err := me.client.UseVpcClient().DescribeCcnRouteTableInputPolicys(request)
+ if err != nil {
+ errRet = err
+ return
+ }
+
+ log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
+ if response.Response == nil || len(response.Response.PolicySet) < 1 {
+ return
+ }
+
+ policySet = response.Response.PolicySet[0]
+ return
+}
+
+func (me *VpcService) DescribeVpcReplaceCcnRouteTableBroadcastPolicysById(ctx context.Context, ccnId, routeTableId string) (policySet *vpc.CcnRouteTableBroadcastPolicys, errRet error) {
+ logId := tccommon.GetLogId(ctx)
+
+ request := vpc.NewDescribeCcnRouteTableBroadcastPolicysRequest()
+ request.CcnId = helper.String(ccnId)
+ request.RouteTableId = helper.String(routeTableId)
+
+ defer func() {
+ if errRet != nil {
+ log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error())
+ }
+ }()
+
+ ratelimit.Check(request.GetAction())
+ response, err := me.client.UseVpcClient().DescribeCcnRouteTableBroadcastPolicys(request)
+ if err != nil {
+ errRet = err
+ return
+ }
+
+ log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
+ if response.Response == nil || len(response.Response.PolicySet) < 1 {
+ return
+ }
+
+ policySet = response.Response.PolicySet[0]
+ return
+}
+
+func (me *VpcService) DescribeVpcReplaceCcnRouteTableSelectionPolicysById(ctx context.Context, ccnId string) (routeSelectionPolicySet []*vpc.RouteSelectionPolicy, errRet error) {
+ logId := tccommon.GetLogId(ctx)
+
+ request := vpc.NewDescribeRouteTableSelectionPoliciesRequest()
+ request.Filters = []*vpc.Filter{
+ {
+ Name: helper.String("ccn-id"),
+ Values: helper.Strings([]string{ccnId}),
+ },
+ }
+
+ defer func() {
+ if errRet != nil {
+ log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error())
+ }
+ }()
+
+ ratelimit.Check(request.GetAction())
+ response, err := me.client.UseVpcClient().DescribeRouteTableSelectionPolicies(request)
+ if err != nil {
+ errRet = err
+ return
+ }
+
+ log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
+ if response.Response == nil || len(response.Response.RouteSelectionPolicySet) == 0 {
+ return
+ }
+
+ routeSelectionPolicySet = response.Response.RouteSelectionPolicySet
+ return
+}
+
+func (me *VpcService) DescribeVpcCcnRouteTablesById(ctx context.Context, routeTableId string) (ccnRouteTable *vpc.CcnRouteTable, errRet error) {
+ logId := tccommon.GetLogId(ctx)
+
+ request := vpc.NewDescribeCcnRouteTablesRequest()
+ request.Filters = []*vpc.Filter{
+ {
+ Name: helper.String("route-table-id"),
+ Values: helper.Strings([]string{routeTableId}),
+ },
+ }
+
+ defer func() {
+ if errRet != nil {
+ log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error())
+ }
+ }()
+
+ ratelimit.Check(request.GetAction())
+ response, err := me.client.UseVpcClient().DescribeCcnRouteTables(request)
+ if err != nil {
+ errRet = err
+ return
+ }
+
+ log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
+ if response.Response == nil || len(response.Response.CcnRouteTableSet) != 1 {
+ return
+ }
+
+ ccnRouteTable = response.Response.CcnRouteTableSet[0]
+ return
+}
+
func (me *VpcService) DescribeVpcCcnRoutesById(ctx context.Context, ccnId string, routeId string) (ccnRoutes *vpc.CcnRoute, errRet error) {
logId := tccommon.GetLogId(ctx)
diff --git a/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http/request.go b/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http/request.go
index 196937da5c..3c164a1f7e 100644
--- a/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http/request.go
+++ b/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http/request.go
@@ -265,7 +265,7 @@ func CompleteCommonParams(request Request, region string, requestClient string)
params["Action"] = request.GetAction()
params["Timestamp"] = strconv.FormatInt(time.Now().Unix(), 10)
params["Nonce"] = strconv.Itoa(rand.Int())
- params["RequestClient"] = "SDK_GO_1.0.960"
+ params["RequestClient"] = "SDK_GO_1.0.964"
if requestClient != "" {
params["RequestClient"] += ": " + requestClient
}
diff --git a/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312/client.go b/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312/client.go
index 34f6812d70..c6085da4da 100644
--- a/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312/client.go
+++ b/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312/client.go
@@ -1308,6 +1308,67 @@ func (c *Client) AssociateDirectConnectGatewayNatGatewayWithContext(ctx context.
return
}
+func NewAssociateInstancesToCcnRouteTableRequest() (request *AssociateInstancesToCcnRouteTableRequest) {
+ request = &AssociateInstancesToCcnRouteTableRequest{
+ BaseRequest: &tchttp.BaseRequest{},
+ }
+
+ request.Init().WithApiInfo("vpc", APIVersion, "AssociateInstancesToCcnRouteTable")
+
+
+ return
+}
+
+func NewAssociateInstancesToCcnRouteTableResponse() (response *AssociateInstancesToCcnRouteTableResponse) {
+ response = &AssociateInstancesToCcnRouteTableResponse{
+ BaseResponse: &tchttp.BaseResponse{},
+ }
+ return
+
+}
+
+// AssociateInstancesToCcnRouteTable
+// 本接口(AssociateInstancesToCcnRouteTable)用于将指定的云联网实例关联到指定的云联网路由表。
+//
+// 可能返回的错误码:
+// INVALIDPARAMETER = "InvalidParameter"
+// INVALIDPARAMETERVALUE = "InvalidParameterValue"
+// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed"
+// RESOURCENOTFOUND = "ResourceNotFound"
+// UNSUPPORTEDOPERATION = "UnsupportedOperation"
+// UNSUPPORTEDOPERATION_CCNROUTETABLENOTEXIST = "UnsupportedOperation.CcnRouteTableNotExist"
+// UNSUPPORTEDOPERATION_INVALIDINSTANCESTATE = "UnsupportedOperation.InvalidInstanceState"
+func (c *Client) AssociateInstancesToCcnRouteTable(request *AssociateInstancesToCcnRouteTableRequest) (response *AssociateInstancesToCcnRouteTableResponse, err error) {
+ return c.AssociateInstancesToCcnRouteTableWithContext(context.Background(), request)
+}
+
+// AssociateInstancesToCcnRouteTable
+// 本接口(AssociateInstancesToCcnRouteTable)用于将指定的云联网实例关联到指定的云联网路由表。
+//
+// 可能返回的错误码:
+// INVALIDPARAMETER = "InvalidParameter"
+// INVALIDPARAMETERVALUE = "InvalidParameterValue"
+// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed"
+// RESOURCENOTFOUND = "ResourceNotFound"
+// UNSUPPORTEDOPERATION = "UnsupportedOperation"
+// UNSUPPORTEDOPERATION_CCNROUTETABLENOTEXIST = "UnsupportedOperation.CcnRouteTableNotExist"
+// UNSUPPORTEDOPERATION_INVALIDINSTANCESTATE = "UnsupportedOperation.InvalidInstanceState"
+func (c *Client) AssociateInstancesToCcnRouteTableWithContext(ctx context.Context, request *AssociateInstancesToCcnRouteTableRequest) (response *AssociateInstancesToCcnRouteTableResponse, err error) {
+ if request == nil {
+ request = NewAssociateInstancesToCcnRouteTableRequest()
+ }
+
+ if c.GetCredential() == nil {
+ return nil, errors.New("AssociateInstancesToCcnRouteTable require credential")
+ }
+
+ request.SetContext(ctx)
+
+ response = NewAssociateInstancesToCcnRouteTableResponse()
+ err = c.Send(request, response)
+ return
+}
+
func NewAssociateNatGatewayAddressRequest() (request *AssociateNatGatewayAddressRequest) {
request = &AssociateNatGatewayAddressRequest{
BaseRequest: &tchttp.BaseRequest{},
@@ -2109,6 +2170,73 @@ func (c *Client) CheckNetDetectStateWithContext(ctx context.Context, request *Ch
return
}
+func NewClearRouteTableSelectionPoliciesRequest() (request *ClearRouteTableSelectionPoliciesRequest) {
+ request = &ClearRouteTableSelectionPoliciesRequest{
+ BaseRequest: &tchttp.BaseRequest{},
+ }
+
+ request.Init().WithApiInfo("vpc", APIVersion, "ClearRouteTableSelectionPolicies")
+
+
+ return
+}
+
+func NewClearRouteTableSelectionPoliciesResponse() (response *ClearRouteTableSelectionPoliciesResponse) {
+ response = &ClearRouteTableSelectionPoliciesResponse{
+ BaseResponse: &tchttp.BaseResponse{},
+ }
+ return
+
+}
+
+// ClearRouteTableSelectionPolicies
+// 本接口(ClearRouteTableSelectionPolicies)用于清空指定云联网的路由表选择策略。
+//
+// 可能返回的错误码:
+// INVALIDPARAMETER = "InvalidParameter"
+// INVALIDPARAMETERVALUE = "InvalidParameterValue"
+// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed"
+// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range"
+// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong"
+// RESOURCENOTFOUND = "ResourceNotFound"
+// UNSUPPORTEDOPERATION_CCNROUTETABLENOTEXIST = "UnsupportedOperation.CcnRouteTableNotExist"
+// UNSUPPORTEDOPERATION_INSTANCENOTEXIST = "UnsupportedOperation.InstanceNotExist"
+// UNSUPPORTEDOPERATION_NOTSUPPORTCREATECCNROUTETABLE = "UnsupportedOperation.NotSupportCreateCcnRouteTable"
+// UNSUPPORTEDOPERATION_NOTSUPPORTSAMECCNINSTANCEANDSOURCEADDRESS = "UnsupportedOperation.NotSupportSameCcnInstanceAndSourceAddress"
+func (c *Client) ClearRouteTableSelectionPolicies(request *ClearRouteTableSelectionPoliciesRequest) (response *ClearRouteTableSelectionPoliciesResponse, err error) {
+ return c.ClearRouteTableSelectionPoliciesWithContext(context.Background(), request)
+}
+
+// ClearRouteTableSelectionPolicies
+// 本接口(ClearRouteTableSelectionPolicies)用于清空指定云联网的路由表选择策略。
+//
+// 可能返回的错误码:
+// INVALIDPARAMETER = "InvalidParameter"
+// INVALIDPARAMETERVALUE = "InvalidParameterValue"
+// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed"
+// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range"
+// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong"
+// RESOURCENOTFOUND = "ResourceNotFound"
+// UNSUPPORTEDOPERATION_CCNROUTETABLENOTEXIST = "UnsupportedOperation.CcnRouteTableNotExist"
+// UNSUPPORTEDOPERATION_INSTANCENOTEXIST = "UnsupportedOperation.InstanceNotExist"
+// UNSUPPORTEDOPERATION_NOTSUPPORTCREATECCNROUTETABLE = "UnsupportedOperation.NotSupportCreateCcnRouteTable"
+// UNSUPPORTEDOPERATION_NOTSUPPORTSAMECCNINSTANCEANDSOURCEADDRESS = "UnsupportedOperation.NotSupportSameCcnInstanceAndSourceAddress"
+func (c *Client) ClearRouteTableSelectionPoliciesWithContext(ctx context.Context, request *ClearRouteTableSelectionPoliciesRequest) (response *ClearRouteTableSelectionPoliciesResponse, err error) {
+ if request == nil {
+ request = NewClearRouteTableSelectionPoliciesRequest()
+ }
+
+ if c.GetCredential() == nil {
+ return nil, errors.New("ClearRouteTableSelectionPolicies require credential")
+ }
+
+ request.SetContext(ctx)
+
+ response = NewClearRouteTableSelectionPoliciesResponse()
+ err = c.Send(request, response)
+ return
+}
+
func NewCloneSecurityGroupRequest() (request *CloneSecurityGroupRequest) {
request = &CloneSecurityGroupRequest{
BaseRequest: &tchttp.BaseRequest{},
@@ -2710,6 +2838,69 @@ func (c *Client) CreateCcnWithContext(ctx context.Context, request *CreateCcnReq
return
}
+func NewCreateCcnRouteTablesRequest() (request *CreateCcnRouteTablesRequest) {
+ request = &CreateCcnRouteTablesRequest{
+ BaseRequest: &tchttp.BaseRequest{},
+ }
+
+ request.Init().WithApiInfo("vpc", APIVersion, "CreateCcnRouteTables")
+
+
+ return
+}
+
+func NewCreateCcnRouteTablesResponse() (response *CreateCcnRouteTablesResponse) {
+ response = &CreateCcnRouteTablesResponse{
+ BaseResponse: &tchttp.BaseResponse{},
+ }
+ return
+
+}
+
+// CreateCcnRouteTables
+// 本接口(CreateCcnRouteTables)用于给指定的云联网实例新建路由表。
+//
+// 可能返回的错误码:
+// INVALIDPARAMETER = "InvalidParameter"
+// INVALIDPARAMETERVALUE = "InvalidParameterValue"
+// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed"
+// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range"
+// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong"
+// RESOURCENOTFOUND = "ResourceNotFound"
+// UNSUPPORTEDOPERATION_NOTSUPPORTCREATECCNROUTETABLE = "UnsupportedOperation.NotSupportCreateCcnRouteTable"
+// UNSUPPORTEDOPERATION_ROUTETABLEEXCEEDPERVBCLIMIT = "UnsupportedOperation.RouteTableExceedPerVbcLimit"
+func (c *Client) CreateCcnRouteTables(request *CreateCcnRouteTablesRequest) (response *CreateCcnRouteTablesResponse, err error) {
+ return c.CreateCcnRouteTablesWithContext(context.Background(), request)
+}
+
+// CreateCcnRouteTables
+// 本接口(CreateCcnRouteTables)用于给指定的云联网实例新建路由表。
+//
+// 可能返回的错误码:
+// INVALIDPARAMETER = "InvalidParameter"
+// INVALIDPARAMETERVALUE = "InvalidParameterValue"
+// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed"
+// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range"
+// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong"
+// RESOURCENOTFOUND = "ResourceNotFound"
+// UNSUPPORTEDOPERATION_NOTSUPPORTCREATECCNROUTETABLE = "UnsupportedOperation.NotSupportCreateCcnRouteTable"
+// UNSUPPORTEDOPERATION_ROUTETABLEEXCEEDPERVBCLIMIT = "UnsupportedOperation.RouteTableExceedPerVbcLimit"
+func (c *Client) CreateCcnRouteTablesWithContext(ctx context.Context, request *CreateCcnRouteTablesRequest) (response *CreateCcnRouteTablesResponse, err error) {
+ if request == nil {
+ request = NewCreateCcnRouteTablesRequest()
+ }
+
+ if c.GetCredential() == nil {
+ return nil, errors.New("CreateCcnRouteTables require credential")
+ }
+
+ request.SetContext(ctx)
+
+ response = NewCreateCcnRouteTablesResponse()
+ err = c.Send(request, response)
+ return
+}
+
func NewCreateCustomerGatewayRequest() (request *CreateCustomerGatewayRequest) {
request = &CreateCustomerGatewayRequest{
BaseRequest: &tchttp.BaseRequest{},
@@ -6884,6 +7075,69 @@ func (c *Client) DeleteCcnWithContext(ctx context.Context, request *DeleteCcnReq
return
}
+func NewDeleteCcnRouteTablesRequest() (request *DeleteCcnRouteTablesRequest) {
+ request = &DeleteCcnRouteTablesRequest{
+ BaseRequest: &tchttp.BaseRequest{},
+ }
+
+ request.Init().WithApiInfo("vpc", APIVersion, "DeleteCcnRouteTables")
+
+
+ return
+}
+
+func NewDeleteCcnRouteTablesResponse() (response *DeleteCcnRouteTablesResponse) {
+ response = &DeleteCcnRouteTablesResponse{
+ BaseResponse: &tchttp.BaseResponse{},
+ }
+ return
+
+}
+
+// DeleteCcnRouteTables
+// 本接口(DeleteCcnRouteTables)用于删除云联网路由表。
+//
+// 可能返回的错误码:
+// INVALIDPARAMETER = "InvalidParameter"
+// INVALIDPARAMETERVALUE = "InvalidParameterValue"
+// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed"
+// RESOURCENOTFOUND = "ResourceNotFound"
+// UNSUPPORTEDOPERATION_CCNROUTETABLENOTEXIST = "UnsupportedOperation.CcnRouteTableNotExist"
+// UNSUPPORTEDOPERATION_DELDEFAULTROUTE = "UnsupportedOperation.DelDefaultRoute"
+// UNSUPPORTEDOPERATION_NOTSUPPORTDELETEDEFAULTCCNROUTETABLE = "UnsupportedOperation.NotSupportDeleteDefaultCcnRouteTable"
+// UNSUPPORTEDOPERATION_ROUTETABLECANNOTDELETE = "UnsupportedOperation.RouteTableCanNotDelete"
+func (c *Client) DeleteCcnRouteTables(request *DeleteCcnRouteTablesRequest) (response *DeleteCcnRouteTablesResponse, err error) {
+ return c.DeleteCcnRouteTablesWithContext(context.Background(), request)
+}
+
+// DeleteCcnRouteTables
+// 本接口(DeleteCcnRouteTables)用于删除云联网路由表。
+//
+// 可能返回的错误码:
+// INVALIDPARAMETER = "InvalidParameter"
+// INVALIDPARAMETERVALUE = "InvalidParameterValue"
+// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed"
+// RESOURCENOTFOUND = "ResourceNotFound"
+// UNSUPPORTEDOPERATION_CCNROUTETABLENOTEXIST = "UnsupportedOperation.CcnRouteTableNotExist"
+// UNSUPPORTEDOPERATION_DELDEFAULTROUTE = "UnsupportedOperation.DelDefaultRoute"
+// UNSUPPORTEDOPERATION_NOTSUPPORTDELETEDEFAULTCCNROUTETABLE = "UnsupportedOperation.NotSupportDeleteDefaultCcnRouteTable"
+// UNSUPPORTEDOPERATION_ROUTETABLECANNOTDELETE = "UnsupportedOperation.RouteTableCanNotDelete"
+func (c *Client) DeleteCcnRouteTablesWithContext(ctx context.Context, request *DeleteCcnRouteTablesRequest) (response *DeleteCcnRouteTablesResponse, err error) {
+ if request == nil {
+ request = NewDeleteCcnRouteTablesRequest()
+ }
+
+ if c.GetCredential() == nil {
+ return nil, errors.New("DeleteCcnRouteTables require credential")
+ }
+
+ request.SetContext(ctx)
+
+ response = NewDeleteCcnRouteTablesResponse()
+ err = c.Send(request, response)
+ return
+}
+
func NewDeleteCustomerGatewayRequest() (request *DeleteCustomerGatewayRequest) {
request = &DeleteCustomerGatewayRequest{
BaseRequest: &tchttp.BaseRequest{},
@@ -9972,164 +10226,325 @@ func (c *Client) DescribeCcnRegionBandwidthLimitsWithContext(ctx context.Context
return
}
-func NewDescribeCcnRoutesRequest() (request *DescribeCcnRoutesRequest) {
- request = &DescribeCcnRoutesRequest{
+func NewDescribeCcnRouteTableBroadcastPolicysRequest() (request *DescribeCcnRouteTableBroadcastPolicysRequest) {
+ request = &DescribeCcnRouteTableBroadcastPolicysRequest{
BaseRequest: &tchttp.BaseRequest{},
}
- request.Init().WithApiInfo("vpc", APIVersion, "DescribeCcnRoutes")
+ request.Init().WithApiInfo("vpc", APIVersion, "DescribeCcnRouteTableBroadcastPolicys")
return
}
-func NewDescribeCcnRoutesResponse() (response *DescribeCcnRoutesResponse) {
- response = &DescribeCcnRoutesResponse{
+func NewDescribeCcnRouteTableBroadcastPolicysResponse() (response *DescribeCcnRouteTableBroadcastPolicysResponse) {
+ response = &DescribeCcnRouteTableBroadcastPolicysResponse{
BaseResponse: &tchttp.BaseResponse{},
}
return
}
-// DescribeCcnRoutes
-// 本接口(DescribeCcnRoutes)用于查询已加入云联网(CCN)的路由。
+// DescribeCcnRouteTableBroadcastPolicys
+// 本接口(DescribeCcnRouteTableBroadcastPolicys)用于查询指定云联网路由表的路由传播策略。
//
// 可能返回的错误码:
-// INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist"
// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed"
-// INVALIDPARAMETERVALUE_PARAMETERMISMATCH = "InvalidParameterValue.ParameterMismatch"
-// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range"
// RESOURCENOTFOUND = "ResourceNotFound"
-// UNSUPPORTEDOPERATION_APPIDNOTFOUND = "UnsupportedOperation.AppIdNotFound"
-func (c *Client) DescribeCcnRoutes(request *DescribeCcnRoutesRequest) (response *DescribeCcnRoutesResponse, err error) {
- return c.DescribeCcnRoutesWithContext(context.Background(), request)
+// UNSUPPORTEDOPERATION_ACTIONNOTFOUND = "UnsupportedOperation.ActionNotFound"
+func (c *Client) DescribeCcnRouteTableBroadcastPolicys(request *DescribeCcnRouteTableBroadcastPolicysRequest) (response *DescribeCcnRouteTableBroadcastPolicysResponse, err error) {
+ return c.DescribeCcnRouteTableBroadcastPolicysWithContext(context.Background(), request)
}
-// DescribeCcnRoutes
-// 本接口(DescribeCcnRoutes)用于查询已加入云联网(CCN)的路由。
+// DescribeCcnRouteTableBroadcastPolicys
+// 本接口(DescribeCcnRouteTableBroadcastPolicys)用于查询指定云联网路由表的路由传播策略。
//
// 可能返回的错误码:
-// INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist"
// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed"
-// INVALIDPARAMETERVALUE_PARAMETERMISMATCH = "InvalidParameterValue.ParameterMismatch"
-// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range"
// RESOURCENOTFOUND = "ResourceNotFound"
-// UNSUPPORTEDOPERATION_APPIDNOTFOUND = "UnsupportedOperation.AppIdNotFound"
-func (c *Client) DescribeCcnRoutesWithContext(ctx context.Context, request *DescribeCcnRoutesRequest) (response *DescribeCcnRoutesResponse, err error) {
+// UNSUPPORTEDOPERATION_ACTIONNOTFOUND = "UnsupportedOperation.ActionNotFound"
+func (c *Client) DescribeCcnRouteTableBroadcastPolicysWithContext(ctx context.Context, request *DescribeCcnRouteTableBroadcastPolicysRequest) (response *DescribeCcnRouteTableBroadcastPolicysResponse, err error) {
if request == nil {
- request = NewDescribeCcnRoutesRequest()
+ request = NewDescribeCcnRouteTableBroadcastPolicysRequest()
}
if c.GetCredential() == nil {
- return nil, errors.New("DescribeCcnRoutes require credential")
+ return nil, errors.New("DescribeCcnRouteTableBroadcastPolicys require credential")
}
request.SetContext(ctx)
- response = NewDescribeCcnRoutesResponse()
+ response = NewDescribeCcnRouteTableBroadcastPolicysResponse()
err = c.Send(request, response)
return
}
-func NewDescribeCcnsRequest() (request *DescribeCcnsRequest) {
- request = &DescribeCcnsRequest{
+func NewDescribeCcnRouteTableInputPolicysRequest() (request *DescribeCcnRouteTableInputPolicysRequest) {
+ request = &DescribeCcnRouteTableInputPolicysRequest{
BaseRequest: &tchttp.BaseRequest{},
}
- request.Init().WithApiInfo("vpc", APIVersion, "DescribeCcns")
+ request.Init().WithApiInfo("vpc", APIVersion, "DescribeCcnRouteTableInputPolicys")
return
}
-func NewDescribeCcnsResponse() (response *DescribeCcnsResponse) {
- response = &DescribeCcnsResponse{
+func NewDescribeCcnRouteTableInputPolicysResponse() (response *DescribeCcnRouteTableInputPolicysResponse) {
+ response = &DescribeCcnRouteTableInputPolicysResponse{
BaseResponse: &tchttp.BaseResponse{},
}
return
}
-// DescribeCcns
-// 本接口(DescribeCcns)用于查询云联网(CCN)列表。
+// DescribeCcnRouteTableInputPolicys
+// 本接口(DescribeCcnRouteTableInputPolicys)用于查询指定云联网路由表的路由接收策略。
//
// 可能返回的错误码:
-// INVALIDPARAMETER = "InvalidParameter"
-// INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist"
-// INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey"
-// INVALIDPARAMETER_FILTERNOTDICT = "InvalidParameter.FilterNotDict"
-// INVALIDPARAMETER_FILTERVALUESNOTLIST = "InvalidParameter.FilterValuesNotList"
-// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded"
-// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed"
-// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range"
-// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong"
// RESOURCENOTFOUND = "ResourceNotFound"
-// UNSUPPORTEDOPERATION = "UnsupportedOperation"
// UNSUPPORTEDOPERATION_ACTIONNOTFOUND = "UnsupportedOperation.ActionNotFound"
-func (c *Client) DescribeCcns(request *DescribeCcnsRequest) (response *DescribeCcnsResponse, err error) {
- return c.DescribeCcnsWithContext(context.Background(), request)
+func (c *Client) DescribeCcnRouteTableInputPolicys(request *DescribeCcnRouteTableInputPolicysRequest) (response *DescribeCcnRouteTableInputPolicysResponse, err error) {
+ return c.DescribeCcnRouteTableInputPolicysWithContext(context.Background(), request)
}
-// DescribeCcns
-// 本接口(DescribeCcns)用于查询云联网(CCN)列表。
+// DescribeCcnRouteTableInputPolicys
+// 本接口(DescribeCcnRouteTableInputPolicys)用于查询指定云联网路由表的路由接收策略。
//
// 可能返回的错误码:
-// INVALIDPARAMETER = "InvalidParameter"
-// INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist"
-// INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey"
-// INVALIDPARAMETER_FILTERNOTDICT = "InvalidParameter.FilterNotDict"
-// INVALIDPARAMETER_FILTERVALUESNOTLIST = "InvalidParameter.FilterValuesNotList"
-// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded"
-// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed"
-// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range"
-// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong"
// RESOURCENOTFOUND = "ResourceNotFound"
-// UNSUPPORTEDOPERATION = "UnsupportedOperation"
// UNSUPPORTEDOPERATION_ACTIONNOTFOUND = "UnsupportedOperation.ActionNotFound"
-func (c *Client) DescribeCcnsWithContext(ctx context.Context, request *DescribeCcnsRequest) (response *DescribeCcnsResponse, err error) {
+func (c *Client) DescribeCcnRouteTableInputPolicysWithContext(ctx context.Context, request *DescribeCcnRouteTableInputPolicysRequest) (response *DescribeCcnRouteTableInputPolicysResponse, err error) {
if request == nil {
- request = NewDescribeCcnsRequest()
+ request = NewDescribeCcnRouteTableInputPolicysRequest()
}
if c.GetCredential() == nil {
- return nil, errors.New("DescribeCcns require credential")
+ return nil, errors.New("DescribeCcnRouteTableInputPolicys require credential")
}
request.SetContext(ctx)
- response = NewDescribeCcnsResponse()
+ response = NewDescribeCcnRouteTableInputPolicysResponse()
err = c.Send(request, response)
return
}
-func NewDescribeClassicLinkInstancesRequest() (request *DescribeClassicLinkInstancesRequest) {
- request = &DescribeClassicLinkInstancesRequest{
+func NewDescribeCcnRouteTablesRequest() (request *DescribeCcnRouteTablesRequest) {
+ request = &DescribeCcnRouteTablesRequest{
BaseRequest: &tchttp.BaseRequest{},
}
- request.Init().WithApiInfo("vpc", APIVersion, "DescribeClassicLinkInstances")
+ request.Init().WithApiInfo("vpc", APIVersion, "DescribeCcnRouteTables")
return
}
-func NewDescribeClassicLinkInstancesResponse() (response *DescribeClassicLinkInstancesResponse) {
- response = &DescribeClassicLinkInstancesResponse{
+func NewDescribeCcnRouteTablesResponse() (response *DescribeCcnRouteTablesResponse) {
+ response = &DescribeCcnRouteTablesResponse{
BaseResponse: &tchttp.BaseResponse{},
}
return
}
-// DescribeClassicLinkInstances
-// 本接口(DescribeClassicLinkInstances)用于查询私有网络和基础网络设备互通列表。
+// DescribeCcnRouteTables
+// 该接口用于查询指定的云联网实例的路由表信息。
//
// 可能返回的错误码:
-// INVALIDPARAMETER_FILTERVALUESNOTLIST = "InvalidParameter.FilterValuesNotList"
-// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded"
+// INVALIDPARAMETER = "InvalidParameter"
+// INVALIDPARAMETERVALUE = "InvalidParameterValue"
+// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed"
// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range"
-func (c *Client) DescribeClassicLinkInstances(request *DescribeClassicLinkInstancesRequest) (response *DescribeClassicLinkInstancesResponse, err error) {
- return c.DescribeClassicLinkInstancesWithContext(context.Background(), request)
+// RESOURCENOTFOUND = "ResourceNotFound"
+func (c *Client) DescribeCcnRouteTables(request *DescribeCcnRouteTablesRequest) (response *DescribeCcnRouteTablesResponse, err error) {
+ return c.DescribeCcnRouteTablesWithContext(context.Background(), request)
+}
+
+// DescribeCcnRouteTables
+// 该接口用于查询指定的云联网实例的路由表信息。
+//
+// 可能返回的错误码:
+// INVALIDPARAMETER = "InvalidParameter"
+// INVALIDPARAMETERVALUE = "InvalidParameterValue"
+// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed"
+// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range"
+// RESOURCENOTFOUND = "ResourceNotFound"
+func (c *Client) DescribeCcnRouteTablesWithContext(ctx context.Context, request *DescribeCcnRouteTablesRequest) (response *DescribeCcnRouteTablesResponse, err error) {
+ if request == nil {
+ request = NewDescribeCcnRouteTablesRequest()
+ }
+
+ if c.GetCredential() == nil {
+ return nil, errors.New("DescribeCcnRouteTables require credential")
+ }
+
+ request.SetContext(ctx)
+
+ response = NewDescribeCcnRouteTablesResponse()
+ err = c.Send(request, response)
+ return
+}
+
+func NewDescribeCcnRoutesRequest() (request *DescribeCcnRoutesRequest) {
+ request = &DescribeCcnRoutesRequest{
+ BaseRequest: &tchttp.BaseRequest{},
+ }
+
+ request.Init().WithApiInfo("vpc", APIVersion, "DescribeCcnRoutes")
+
+
+ return
+}
+
+func NewDescribeCcnRoutesResponse() (response *DescribeCcnRoutesResponse) {
+ response = &DescribeCcnRoutesResponse{
+ BaseResponse: &tchttp.BaseResponse{},
+ }
+ return
+
+}
+
+// DescribeCcnRoutes
+// 本接口(DescribeCcnRoutes)用于查询已加入云联网(CCN)的路由。
+//
+// 可能返回的错误码:
+// INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist"
+// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed"
+// INVALIDPARAMETERVALUE_PARAMETERMISMATCH = "InvalidParameterValue.ParameterMismatch"
+// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range"
+// RESOURCENOTFOUND = "ResourceNotFound"
+// UNSUPPORTEDOPERATION_APPIDNOTFOUND = "UnsupportedOperation.AppIdNotFound"
+func (c *Client) DescribeCcnRoutes(request *DescribeCcnRoutesRequest) (response *DescribeCcnRoutesResponse, err error) {
+ return c.DescribeCcnRoutesWithContext(context.Background(), request)
+}
+
+// DescribeCcnRoutes
+// 本接口(DescribeCcnRoutes)用于查询已加入云联网(CCN)的路由。
+//
+// 可能返回的错误码:
+// INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist"
+// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed"
+// INVALIDPARAMETERVALUE_PARAMETERMISMATCH = "InvalidParameterValue.ParameterMismatch"
+// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range"
+// RESOURCENOTFOUND = "ResourceNotFound"
+// UNSUPPORTEDOPERATION_APPIDNOTFOUND = "UnsupportedOperation.AppIdNotFound"
+func (c *Client) DescribeCcnRoutesWithContext(ctx context.Context, request *DescribeCcnRoutesRequest) (response *DescribeCcnRoutesResponse, err error) {
+ if request == nil {
+ request = NewDescribeCcnRoutesRequest()
+ }
+
+ if c.GetCredential() == nil {
+ return nil, errors.New("DescribeCcnRoutes require credential")
+ }
+
+ request.SetContext(ctx)
+
+ response = NewDescribeCcnRoutesResponse()
+ err = c.Send(request, response)
+ return
+}
+
+func NewDescribeCcnsRequest() (request *DescribeCcnsRequest) {
+ request = &DescribeCcnsRequest{
+ BaseRequest: &tchttp.BaseRequest{},
+ }
+
+ request.Init().WithApiInfo("vpc", APIVersion, "DescribeCcns")
+
+
+ return
+}
+
+func NewDescribeCcnsResponse() (response *DescribeCcnsResponse) {
+ response = &DescribeCcnsResponse{
+ BaseResponse: &tchttp.BaseResponse{},
+ }
+ return
+
+}
+
+// DescribeCcns
+// 本接口(DescribeCcns)用于查询云联网(CCN)列表。
+//
+// 可能返回的错误码:
+// INVALIDPARAMETER = "InvalidParameter"
+// INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist"
+// INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey"
+// INVALIDPARAMETER_FILTERNOTDICT = "InvalidParameter.FilterNotDict"
+// INVALIDPARAMETER_FILTERVALUESNOTLIST = "InvalidParameter.FilterValuesNotList"
+// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded"
+// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed"
+// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range"
+// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong"
+// RESOURCENOTFOUND = "ResourceNotFound"
+// UNSUPPORTEDOPERATION = "UnsupportedOperation"
+// UNSUPPORTEDOPERATION_ACTIONNOTFOUND = "UnsupportedOperation.ActionNotFound"
+func (c *Client) DescribeCcns(request *DescribeCcnsRequest) (response *DescribeCcnsResponse, err error) {
+ return c.DescribeCcnsWithContext(context.Background(), request)
+}
+
+// DescribeCcns
+// 本接口(DescribeCcns)用于查询云联网(CCN)列表。
+//
+// 可能返回的错误码:
+// INVALIDPARAMETER = "InvalidParameter"
+// INVALIDPARAMETER_COEXIST = "InvalidParameter.Coexist"
+// INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey"
+// INVALIDPARAMETER_FILTERNOTDICT = "InvalidParameter.FilterNotDict"
+// INVALIDPARAMETER_FILTERVALUESNOTLIST = "InvalidParameter.FilterValuesNotList"
+// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded"
+// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed"
+// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range"
+// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong"
+// RESOURCENOTFOUND = "ResourceNotFound"
+// UNSUPPORTEDOPERATION = "UnsupportedOperation"
+// UNSUPPORTEDOPERATION_ACTIONNOTFOUND = "UnsupportedOperation.ActionNotFound"
+func (c *Client) DescribeCcnsWithContext(ctx context.Context, request *DescribeCcnsRequest) (response *DescribeCcnsResponse, err error) {
+ if request == nil {
+ request = NewDescribeCcnsRequest()
+ }
+
+ if c.GetCredential() == nil {
+ return nil, errors.New("DescribeCcns require credential")
+ }
+
+ request.SetContext(ctx)
+
+ response = NewDescribeCcnsResponse()
+ err = c.Send(request, response)
+ return
+}
+
+func NewDescribeClassicLinkInstancesRequest() (request *DescribeClassicLinkInstancesRequest) {
+ request = &DescribeClassicLinkInstancesRequest{
+ BaseRequest: &tchttp.BaseRequest{},
+ }
+
+ request.Init().WithApiInfo("vpc", APIVersion, "DescribeClassicLinkInstances")
+
+
+ return
+}
+
+func NewDescribeClassicLinkInstancesResponse() (response *DescribeClassicLinkInstancesResponse) {
+ response = &DescribeClassicLinkInstancesResponse{
+ BaseResponse: &tchttp.BaseResponse{},
+ }
+ return
+
+}
+
+// DescribeClassicLinkInstances
+// 本接口(DescribeClassicLinkInstances)用于查询私有网络和基础网络设备互通列表。
+//
+// 可能返回的错误码:
+// INVALIDPARAMETER_FILTERVALUESNOTLIST = "InvalidParameter.FilterValuesNotList"
+// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded"
+// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range"
+func (c *Client) DescribeClassicLinkInstances(request *DescribeClassicLinkInstancesRequest) (response *DescribeClassicLinkInstancesResponse, err error) {
+ return c.DescribeClassicLinkInstancesWithContext(context.Background(), request)
}
// DescribeClassicLinkInstances
@@ -12517,6 +12932,122 @@ func (c *Client) DescribeRouteConflictsWithContext(ctx context.Context, request
return
}
+func NewDescribeRouteTableAssociatedInstancesRequest() (request *DescribeRouteTableAssociatedInstancesRequest) {
+ request = &DescribeRouteTableAssociatedInstancesRequest{
+ BaseRequest: &tchttp.BaseRequest{},
+ }
+
+ request.Init().WithApiInfo("vpc", APIVersion, "DescribeRouteTableAssociatedInstances")
+
+
+ return
+}
+
+func NewDescribeRouteTableAssociatedInstancesResponse() (response *DescribeRouteTableAssociatedInstancesResponse) {
+ response = &DescribeRouteTableAssociatedInstancesResponse{
+ BaseResponse: &tchttp.BaseResponse{},
+ }
+ return
+
+}
+
+// DescribeRouteTableAssociatedInstances
+// 本接口(DescribeRouteTableAssociatedInstances)用于查询指定的云联网关联的实例所绑定的路由表信息。
+//
+// 可能返回的错误码:
+// INVALIDPARAMETER = "InvalidParameter"
+// INVALIDPARAMETERVALUE = "InvalidParameterValue"
+// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed"
+// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range"
+// RESOURCENOTFOUND = "ResourceNotFound"
+func (c *Client) DescribeRouteTableAssociatedInstances(request *DescribeRouteTableAssociatedInstancesRequest) (response *DescribeRouteTableAssociatedInstancesResponse, err error) {
+ return c.DescribeRouteTableAssociatedInstancesWithContext(context.Background(), request)
+}
+
+// DescribeRouteTableAssociatedInstances
+// 本接口(DescribeRouteTableAssociatedInstances)用于查询指定的云联网关联的实例所绑定的路由表信息。
+//
+// 可能返回的错误码:
+// INVALIDPARAMETER = "InvalidParameter"
+// INVALIDPARAMETERVALUE = "InvalidParameterValue"
+// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed"
+// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range"
+// RESOURCENOTFOUND = "ResourceNotFound"
+func (c *Client) DescribeRouteTableAssociatedInstancesWithContext(ctx context.Context, request *DescribeRouteTableAssociatedInstancesRequest) (response *DescribeRouteTableAssociatedInstancesResponse, err error) {
+ if request == nil {
+ request = NewDescribeRouteTableAssociatedInstancesRequest()
+ }
+
+ if c.GetCredential() == nil {
+ return nil, errors.New("DescribeRouteTableAssociatedInstances require credential")
+ }
+
+ request.SetContext(ctx)
+
+ response = NewDescribeRouteTableAssociatedInstancesResponse()
+ err = c.Send(request, response)
+ return
+}
+
+func NewDescribeRouteTableSelectionPoliciesRequest() (request *DescribeRouteTableSelectionPoliciesRequest) {
+ request = &DescribeRouteTableSelectionPoliciesRequest{
+ BaseRequest: &tchttp.BaseRequest{},
+ }
+
+ request.Init().WithApiInfo("vpc", APIVersion, "DescribeRouteTableSelectionPolicies")
+
+
+ return
+}
+
+func NewDescribeRouteTableSelectionPoliciesResponse() (response *DescribeRouteTableSelectionPoliciesResponse) {
+ response = &DescribeRouteTableSelectionPoliciesResponse{
+ BaseResponse: &tchttp.BaseResponse{},
+ }
+ return
+
+}
+
+// DescribeRouteTableSelectionPolicies
+// 本接口(DescribeRouteTableSelectionPolicies)用于查询云联网路由表选择策略。
+//
+// 可能返回的错误码:
+// INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey"
+// INVALIDPARAMETER_FILTERNOTDICT = "InvalidParameter.FilterNotDict"
+// INVALIDPARAMETER_FILTERVALUESNOTLIST = "InvalidParameter.FilterValuesNotList"
+// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded"
+// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed"
+// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range"
+func (c *Client) DescribeRouteTableSelectionPolicies(request *DescribeRouteTableSelectionPoliciesRequest) (response *DescribeRouteTableSelectionPoliciesResponse, err error) {
+ return c.DescribeRouteTableSelectionPoliciesWithContext(context.Background(), request)
+}
+
+// DescribeRouteTableSelectionPolicies
+// 本接口(DescribeRouteTableSelectionPolicies)用于查询云联网路由表选择策略。
+//
+// 可能返回的错误码:
+// INVALIDPARAMETER_FILTERINVALIDKEY = "InvalidParameter.FilterInvalidKey"
+// INVALIDPARAMETER_FILTERNOTDICT = "InvalidParameter.FilterNotDict"
+// INVALIDPARAMETER_FILTERVALUESNOTLIST = "InvalidParameter.FilterValuesNotList"
+// INVALIDPARAMETERVALUE_LIMITEXCEEDED = "InvalidParameterValue.LimitExceeded"
+// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed"
+// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range"
+func (c *Client) DescribeRouteTableSelectionPoliciesWithContext(ctx context.Context, request *DescribeRouteTableSelectionPoliciesRequest) (response *DescribeRouteTableSelectionPoliciesResponse, err error) {
+ if request == nil {
+ request = NewDescribeRouteTableSelectionPoliciesRequest()
+ }
+
+ if c.GetCredential() == nil {
+ return nil, errors.New("DescribeRouteTableSelectionPolicies require credential")
+ }
+
+ request.SetContext(ctx)
+
+ response = NewDescribeRouteTableSelectionPoliciesResponse()
+ err = c.Send(request, response)
+ return
+}
+
func NewDescribeRouteTablesRequest() (request *DescribeRouteTablesRequest) {
request = &DescribeRouteTablesRequest{
BaseRequest: &tchttp.BaseRequest{},
@@ -17782,6 +18313,69 @@ func (c *Client) ModifyCcnRegionBandwidthLimitsTypeWithContext(ctx context.Conte
return
}
+func NewModifyCcnRouteTablesRequest() (request *ModifyCcnRouteTablesRequest) {
+ request = &ModifyCcnRouteTablesRequest{
+ BaseRequest: &tchttp.BaseRequest{},
+ }
+
+ request.Init().WithApiInfo("vpc", APIVersion, "ModifyCcnRouteTables")
+
+
+ return
+}
+
+func NewModifyCcnRouteTablesResponse() (response *ModifyCcnRouteTablesResponse) {
+ response = &ModifyCcnRouteTablesResponse{
+ BaseResponse: &tchttp.BaseResponse{},
+ }
+ return
+
+}
+
+// ModifyCcnRouteTables
+// 该接口用于修改云联网路由表名称和备注。
+//
+// 可能返回的错误码:
+// INVALIDPARAMETER = "InvalidParameter"
+// INVALIDPARAMETERVALUE = "InvalidParameterValue"
+// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed"
+// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range"
+// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong"
+// RESOURCENOTFOUND = "ResourceNotFound"
+// UNSUPPORTEDOPERATION_CCNROUTETABLENOTEXIST = "UnsupportedOperation.CcnRouteTableNotExist"
+// UNSUPPORTEDOPERATION_NOTSUPPORTMODIFYDEFAULTCCNROUTETABLE = "UnsupportedOperation.NotSupportModifyDefaultCcnRouteTable"
+func (c *Client) ModifyCcnRouteTables(request *ModifyCcnRouteTablesRequest) (response *ModifyCcnRouteTablesResponse, err error) {
+ return c.ModifyCcnRouteTablesWithContext(context.Background(), request)
+}
+
+// ModifyCcnRouteTables
+// 该接口用于修改云联网路由表名称和备注。
+//
+// 可能返回的错误码:
+// INVALIDPARAMETER = "InvalidParameter"
+// INVALIDPARAMETERVALUE = "InvalidParameterValue"
+// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed"
+// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range"
+// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong"
+// RESOURCENOTFOUND = "ResourceNotFound"
+// UNSUPPORTEDOPERATION_CCNROUTETABLENOTEXIST = "UnsupportedOperation.CcnRouteTableNotExist"
+// UNSUPPORTEDOPERATION_NOTSUPPORTMODIFYDEFAULTCCNROUTETABLE = "UnsupportedOperation.NotSupportModifyDefaultCcnRouteTable"
+func (c *Client) ModifyCcnRouteTablesWithContext(ctx context.Context, request *ModifyCcnRouteTablesRequest) (response *ModifyCcnRouteTablesResponse, err error) {
+ if request == nil {
+ request = NewModifyCcnRouteTablesRequest()
+ }
+
+ if c.GetCredential() == nil {
+ return nil, errors.New("ModifyCcnRouteTables require credential")
+ }
+
+ request.SetContext(ctx)
+
+ response = NewModifyCcnRouteTablesResponse()
+ err = c.Send(request, response)
+ return
+}
+
func NewModifyCustomerGatewayAttributeRequest() (request *ModifyCustomerGatewayAttributeRequest) {
request = &ModifyCustomerGatewayAttributeRequest{
BaseRequest: &tchttp.BaseRequest{},
@@ -19374,6 +19968,79 @@ func (c *Client) ModifyRouteTableAttributeWithContext(ctx context.Context, reque
return
}
+func NewModifyRouteTableSelectionPoliciesRequest() (request *ModifyRouteTableSelectionPoliciesRequest) {
+ request = &ModifyRouteTableSelectionPoliciesRequest{
+ BaseRequest: &tchttp.BaseRequest{},
+ }
+
+ request.Init().WithApiInfo("vpc", APIVersion, "ModifyRouteTableSelectionPolicies")
+
+
+ return
+}
+
+func NewModifyRouteTableSelectionPoliciesResponse() (response *ModifyRouteTableSelectionPoliciesResponse) {
+ response = &ModifyRouteTableSelectionPoliciesResponse{
+ BaseResponse: &tchttp.BaseResponse{},
+ }
+ return
+
+}
+
+// ModifyRouteTableSelectionPolicies
+// 该接口用于编辑云联网路由表选择策略
+//
+// 可能返回的错误码:
+// INVALIDPARAMETER = "InvalidParameter"
+// INVALIDPARAMETERVALUE = "InvalidParameterValue"
+// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed"
+// INVALIDPARAMETERVALUE_PARAMETERMISMATCH = "InvalidParameterValue.ParameterMismatch"
+// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range"
+// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong"
+// RESOURCENOTFOUND = "ResourceNotFound"
+// UNSUPPORTEDOPERATION_CANNOTASSIGNDEFAULTROUTETABLE = "UnsupportedOperation.CanNotAssignDefaultRouteTable"
+// UNSUPPORTEDOPERATION_CCNROUTETABLENOTEXIST = "UnsupportedOperation.CcnRouteTableNotExist"
+// UNSUPPORTEDOPERATION_INSTANCENOTEXIST = "UnsupportedOperation.InstanceNotExist"
+// UNSUPPORTEDOPERATION_INVALIDINSTANCESTATE = "UnsupportedOperation.InvalidInstanceState"
+// UNSUPPORTEDOPERATION_NOTSUPPORTSAMECCNINSTANCEANDSOURCEADDRESS = "UnsupportedOperation.NotSupportSameCcnInstanceAndSourceAddress"
+// UNSUPPORTEDOPERATION_ROUTETABLESELECTPOLICYEXCEED = "UnsupportedOperation.RouteTableSelectPolicyExceed"
+func (c *Client) ModifyRouteTableSelectionPolicies(request *ModifyRouteTableSelectionPoliciesRequest) (response *ModifyRouteTableSelectionPoliciesResponse, err error) {
+ return c.ModifyRouteTableSelectionPoliciesWithContext(context.Background(), request)
+}
+
+// ModifyRouteTableSelectionPolicies
+// 该接口用于编辑云联网路由表选择策略
+//
+// 可能返回的错误码:
+// INVALIDPARAMETER = "InvalidParameter"
+// INVALIDPARAMETERVALUE = "InvalidParameterValue"
+// INVALIDPARAMETERVALUE_MALFORMED = "InvalidParameterValue.Malformed"
+// INVALIDPARAMETERVALUE_PARAMETERMISMATCH = "InvalidParameterValue.ParameterMismatch"
+// INVALIDPARAMETERVALUE_RANGE = "InvalidParameterValue.Range"
+// INVALIDPARAMETERVALUE_TOOLONG = "InvalidParameterValue.TooLong"
+// RESOURCENOTFOUND = "ResourceNotFound"
+// UNSUPPORTEDOPERATION_CANNOTASSIGNDEFAULTROUTETABLE = "UnsupportedOperation.CanNotAssignDefaultRouteTable"
+// UNSUPPORTEDOPERATION_CCNROUTETABLENOTEXIST = "UnsupportedOperation.CcnRouteTableNotExist"
+// UNSUPPORTEDOPERATION_INSTANCENOTEXIST = "UnsupportedOperation.InstanceNotExist"
+// UNSUPPORTEDOPERATION_INVALIDINSTANCESTATE = "UnsupportedOperation.InvalidInstanceState"
+// UNSUPPORTEDOPERATION_NOTSUPPORTSAMECCNINSTANCEANDSOURCEADDRESS = "UnsupportedOperation.NotSupportSameCcnInstanceAndSourceAddress"
+// UNSUPPORTEDOPERATION_ROUTETABLESELECTPOLICYEXCEED = "UnsupportedOperation.RouteTableSelectPolicyExceed"
+func (c *Client) ModifyRouteTableSelectionPoliciesWithContext(ctx context.Context, request *ModifyRouteTableSelectionPoliciesRequest) (response *ModifyRouteTableSelectionPoliciesResponse, err error) {
+ if request == nil {
+ request = NewModifyRouteTableSelectionPoliciesRequest()
+ }
+
+ if c.GetCredential() == nil {
+ return nil, errors.New("ModifyRouteTableSelectionPolicies require credential")
+ }
+
+ request.SetContext(ctx)
+
+ response = NewModifyRouteTableSelectionPoliciesResponse()
+ err = c.Send(request, response)
+ return
+}
+
func NewModifySecurityGroupAttributeRequest() (request *ModifySecurityGroupAttributeRequest) {
request = &ModifySecurityGroupAttributeRequest{
BaseRequest: &tchttp.BaseRequest{},
@@ -21168,6 +21835,272 @@ func (c *Client) RenewVpnGatewayWithContext(ctx context.Context, request *RenewV
return
}
+func NewReplaceCcnRouteTableBroadcastPolicysRequest() (request *ReplaceCcnRouteTableBroadcastPolicysRequest) {
+ request = &ReplaceCcnRouteTableBroadcastPolicysRequest{
+ BaseRequest: &tchttp.BaseRequest{},
+ }
+
+ request.Init().WithApiInfo("vpc", APIVersion, "ReplaceCcnRouteTableBroadcastPolicys")
+
+
+ return
+}
+
+func NewReplaceCcnRouteTableBroadcastPolicysResponse() (response *ReplaceCcnRouteTableBroadcastPolicysResponse) {
+ response = &ReplaceCcnRouteTableBroadcastPolicysResponse{
+ BaseResponse: &tchttp.BaseResponse{},
+ }
+ return
+
+}
+
+// ReplaceCcnRouteTableBroadcastPolicys
+// 本接口(ReplaceCcnRouteTableBroadcastPolicys)用于替换云联网路由表路由传播策略。
+//
+// > 特别注意:是全量覆盖,非增量添加
+//
+//
+//
+// **路由条件支持以下四种:**
+//
+//
+//
+// - 实例类型: `instance-type`,可选值:私有网络 `VPC`、专线网关 `DIRECTCONNECT`、专线网关 `VPNGW`
+//
+// - 实例ID: `instance-id`,例如:`dcg-8zljkrft`、`vpc-jdevjrup`,暂不支持 `Edge` 实例
+//
+// - 实例地域: `instance-region`,例如:`ap-guangzhou`
产品支持的所有地域列表可通过接口 [DescribeRegions](https://cloud.tencent.com/document/product/1596/77930) 查询,其中参数 `Product` 设置为 `ccn`
+//
+// - 路由前缀: `cidr-block`,例如:`10.1.0.0/16`
+//
+//
+//
+//
+//
+// **传播条件支持以下三种:**
+//
+//
+//
+// - 实例类型: `instance-type`,格式同路由条件
+//
+// - 实例ID: `instance-id`,格式同路由条件
+//
+// - 实例地域: `instance-region`,格式同路由条件
+//
+//
+//
+//
+//
+// **使用限制:**
+//
+// - 一条策略内的单个条件类型,最大支持设置 `25` 个条件值
+//
+// - 一张路由表,最大支持 `100` 条路由传播策略
+//
+// - 路由条件类型中,只有 `cidr-block` 类型支持模糊匹配和精确匹配两种,其它类型只支持精确匹配一种模式
+//
+// 可能返回的错误码:
+// INVALIDPARAMETER_INVALIDKEY = "InvalidParameter.InvalidKey"
+// INVALIDPARAMETER_NOTDICT = "InvalidParameter.NotDict"
+// INVALIDPARAMETER_NOTLIST = "InvalidParameter.NotList"
+// INVALIDPARAMETER_NOTSTR = "InvalidParameter.NotStr"
+// INVALIDPARAMETERVALUE_PARAMETERMISMATCH = "InvalidParameterValue.ParameterMismatch"
+// LIMITEXCEEDED_CCNROUTEBROADCASTPOLICY = "LimitExceeded.CcnRouteBroadcastPolicy"
+// LIMITEXCEEDED_CCNROUTEBROADCASTPOLICYCOND = "LimitExceeded.CcnRouteBroadcastPolicyCond"
+// UNSUPPORTEDOPERATION_CCNNOTENABLEBROADCASTPOLICY = "UnsupportedOperation.CcnNotEnableBroadcastPolicy"
+func (c *Client) ReplaceCcnRouteTableBroadcastPolicys(request *ReplaceCcnRouteTableBroadcastPolicysRequest) (response *ReplaceCcnRouteTableBroadcastPolicysResponse, err error) {
+ return c.ReplaceCcnRouteTableBroadcastPolicysWithContext(context.Background(), request)
+}
+
+// ReplaceCcnRouteTableBroadcastPolicys
+// 本接口(ReplaceCcnRouteTableBroadcastPolicys)用于替换云联网路由表路由传播策略。
+//
+// > 特别注意:是全量覆盖,非增量添加
+//
+//
+//
+// **路由条件支持以下四种:**
+//
+//
+//
+// - 实例类型: `instance-type`,可选值:私有网络 `VPC`、专线网关 `DIRECTCONNECT`、专线网关 `VPNGW`
+//
+// - 实例ID: `instance-id`,例如:`dcg-8zljkrft`、`vpc-jdevjrup`,暂不支持 `Edge` 实例
+//
+// - 实例地域: `instance-region`,例如:`ap-guangzhou`
产品支持的所有地域列表可通过接口 [DescribeRegions](https://cloud.tencent.com/document/product/1596/77930) 查询,其中参数 `Product` 设置为 `ccn`
+//
+// - 路由前缀: `cidr-block`,例如:`10.1.0.0/16`
+//
+//
+//
+//
+//
+// **传播条件支持以下三种:**
+//
+//
+//
+// - 实例类型: `instance-type`,格式同路由条件
+//
+// - 实例ID: `instance-id`,格式同路由条件
+//
+// - 实例地域: `instance-region`,格式同路由条件
+//
+//
+//
+//
+//
+// **使用限制:**
+//
+// - 一条策略内的单个条件类型,最大支持设置 `25` 个条件值
+//
+// - 一张路由表,最大支持 `100` 条路由传播策略
+//
+// - 路由条件类型中,只有 `cidr-block` 类型支持模糊匹配和精确匹配两种,其它类型只支持精确匹配一种模式
+//
+// 可能返回的错误码:
+// INVALIDPARAMETER_INVALIDKEY = "InvalidParameter.InvalidKey"
+// INVALIDPARAMETER_NOTDICT = "InvalidParameter.NotDict"
+// INVALIDPARAMETER_NOTLIST = "InvalidParameter.NotList"
+// INVALIDPARAMETER_NOTSTR = "InvalidParameter.NotStr"
+// INVALIDPARAMETERVALUE_PARAMETERMISMATCH = "InvalidParameterValue.ParameterMismatch"
+// LIMITEXCEEDED_CCNROUTEBROADCASTPOLICY = "LimitExceeded.CcnRouteBroadcastPolicy"
+// LIMITEXCEEDED_CCNROUTEBROADCASTPOLICYCOND = "LimitExceeded.CcnRouteBroadcastPolicyCond"
+// UNSUPPORTEDOPERATION_CCNNOTENABLEBROADCASTPOLICY = "UnsupportedOperation.CcnNotEnableBroadcastPolicy"
+func (c *Client) ReplaceCcnRouteTableBroadcastPolicysWithContext(ctx context.Context, request *ReplaceCcnRouteTableBroadcastPolicysRequest) (response *ReplaceCcnRouteTableBroadcastPolicysResponse, err error) {
+ if request == nil {
+ request = NewReplaceCcnRouteTableBroadcastPolicysRequest()
+ }
+
+ if c.GetCredential() == nil {
+ return nil, errors.New("ReplaceCcnRouteTableBroadcastPolicys require credential")
+ }
+
+ request.SetContext(ctx)
+
+ response = NewReplaceCcnRouteTableBroadcastPolicysResponse()
+ err = c.Send(request, response)
+ return
+}
+
+func NewReplaceCcnRouteTableInputPolicysRequest() (request *ReplaceCcnRouteTableInputPolicysRequest) {
+ request = &ReplaceCcnRouteTableInputPolicysRequest{
+ BaseRequest: &tchttp.BaseRequest{},
+ }
+
+ request.Init().WithApiInfo("vpc", APIVersion, "ReplaceCcnRouteTableInputPolicys")
+
+
+ return
+}
+
+func NewReplaceCcnRouteTableInputPolicysResponse() (response *ReplaceCcnRouteTableInputPolicysResponse) {
+ response = &ReplaceCcnRouteTableInputPolicysResponse{
+ BaseResponse: &tchttp.BaseResponse{},
+ }
+ return
+
+}
+
+// ReplaceCcnRouteTableInputPolicys
+// 本接口(ReplaceRouteTableInputPolicys)用于替换云联网路由表路由接收策略。
+//
+// > 特别注意:是全量覆盖,非增量添加
+//
+//
+//
+// **路由条件支持以下四种:**
+//
+//
+//
+// - 实例类型: `instance-type`,可选值:私有网络 `VPC`、专线网关 `DIRECTCONNECT`、专线网关 `VPNGW`
+//
+// - 实例ID: `instance-id`,例如:`dcg-8zljkrft`、`vpc-jdevjrup`,暂不支持 `Edge` 实例
+//
+// - 实例地域: `instance-region`,例如:`ap-guangzhou`
产品支持的所有地域列表可通过接口 [DescribeRegions](https://cloud.tencent.com/document/product/1596/77930) 查询,其中参数 `Product` 设置为 `ccn`
+//
+// - 路由前缀: `cidr-block`,例如:`10.1.0.0/16`
+//
+//
+//
+//
+//
+// **使用限制:**
+//
+// - 一条策略内的单个条件类型,最大支持设置 `25` 个条件值
+//
+// - 一张路由表,最大支持 `100` 条路由接收策略
+//
+// - 路由条件类型中,只有 `cidr-block` 类型支持模糊匹配和精确匹配两种,其它类型只支持精确匹配一种模式
+//
+// 可能返回的错误码:
+// INVALIDPARAMETER_INVALIDKEY = "InvalidParameter.InvalidKey"
+// INVALIDPARAMETER_NOTDICT = "InvalidParameter.NotDict"
+// INVALIDPARAMETER_NOTLIST = "InvalidParameter.NotList"
+// INVALIDPARAMETER_NOTSTR = "InvalidParameter.NotStr"
+// INVALIDPARAMETERVALUE_PARAMETERMISMATCH = "InvalidParameterValue.ParameterMismatch"
+// LIMITEXCEEDED_CCNROUTEBROADCASTPOLICY = "LimitExceeded.CcnRouteBroadcastPolicy"
+// LIMITEXCEEDED_CCNROUTEBROADCASTPOLICYCOND = "LimitExceeded.CcnRouteBroadcastPolicyCond"
+// UNSUPPORTEDOPERATION_CCNNOTENABLEBROADCASTPOLICY = "UnsupportedOperation.CcnNotEnableBroadcastPolicy"
+func (c *Client) ReplaceCcnRouteTableInputPolicys(request *ReplaceCcnRouteTableInputPolicysRequest) (response *ReplaceCcnRouteTableInputPolicysResponse, err error) {
+ return c.ReplaceCcnRouteTableInputPolicysWithContext(context.Background(), request)
+}
+
+// ReplaceCcnRouteTableInputPolicys
+// 本接口(ReplaceRouteTableInputPolicys)用于替换云联网路由表路由接收策略。
+//
+// > 特别注意:是全量覆盖,非增量添加
+//
+//
+//
+// **路由条件支持以下四种:**
+//
+//
+//
+// - 实例类型: `instance-type`,可选值:私有网络 `VPC`、专线网关 `DIRECTCONNECT`、专线网关 `VPNGW`
+//
+// - 实例ID: `instance-id`,例如:`dcg-8zljkrft`、`vpc-jdevjrup`,暂不支持 `Edge` 实例
+//
+// - 实例地域: `instance-region`,例如:`ap-guangzhou`
产品支持的所有地域列表可通过接口 [DescribeRegions](https://cloud.tencent.com/document/product/1596/77930) 查询,其中参数 `Product` 设置为 `ccn`
+//
+// - 路由前缀: `cidr-block`,例如:`10.1.0.0/16`
+//
+//
+//
+//
+//
+// **使用限制:**
+//
+// - 一条策略内的单个条件类型,最大支持设置 `25` 个条件值
+//
+// - 一张路由表,最大支持 `100` 条路由接收策略
+//
+// - 路由条件类型中,只有 `cidr-block` 类型支持模糊匹配和精确匹配两种,其它类型只支持精确匹配一种模式
+//
+// 可能返回的错误码:
+// INVALIDPARAMETER_INVALIDKEY = "InvalidParameter.InvalidKey"
+// INVALIDPARAMETER_NOTDICT = "InvalidParameter.NotDict"
+// INVALIDPARAMETER_NOTLIST = "InvalidParameter.NotList"
+// INVALIDPARAMETER_NOTSTR = "InvalidParameter.NotStr"
+// INVALIDPARAMETERVALUE_PARAMETERMISMATCH = "InvalidParameterValue.ParameterMismatch"
+// LIMITEXCEEDED_CCNROUTEBROADCASTPOLICY = "LimitExceeded.CcnRouteBroadcastPolicy"
+// LIMITEXCEEDED_CCNROUTEBROADCASTPOLICYCOND = "LimitExceeded.CcnRouteBroadcastPolicyCond"
+// UNSUPPORTEDOPERATION_CCNNOTENABLEBROADCASTPOLICY = "UnsupportedOperation.CcnNotEnableBroadcastPolicy"
+func (c *Client) ReplaceCcnRouteTableInputPolicysWithContext(ctx context.Context, request *ReplaceCcnRouteTableInputPolicysRequest) (response *ReplaceCcnRouteTableInputPolicysResponse, err error) {
+ if request == nil {
+ request = NewReplaceCcnRouteTableInputPolicysRequest()
+ }
+
+ if c.GetCredential() == nil {
+ return nil, errors.New("ReplaceCcnRouteTableInputPolicys require credential")
+ }
+
+ request.SetContext(ctx)
+
+ response = NewReplaceCcnRouteTableInputPolicysResponse()
+ err = c.Send(request, response)
+ return
+}
+
func NewReplaceDirectConnectGatewayCcnRoutesRequest() (request *ReplaceDirectConnectGatewayCcnRoutesRequest) {
request = &ReplaceDirectConnectGatewayCcnRoutesRequest{
BaseRequest: &tchttp.BaseRequest{},
diff --git a/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312/errors.go b/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312/errors.go
index 9786a441a0..332768fe72 100644
--- a/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312/errors.go
+++ b/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312/errors.go
@@ -110,9 +110,21 @@ const (
// 该过滤规则不合法。
INVALIDPARAMETER_INVALIDFILTER = "InvalidParameter.InvalidFilter"
+ // 指定参数值不是预期的字典格式。
+ INVALIDPARAMETER_INVALIDKEY = "InvalidParameter.InvalidKey"
+
// 下一跳类型与下一跳网关不匹配。
INVALIDPARAMETER_NEXTHOPMISMATCH = "InvalidParameter.NextHopMismatch"
+ // 指定参数值不是键值对。
+ INVALIDPARAMETER_NOTDICT = "InvalidParameter.NotDict"
+
+ // 指定参数值不是一个列表。
+ INVALIDPARAMETER_NOTLIST = "InvalidParameter.NotList"
+
+ // 指定键值不是一个字符串型。
+ INVALIDPARAMETER_NOTSTR = "InvalidParameter.NotStr"
+
// 专线网关跨可用区容灾组不存在。
INVALIDPARAMETER_VPGHAGROUPNOTFOUND = "InvalidParameter.VpgHaGroupNotFound"
@@ -530,6 +542,12 @@ const (
// 当前带宽包加入资源上限。
LIMITEXCEEDED_BANDWIDTHPACKAGERESOURCEQUOTA = "LimitExceeded.BandwidthPackageResourceQuota"
+ // 云联网路由传播策略数量已达到上限。
+ LIMITEXCEEDED_CCNROUTEBROADCASTPOLICY = "LimitExceeded.CcnRouteBroadcastPolicy"
+
+ // 云联网路由传播策略条件数量已达到上限。
+ LIMITEXCEEDED_CCNROUTEBROADCASTPOLICYCOND = "LimitExceeded.CcnRouteBroadcastPolicyCond"
+
// 超过更换IP配额。
LIMITEXCEEDED_CHANGEADDRESSQUOTA = "LimitExceeded.ChangeAddressQuota"
@@ -728,6 +746,9 @@ const (
// 指定VPC CIDR范围不支持私有网络和基础网络设备互通。
UNSUPPORTEDOPERATION_CIDRUNSUPPORTEDCLASSICLINK = "UnsupportedOperation.CIDRUnSupportedClassicLink"
+ // 路由表选择策略不支持默认路由表。
+ UNSUPPORTEDOPERATION_CANNOTASSIGNDEFAULTROUTETABLE = "UnsupportedOperation.CanNotAssignDefaultRouteTable"
+
// 实例已关联CCN。
UNSUPPORTEDOPERATION_CCNATTACHED = "UnsupportedOperation.CcnAttached"
@@ -743,6 +764,9 @@ const (
// 实例未关联CCN。
UNSUPPORTEDOPERATION_CCNNOTATTACHED = "UnsupportedOperation.CcnNotAttached"
+ // 当前云联网未开启路由传播策略。
+ UNSUPPORTEDOPERATION_CCNNOTENABLEBROADCASTPOLICY = "UnsupportedOperation.CcnNotEnableBroadcastPolicy"
+
// 跨账号场景下不支持自驾云账号实例 关联普通账号云联网。
UNSUPPORTEDOPERATION_CCNORDINARYACCOUNTREFUSEATTACH = "UnsupportedOperation.CcnOrdinaryAccountRefuseAttach"
@@ -845,6 +869,9 @@ const (
// 指定实例资源不匹配。
UNSUPPORTEDOPERATION_INSTANCEMISMATCH = "UnsupportedOperation.InstanceMismatch"
+ // 路由表选择策略配置的实例不存在。
+ UNSUPPORTEDOPERATION_INSTANCENOTEXIST = "UnsupportedOperation.InstanceNotExist"
+
// 跨账号场景下不支持普通账号实例关联自驾云账号云联网。
UNSUPPORTEDOPERATION_INSTANCEORDINARYACCOUNTREFUSEATTACH = "UnsupportedOperation.InstanceOrdinaryAccountRefuseAttach"
@@ -944,12 +971,24 @@ const (
// 当前云联网不支持同时关联EDGE实例和跨境实例
UNSUPPORTEDOPERATION_NOTSUPPORTATTACHEDGEANDCROSSBORDERINSTANCE = "UnsupportedOperation.NotSupportAttachEdgeAndCrossBorderInstance"
+ // 没有开启多路由表特性,不能创建用户路由表。
+ UNSUPPORTEDOPERATION_NOTSUPPORTCREATECCNROUTETABLE = "UnsupportedOperation.NotSupportCreateCcnRouteTable"
+
+ // 默认路由表,不支持删除。
+ UNSUPPORTEDOPERATION_NOTSUPPORTDELETEDEFAULTCCNROUTETABLE = "UnsupportedOperation.NotSupportDeleteDefaultCcnRouteTable"
+
// 不支持删除默认路由表。
UNSUPPORTEDOPERATION_NOTSUPPORTDELETEDEFAULTROUTETABLE = "UnsupportedOperation.NotSupportDeleteDefaultRouteTable"
// 公有云到黑石的对等连接不支持删除。
UNSUPPORTEDOPERATION_NOTSUPPORTDELETEVPCBMPEER = "UnsupportedOperation.NotSupportDeleteVpcBmPeer"
+ // 默认路由表,不支持修改。
+ UNSUPPORTEDOPERATION_NOTSUPPORTMODIFYDEFAULTCCNROUTETABLE = "UnsupportedOperation.NotSupportModifyDefaultCcnRouteTable"
+
+ // 不支持编辑相同的实例和源地址。
+ UNSUPPORTEDOPERATION_NOTSUPPORTSAMECCNINSTANCEANDSOURCEADDRESS = "UnsupportedOperation.NotSupportSameCcnInstanceAndSourceAddress"
+
// 不支持的可用区
UNSUPPORTEDOPERATION_NOTSUPPORTZONE = "UnsupportedOperation.NotSupportZone"
@@ -1013,9 +1052,15 @@ const (
// 当前路由表删除失败,请先检查是否存在关联的策略。
UNSUPPORTEDOPERATION_ROUTETABLECANNOTDELETE = "UnsupportedOperation.RouteTableCanNotDelete"
+ // 当前云联网的路由表数量已超过限制。
+ UNSUPPORTEDOPERATION_ROUTETABLEEXCEEDPERVBCLIMIT = "UnsupportedOperation.RouteTableExceedPerVbcLimit"
+
// 路由表绑定了子网。
UNSUPPORTEDOPERATION_ROUTETABLEHASSUBNETRULE = "UnsupportedOperation.RouteTableHasSubnetRule"
+ // 当前云联网的路由表选择策略数量已超过限制。
+ UNSUPPORTEDOPERATION_ROUTETABLESELECTPOLICYEXCEED = "UnsupportedOperation.RouteTableSelectPolicyExceed"
+
// SslVpnClientIds:`vpnc-20f9b3d7` 证书状态已禁用或Client证书状态不可用,不支持禁用证书。
UNSUPPORTEDOPERATION_SSLCLIENTCERTALREADYDISABLEORCERTABNORMAL = "UnsupportedOperation.SSLClientCertAlreadyDisableOrCertAbnormal"
diff --git a/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312/models.go b/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312/models.go
index 91ec503574..5190bcc3a9 100644
--- a/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312/models.go
+++ b/vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312/models.go
@@ -673,7 +673,7 @@ type AllocateAddressesRequestParams struct {
// EIP名称,用于申请EIP时用户自定义该EIP的个性化名称,默认值:未命名
AddressName *string `json:"AddressName,omitnil,omitempty" name:"AddressName"`
- // 静态单线IP网络出口,默认值:center_egress1
+ // 网络出口,当前仅支持精品BGP、静态单线,这2种IP 地址类型的指定出口传入,默认值:center_egress1,其它可选值:center_egress2、center_egress3
Egress *string `json:"Egress,omitnil,omitempty" name:"Egress"`
// 高防包ID, 申请高防IP时,该字段必传。
@@ -739,7 +739,7 @@ type AllocateAddressesRequest struct {
// EIP名称,用于申请EIP时用户自定义该EIP的个性化名称,默认值:未命名
AddressName *string `json:"AddressName,omitnil,omitempty" name:"AddressName"`
- // 静态单线IP网络出口,默认值:center_egress1
+ // 网络出口,当前仅支持精品BGP、静态单线,这2种IP 地址类型的指定出口传入,默认值:center_egress1,其它可选值:center_egress2、center_egress3
Egress *string `json:"Egress,omitnil,omitempty" name:"Egress"`
// 高防包ID, 申请高防IP时,该字段必传。
@@ -1403,6 +1403,74 @@ func (r *AssociateDirectConnectGatewayNatGatewayResponse) FromJsonString(s strin
return json.Unmarshal([]byte(s), &r)
}
+// Predefined struct for user
+type AssociateInstancesToCcnRouteTableRequestParams struct {
+ // 云联网ID。
+ CcnId *string `json:"CcnId,omitnil,omitempty" name:"CcnId"`
+
+ // 路由表ID。
+ RouteTableId *string `json:"RouteTableId,omitnil,omitempty" name:"RouteTableId"`
+
+ // 实例列表。
+ Instances []*CcnInstanceWithoutRegion `json:"Instances,omitnil,omitempty" name:"Instances"`
+}
+
+type AssociateInstancesToCcnRouteTableRequest struct {
+ *tchttp.BaseRequest
+
+ // 云联网ID。
+ CcnId *string `json:"CcnId,omitnil,omitempty" name:"CcnId"`
+
+ // 路由表ID。
+ RouteTableId *string `json:"RouteTableId,omitnil,omitempty" name:"RouteTableId"`
+
+ // 实例列表。
+ Instances []*CcnInstanceWithoutRegion `json:"Instances,omitnil,omitempty" name:"Instances"`
+}
+
+func (r *AssociateInstancesToCcnRouteTableRequest) ToJsonString() string {
+ b, _ := json.Marshal(r)
+ return string(b)
+}
+
+// FromJsonString It is highly **NOT** recommended to use this function
+// because it has no param check, nor strict type check
+func (r *AssociateInstancesToCcnRouteTableRequest) FromJsonString(s string) error {
+ f := make(map[string]interface{})
+ if err := json.Unmarshal([]byte(s), &f); err != nil {
+ return err
+ }
+ delete(f, "CcnId")
+ delete(f, "RouteTableId")
+ delete(f, "Instances")
+ if len(f) > 0 {
+ return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "AssociateInstancesToCcnRouteTableRequest has unknown keys!", "")
+ }
+ return json.Unmarshal([]byte(s), &r)
+}
+
+// Predefined struct for user
+type AssociateInstancesToCcnRouteTableResponseParams struct {
+ // 唯一请求 ID,由服务端生成,每次请求都会返回(若请求因其他原因未能抵达服务端,则该次请求不会获得 RequestId)。定位问题时需要提供该次请求的 RequestId。
+ RequestId *string `json:"RequestId,omitnil,omitempty" name:"RequestId"`
+}
+
+type AssociateInstancesToCcnRouteTableResponse struct {
+ *tchttp.BaseResponse
+ Response *AssociateInstancesToCcnRouteTableResponseParams `json:"Response"`
+}
+
+func (r *AssociateInstancesToCcnRouteTableResponse) ToJsonString() string {
+ b, _ := json.Marshal(r)
+ return string(b)
+}
+
+// FromJsonString It is highly **NOT** recommended to use this function
+// because it has no param check, nor strict type check
+func (r *AssociateInstancesToCcnRouteTableResponse) FromJsonString(s string) error {
+ return json.Unmarshal([]byte(s), &r)
+}
+
// Predefined struct for user
type AssociateNatGatewayAddressRequestParams struct {
// NAT网关的ID,形如:`nat-df45454`。
@@ -2242,6 +2310,17 @@ type CcnBandwidthInfo struct {
TagSet []*Tag `json:"TagSet,omitnil,omitempty" name:"TagSet"`
}
+type CcnBatchRouteTable struct {
+ // 云联网ID。
+ CcnId *string `json:"CcnId,omitnil,omitempty" name:"CcnId"`
+
+ // 云联网路由表名称。
+ Name *string `json:"Name,omitnil,omitempty" name:"Name"`
+
+ // 云联网路由表描述。
+ Description *string `json:"Description,omitnil,omitempty" name:"Description"`
+}
+
type CcnFlowLock struct {
// 带宽所属的云联网ID。
CcnId *string `json:"CcnId,omitnil,omitempty" name:"CcnId"`
@@ -2279,6 +2358,21 @@ type CcnInstanceInfo struct {
}
+type CcnInstanceWithoutRegion struct {
+ // 云联网支持的实例类型:
+ // `VPC`
+ // `DIRECTCONNECT`
+ // `BMVPC`
+ // `EDGE`
+ // `EDGE_TUNNEL`
+ // `EDGE_VPNGW`
+ // `VPNGW`
+ InstanceType *string `json:"InstanceType,omitnil,omitempty" name:"InstanceType"`
+
+ // 实例ID。
+ InstanceId *string `json:"InstanceId,omitnil,omitempty" name:"InstanceId"`
+}
+
type CcnRegionBandwidthLimit struct {
// 地域,例如:ap-guangzhou
Region *string `json:"Region,omitnil,omitempty" name:"Region"`
@@ -2352,6 +2446,111 @@ type CcnRoute struct {
InstanceExtraName *string `json:"InstanceExtraName,omitnil,omitempty" name:"InstanceExtraName"`
}
+type CcnRouteBroadcastPolicyRouteCondition struct {
+ // 条件类型
+ Name *string `json:"Name,omitnil,omitempty" name:"Name"`
+
+ // 条件值列表
+ Values []*string `json:"Values,omitnil,omitempty" name:"Values"`
+
+ // 匹配模式,`1` 精确匹配,`0` 模糊匹配
+ MatchPattern *uint64 `json:"MatchPattern,omitnil,omitempty" name:"MatchPattern"`
+}
+
+type CcnRouteTable struct {
+ // 云联网ID。
+ CcnId *string `json:"CcnId,omitnil,omitempty" name:"CcnId"`
+
+ // 云联网路由表ID。
+ CcnRouteTableId *string `json:"CcnRouteTableId,omitnil,omitempty" name:"CcnRouteTableId"`
+
+ // 云联网路由表名称。
+ RouteTableName *string `json:"RouteTableName,omitnil,omitempty" name:"RouteTableName"`
+
+ // 云联网路由表描述。
+ RouteTableDescription *string `json:"RouteTableDescription,omitnil,omitempty" name:"RouteTableDescription"`
+
+ // True:是默认路由表 False:非默认路由表。
+ IsDefaultTable *bool `json:"IsDefaultTable,omitnil,omitempty" name:"IsDefaultTable"`
+
+ // 创建时间。
+ CreateTime *string `json:"CreateTime,omitnil,omitempty" name:"CreateTime"`
+}
+
+type CcnRouteTableBroadcastPolicy struct {
+ // 路由条件
+ RouteConditions []*CcnRouteBroadcastPolicyRouteCondition `json:"RouteConditions,omitnil,omitempty" name:"RouteConditions"`
+
+ // 传播条件
+ BroadcastConditions []*CcnRouteBroadcastPolicyRouteCondition `json:"BroadcastConditions,omitnil,omitempty" name:"BroadcastConditions"`
+
+ // 路由行为,`accept` 允许,`drop` 拒绝
+ Action *string `json:"Action,omitnil,omitempty" name:"Action"`
+
+ // 策略描述
+ Description *string `json:"Description,omitnil,omitempty" name:"Description"`
+}
+
+type CcnRouteTableBroadcastPolicys struct {
+ // 策略列表
+ Policys []*CcnRouteTableBroadcastPolicy `json:"Policys,omitnil,omitempty" name:"Policys"`
+
+ // 版本号
+ PolicyVersion *uint64 `json:"PolicyVersion,omitnil,omitempty" name:"PolicyVersion"`
+
+ // 创建时间
+ CreateTime *string `json:"CreateTime,omitnil,omitempty" name:"CreateTime"`
+}
+
+type CcnRouteTableInputPolicy struct {
+ // 路由条件。
+ RouteConditions []*CcnRouteBroadcastPolicyRouteCondition `json:"RouteConditions,omitnil,omitempty" name:"RouteConditions"`
+
+ // 路由行为,`accept` 允许,`drop` 拒绝。
+ Action *string `json:"Action,omitnil,omitempty" name:"Action"`
+
+ // 策略描述。
+ Description *string `json:"Description,omitnil,omitempty" name:"Description"`
+}
+
+type CcnRouteTableInputPolicys struct {
+ // 策略列表。
+ // 注意:此字段可能返回 null,表示取不到有效值。
+ Policys []*CcnRouteTableInputPolicy `json:"Policys,omitnil,omitempty" name:"Policys"`
+
+ // 版本号。
+ // 注意:此字段可能返回 null,表示取不到有效值。
+ PolicyVersion *uint64 `json:"PolicyVersion,omitnil,omitempty" name:"PolicyVersion"`
+
+ // 创建时间。
+ // 注意:此字段可能返回 null,表示取不到有效值。
+ CreateTime *string `json:"CreateTime,omitnil,omitempty" name:"CreateTime"`
+}
+
+type CcnRouteTableSelectPolicy struct {
+ // 实例类型:
+ // 私有网络: `VPC`
+ // 专线网关: `DIRECTCONNECT`
+ // 黑石私有网络: `BMVPC`
+ // EDGE设备: `EDGE`
+ // EDGE隧道: `EDGE_TUNNEL`
+ // EDGE网关: `EDGE_VPNGW`
+ // VPN网关:`VPNGW`
+ InstanceType *string `json:"InstanceType,omitnil,omitempty" name:"InstanceType"`
+
+ // 实例ID。
+ InstanceId *string `json:"InstanceId,omitnil,omitempty" name:"InstanceId"`
+
+ // 源端CIDR。
+ SourceCidrBlock *string `json:"SourceCidrBlock,omitnil,omitempty" name:"SourceCidrBlock"`
+
+ // 路由表ID。
+ RouteTableId *string `json:"RouteTableId,omitnil,omitempty" name:"RouteTableId"`
+
+ // 路由表备注。
+ Description *string `json:"Description,omitnil,omitempty" name:"Description"`
+}
+
// Predefined struct for user
type CheckAssistantCidrRequestParams struct {
// `VPC`实例`ID`。形如:`vpc-6v2ht8q5`
@@ -2625,6 +2824,60 @@ type ClassicLinkInstance struct {
InstanceId *string `json:"InstanceId,omitnil,omitempty" name:"InstanceId"`
}
+// Predefined struct for user
+type ClearRouteTableSelectionPoliciesRequestParams struct {
+ // 云联网ID。
+ CcnId *string `json:"CcnId,omitnil,omitempty" name:"CcnId"`
+}
+
+type ClearRouteTableSelectionPoliciesRequest struct {
+ *tchttp.BaseRequest
+
+ // 云联网ID。
+ CcnId *string `json:"CcnId,omitnil,omitempty" name:"CcnId"`
+}
+
+func (r *ClearRouteTableSelectionPoliciesRequest) ToJsonString() string {
+ b, _ := json.Marshal(r)
+ return string(b)
+}
+
+// FromJsonString It is highly **NOT** recommended to use this function
+// because it has no param check, nor strict type check
+func (r *ClearRouteTableSelectionPoliciesRequest) FromJsonString(s string) error {
+ f := make(map[string]interface{})
+ if err := json.Unmarshal([]byte(s), &f); err != nil {
+ return err
+ }
+ delete(f, "CcnId")
+ if len(f) > 0 {
+ return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "ClearRouteTableSelectionPoliciesRequest has unknown keys!", "")
+ }
+ return json.Unmarshal([]byte(s), &r)
+}
+
+// Predefined struct for user
+type ClearRouteTableSelectionPoliciesResponseParams struct {
+ // 唯一请求 ID,由服务端生成,每次请求都会返回(若请求因其他原因未能抵达服务端,则该次请求不会获得 RequestId)。定位问题时需要提供该次请求的 RequestId。
+ RequestId *string `json:"RequestId,omitnil,omitempty" name:"RequestId"`
+}
+
+type ClearRouteTableSelectionPoliciesResponse struct {
+ *tchttp.BaseResponse
+ Response *ClearRouteTableSelectionPoliciesResponseParams `json:"Response"`
+}
+
+func (r *ClearRouteTableSelectionPoliciesResponse) ToJsonString() string {
+ b, _ := json.Marshal(r)
+ return string(b)
+}
+
+// FromJsonString It is highly **NOT** recommended to use this function
+// because it has no param check, nor strict type check
+func (r *ClearRouteTableSelectionPoliciesResponse) FromJsonString(s string) error {
+ return json.Unmarshal([]byte(s), &r)
+}
+
// Predefined struct for user
type CloneSecurityGroupRequestParams struct {
// 安全组实例ID,例如sg-33ocnj9n,可通过DescribeSecurityGroups获取。
@@ -3292,6 +3545,63 @@ func (r *CreateCcnResponse) FromJsonString(s string) error {
return json.Unmarshal([]byte(s), &r)
}
+// Predefined struct for user
+type CreateCcnRouteTablesRequestParams struct {
+ // 需要创建的路由表列表。
+ RouteTable []*CcnBatchRouteTable `json:"RouteTable,omitnil,omitempty" name:"RouteTable"`
+}
+
+type CreateCcnRouteTablesRequest struct {
+ *tchttp.BaseRequest
+
+ // 需要创建的路由表列表。
+ RouteTable []*CcnBatchRouteTable `json:"RouteTable,omitnil,omitempty" name:"RouteTable"`
+}
+
+func (r *CreateCcnRouteTablesRequest) ToJsonString() string {
+ b, _ := json.Marshal(r)
+ return string(b)
+}
+
+// FromJsonString It is highly **NOT** recommended to use this function
+// because it has no param check, nor strict type check
+func (r *CreateCcnRouteTablesRequest) FromJsonString(s string) error {
+ f := make(map[string]interface{})
+ if err := json.Unmarshal([]byte(s), &f); err != nil {
+ return err
+ }
+ delete(f, "RouteTable")
+ if len(f) > 0 {
+ return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "CreateCcnRouteTablesRequest has unknown keys!", "")
+ }
+ return json.Unmarshal([]byte(s), &r)
+}
+
+// Predefined struct for user
+type CreateCcnRouteTablesResponseParams struct {
+ // 路由表信息列表。
+ CcnRouteTableSet []*CcnRouteTable `json:"CcnRouteTableSet,omitnil,omitempty" name:"CcnRouteTableSet"`
+
+ // 唯一请求 ID,由服务端生成,每次请求都会返回(若请求因其他原因未能抵达服务端,则该次请求不会获得 RequestId)。定位问题时需要提供该次请求的 RequestId。
+ RequestId *string `json:"RequestId,omitnil,omitempty" name:"RequestId"`
+}
+
+type CreateCcnRouteTablesResponse struct {
+ *tchttp.BaseResponse
+ Response *CreateCcnRouteTablesResponseParams `json:"Response"`
+}
+
+func (r *CreateCcnRouteTablesResponse) ToJsonString() string {
+ b, _ := json.Marshal(r)
+ return string(b)
+}
+
+// FromJsonString It is highly **NOT** recommended to use this function
+// because it has no param check, nor strict type check
+func (r *CreateCcnRouteTablesResponse) FromJsonString(s string) error {
+ return json.Unmarshal([]byte(s), &r)
+}
+
// Predefined struct for user
type CreateCustomerGatewayRequestParams struct {
// 对端网关名称,可任意命名,但不得超过60个字符。
@@ -7433,6 +7743,60 @@ func (r *DeleteCcnResponse) FromJsonString(s string) error {
return json.Unmarshal([]byte(s), &r)
}
+// Predefined struct for user
+type DeleteCcnRouteTablesRequestParams struct {
+ // 需要删除的路由表列表。
+ RouteTableId []*string `json:"RouteTableId,omitnil,omitempty" name:"RouteTableId"`
+}
+
+type DeleteCcnRouteTablesRequest struct {
+ *tchttp.BaseRequest
+
+ // 需要删除的路由表列表。
+ RouteTableId []*string `json:"RouteTableId,omitnil,omitempty" name:"RouteTableId"`
+}
+
+func (r *DeleteCcnRouteTablesRequest) ToJsonString() string {
+ b, _ := json.Marshal(r)
+ return string(b)
+}
+
+// FromJsonString It is highly **NOT** recommended to use this function
+// because it has no param check, nor strict type check
+func (r *DeleteCcnRouteTablesRequest) FromJsonString(s string) error {
+ f := make(map[string]interface{})
+ if err := json.Unmarshal([]byte(s), &f); err != nil {
+ return err
+ }
+ delete(f, "RouteTableId")
+ if len(f) > 0 {
+ return tcerr.NewTencentCloudSDKError("ClientError.BuildRequestError", "DeleteCcnRouteTablesRequest has unknown keys!", "")
+ }
+ return json.Unmarshal([]byte(s), &r)
+}
+
+// Predefined struct for user
+type DeleteCcnRouteTablesResponseParams struct {
+ // 唯一请求 ID,由服务端生成,每次请求都会返回(若请求因其他原因未能抵达服务端,则该次请求不会获得 RequestId)。定位问题时需要提供该次请求的 RequestId。
+ RequestId *string `json:"RequestId,omitnil,omitempty" name:"RequestId"`
+}
+
+type DeleteCcnRouteTablesResponse struct {
+ *tchttp.BaseResponse
+ Response *DeleteCcnRouteTablesResponseParams `json:"Response"`
+}
+
+func (r *DeleteCcnRouteTablesResponse) ToJsonString() string {
+ b, _ := json.Marshal(r)
+ return string(b)
+}
+
+// FromJsonString It is highly **NOT** recommended to use this function
+// because it has no param check, nor strict type check
+func (r *DeleteCcnRouteTablesResponse) FromJsonString(s string) error {
+ return json.Unmarshal([]byte(s), &r)
+}
+
// Predefined struct for user
type DeleteCustomerGatewayRequestParams struct {
// 对端网关ID,例如:cgw-2wqq41m9,可通过[DescribeCustomerGateways](https://cloud.tencent.com/document/api/215/17516)接口查询对端网关。
@@ -10697,19 +11061,249 @@ func (r *DescribeCcnRegionBandwidthLimitsResponse) FromJsonString(s string) erro
}
// Predefined struct for user
-type DescribeCcnRoutesRequestParams struct {
- // CCN实例ID,形如:`ccn-gree226l`。
+type DescribeCcnRouteTableBroadcastPolicysRequestParams struct {
+ // 云联网ID
CcnId *string `json:"CcnId,omitnil,omitempty" name:"CcnId"`
- // CCN路由策略唯一ID,形如:`ccnr-f49l6u0z`。
- RouteIds []*string `json:"RouteIds,omitnil,omitempty" name:"RouteIds"`
+ // 云联网路由表ID
+ RouteTableId *string `json:"RouteTableId,omitnil,omitempty" name:"RouteTableId"`
- // 过滤条件,参数不支持同时指定RouteIds和Filters。
- //