alicloud/service_alicloud_cbn.go (2,043 lines of code) (raw):
package alicloud
import (
"fmt"
"strings"
"time"
"github.com/PaesslerAG/jsonpath"
"github.com/aliyun/alibaba-cloud-sdk-go/services/cbn"
"github.com/aliyun/terraform-provider-alicloud/alicloud/connectivity"
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
)
type CbnService struct {
client *connectivity.AliyunClient
}
func (s *CbnService) DescribeCenFlowlog(id string) (object cbn.FlowLog, err error) {
request := cbn.CreateDescribeFlowlogsRequest()
request.RegionId = s.client.RegionId
request.FlowLogId = id
var raw interface{}
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
raw, err = s.client.WithCbnClient(func(cbnClient *cbn.Client) (interface{}, error) {
return cbnClient.DescribeFlowlogs(request)
})
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
addDebug(request.GetActionName(), raw, request.RpcRequest, request)
return nil
})
if err != nil {
err = WrapErrorf(err, DefaultErrorMsg, id, request.GetActionName(), AlibabaCloudSdkGoERROR)
return
}
response, _ := raw.(*cbn.DescribeFlowlogsResponse)
if len(response.FlowLogs.FlowLog) < 1 {
err = WrapErrorf(NotFoundErr("CenFlowlog", id), NotFoundMsg, ProviderERROR)
return
}
return response.FlowLogs.FlowLog[0], nil
}
func (s *CbnService) WaitForCenFlowlog(id string, expected map[string]interface{}, isDelete bool, timeout int) error {
deadline := time.Now().Add(time.Duration(timeout) * time.Second)
for {
object, err := s.DescribeCenFlowlog(id)
if err != nil {
if NotFoundError(err) {
if isDelete {
return nil
}
} else {
return WrapError(err)
}
}
ready, current, err := checkWaitForReady(object, expected)
if err != nil {
return WrapError(err)
}
if ready {
return nil
}
if time.Now().After(deadline) {
return WrapErrorf(err, WaitTimeoutMsg, id, GetFunc(1), timeout, current, expected, ProviderERROR)
}
time.Sleep(DefaultIntervalShort * time.Second)
}
}
func (s *CbnService) DescribeCenInstance(id string) (object map[string]interface{}, err error) {
var response map[string]interface{}
action := "DescribeCens"
client := s.client
filterMaps := make([]map[string]interface{}, 0)
filterMaps = append(filterMaps, map[string]interface{}{
"Key": "CenId",
"Value": []string{id},
})
request := map[string]interface{}{
"Filter": filterMaps,
"PageSize": PageSizeLarge,
"PageNumber": 1,
}
idExist := false
for {
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
response, err = client.RpcPost("Cbn", "2017-09-12", action, nil, request, true)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
return nil
})
addDebug(action, response, request)
if err != nil {
return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR)
}
resp, err := jsonpath.Get("$.Cens.Cen", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.Cens.Cen", response)
}
if v, ok := resp.([]interface{}); !ok || len(v) < 1 {
return object, WrapErrorf(NotFoundErr("Cen:Instance", id), NotFoundWithResponse, response)
}
for _, v := range resp.([]interface{}) {
if fmt.Sprint(v.(map[string]interface{})["CenId"]) == id {
idExist = true
return v.(map[string]interface{}), nil
}
}
if len(resp.([]interface{})) < request["PageSize"].(int) {
break
}
request["PageNumber"] = request["PageNumber"].(int) + 1
}
if !idExist {
return object, WrapErrorf(NotFoundErr("Cen:Instance", id), NotFoundWithResponse, response)
}
return object, nil
}
func (s *CbnService) CenInstanceStateRefreshFunc(d *schema.ResourceData, failStates []string) resource.StateRefreshFunc {
return func() (interface{}, string, error) {
object, err := s.DescribeCenInstance(d.Id())
if err != nil {
if NotFoundError(err) {
return nil, "", nil
}
return nil, "", WrapError(err)
}
for _, failState := range failStates {
if fmt.Sprint(object["Status"]) == failState {
return object, fmt.Sprint(object["Status"]), WrapError(Error(FailedToReachTargetStatus, fmt.Sprint(object["Status"])))
}
}
return object, fmt.Sprint(object["Status"]), nil
}
}
func (s *CbnService) setResourceTags(d *schema.ResourceData, resourceType string) error {
oldItems, newItems := d.GetChange("tags")
added := make([]cbn.TagResourcesTag, 0)
for key, value := range newItems.(map[string]interface{}) {
added = append(added, cbn.TagResourcesTag{
Key: key,
Value: value.(string),
})
}
removed := make([]string, 0)
for key := range oldItems.(map[string]interface{}) {
removed = append(removed, key)
}
if len(removed) > 0 {
request := cbn.CreateUntagResourcesRequest()
request.RegionId = s.client.RegionId
request.ResourceId = &[]string{d.Id()}
request.ResourceType = resourceType
request.TagKey = &removed
raw, err := s.client.WithCbnClient(func(cbnClient *cbn.Client) (interface{}, error) {
return cbnClient.UntagResources(request)
})
addDebug(request.GetActionName(), raw)
if err != nil {
return WrapErrorf(err, DefaultErrorMsg, d.Id(), request.GetActionName(), AlibabaCloudSdkGoERROR)
}
}
if len(added) > 0 {
request := cbn.CreateTagResourcesRequest()
request.RegionId = s.client.RegionId
request.ResourceId = &[]string{d.Id()}
request.ResourceType = resourceType
request.Tag = &added
raw, err := s.client.WithCbnClient(func(cbnClient *cbn.Client) (interface{}, error) {
return cbnClient.TagResources(request)
})
addDebug(request.GetActionName(), raw)
if err != nil {
return WrapErrorf(err, DefaultErrorMsg, d.Id(), request.GetActionName(), AlibabaCloudSdkGoERROR)
}
}
return nil
}
func (s *CbnService) DescribeCenRouteMap(id string) (object cbn.RouteMap, err error) {
parts, err := ParseResourceId(id, 2)
if err != nil {
err = WrapError(err)
return
}
request := cbn.CreateDescribeCenRouteMapsRequest()
request.RegionId = s.client.RegionId
request.CenId = parts[0]
request.RouteMapId = parts[1]
var raw interface{}
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
raw, err = s.client.WithCbnClient(func(cbnClient *cbn.Client) (interface{}, error) {
return cbnClient.DescribeCenRouteMaps(request)
})
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
addDebug(request.GetActionName(), raw, request.RpcRequest, request)
return nil
})
if err != nil {
err = WrapErrorf(err, DefaultErrorMsg, id, request.GetActionName(), AlibabaCloudSdkGoERROR)
return
}
response, _ := raw.(*cbn.DescribeCenRouteMapsResponse)
if len(response.RouteMaps.RouteMap) < 1 {
err = WrapErrorf(NotFoundErr("CenRouteMap", id), NotFoundMsg, ProviderERROR)
return
}
return response.RouteMaps.RouteMap[0], nil
}
func (s *CbnService) CenRouteMapStateRefreshFunc(id string, failStates []string) resource.StateRefreshFunc {
return func() (interface{}, string, error) {
object, err := s.DescribeCenRouteMap(id)
if err != nil {
if NotFoundError(err) {
// Set this to nil as if we didn't find anything.
return nil, "", nil
}
return nil, "", WrapError(err)
}
for _, failState := range failStates {
if object.Status == failState {
return object, object.Status, WrapError(Error(FailedToReachTargetStatus, object.Status))
}
}
return object, object.Status, nil
}
}
func (s *CbnService) DescribeCenPrivateZone(id string) (object cbn.PrivateZoneInfo, err error) {
parts, err := ParseResourceId(id, 2)
if err != nil {
err = WrapError(err)
return
}
request := cbn.CreateDescribeCenPrivateZoneRoutesRequest()
request.CenId = parts[0]
request.AccessRegionId = parts[1]
var raw interface{}
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
raw, err = s.client.WithCbnClient(func(cbnClient *cbn.Client) (interface{}, error) {
return cbnClient.DescribeCenPrivateZoneRoutes(request)
})
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
return nil
})
addDebug(request.GetActionName(), raw, request.RpcRequest, request)
if err != nil {
if IsExpectedErrors(err, []string{"ParameterIllegal.CenInstanceId"}) {
return object, WrapErrorf(NotFoundErr("Cen:PrivateZone", id), NotFoundMsg, ProviderERROR)
}
return object, WrapErrorf(err, DefaultErrorMsg, id, request.GetActionName(), AlibabaCloudSdkGoERROR)
}
response, _ := raw.(*cbn.DescribeCenPrivateZoneRoutesResponse)
if len(response.PrivateZoneInfos.PrivateZoneInfo) < 1 {
err = WrapErrorf(NotFoundErr("Cen:PrivateZone", id), NotFoundMsg, ProviderERROR)
return
}
return response.PrivateZoneInfos.PrivateZoneInfo[0], nil
}
func (s *CbnService) CenPrivateZoneStateRefreshFunc(id string, failStates []string) resource.StateRefreshFunc {
return func() (interface{}, string, error) {
object, err := s.DescribeCenPrivateZone(id)
if err != nil {
if NotFoundError(err) {
// Set this to nil as if we didn't find anything.
return nil, "", nil
}
return nil, "", WrapError(err)
}
for _, failState := range failStates {
if object.Status == failState {
return object, object.Status, WrapError(Error(FailedToReachTargetStatus, object.Status))
}
}
return object, object.Status, nil
}
}
func (s *CbnService) DescribeCenVbrHealthCheck(id string) (object cbn.VbrHealthCheck, err error) {
parts, err := ParseResourceId(id, 2)
if err != nil {
err = WrapError(err)
return
}
request := cbn.CreateDescribeCenVbrHealthCheckRequest()
request.RegionId = s.client.RegionId
request.VbrInstanceId = parts[0]
request.VbrInstanceRegionId = parts[1]
var raw interface{}
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
raw, err = s.client.WithCbnClient(func(cbnClient *cbn.Client) (interface{}, error) {
return cbnClient.DescribeCenVbrHealthCheck(request)
})
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
addDebug(request.GetActionName(), raw, request.RpcRequest, request)
return nil
})
if err != nil {
err = WrapErrorf(err, DefaultErrorMsg, id, request.GetActionName(), AlibabaCloudSdkGoERROR)
return
}
response, _ := raw.(*cbn.DescribeCenVbrHealthCheckResponse)
if len(response.VbrHealthChecks.VbrHealthCheck) < 1 {
err = WrapErrorf(NotFoundErr("CenVbrHealthCheck", id), NotFoundMsg, ProviderERROR, response.RequestId)
return
}
return response.VbrHealthChecks.VbrHealthCheck[0], nil
}
func (s *CbnService) DescribeCenInstanceAttachment(id string) (object cbn.DescribeCenAttachedChildInstanceAttributeResponse, err error) {
parts, err := ParseResourceId(id, 4)
if err != nil {
err = WrapError(err)
return
}
request := cbn.CreateDescribeCenAttachedChildInstanceAttributeRequest()
request.RegionId = s.client.RegionId
request.ChildInstanceId = parts[1]
request.ChildInstanceRegionId = parts[3]
request.ChildInstanceType = parts[2]
request.CenId = parts[0]
var raw interface{}
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
raw, err = s.client.WithCbnClient(func(cbnClient *cbn.Client) (interface{}, error) {
return cbnClient.DescribeCenAttachedChildInstanceAttribute(request)
})
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
addDebug(request.GetActionName(), raw, request.RpcRequest, request)
return nil
})
if err != nil {
if IsExpectedErrors(err, []string{"ParameterCenInstanceId", "ParameterError", "ParameterInstanceId"}) {
err = WrapErrorf(NotFoundErr("CenInstanceAttachment", id), NotFoundMsg, ProviderERROR)
return
}
err = WrapErrorf(err, DefaultErrorMsg, id, request.GetActionName(), AlibabaCloudSdkGoERROR)
return
}
response, _ := raw.(*cbn.DescribeCenAttachedChildInstanceAttributeResponse)
return *response, nil
}
func (s *CbnService) CenInstanceAttachmentStateRefreshFunc(id string, failStates []string) resource.StateRefreshFunc {
return func() (interface{}, string, error) {
object, err := s.DescribeCenInstanceAttachment(id)
if err != nil {
if NotFoundError(err) {
// Set this to nil as if we didn't find anything.
return nil, "", nil
}
return nil, "", WrapError(err)
}
for _, failState := range failStates {
if object.Status == failState {
return object, object.Status, WrapError(Error(FailedToReachTargetStatus, object.Status))
}
}
return object, object.Status, nil
}
}
func (s *CbnService) DescribeCenBandwidthPackage(id string) (object cbn.CenBandwidthPackage, err error) {
request := cbn.CreateDescribeCenBandwidthPackagesRequest()
request.RegionId = s.client.RegionId
filters := make([]cbn.DescribeCenBandwidthPackagesFilter, 0)
filters = append(filters, cbn.DescribeCenBandwidthPackagesFilter{
Key: "CenBandwidthPackageId",
Value: &[]string{id},
})
request.Filter = &filters
wait := incrementalWait(3*time.Second, 5*time.Second)
err = resource.Retry(11*time.Minute, func() *resource.RetryError {
raw, err := s.client.WithCbnClient(func(cbnClient *cbn.Client) (interface{}, error) {
return cbnClient.DescribeCenBandwidthPackages(request)
})
if err != nil {
if IsExpectedErrors(err, []string{"AliyunGoClientFailure", "ServiceUnavailable", "Throttling", "Throttling.User"}) {
wait()
return resource.RetryableError(err)
}
if IsExpectedErrors(err, []string{"ParameterCenInstanceId"}) {
err = WrapErrorf(NotFoundErr("CenBandwidthPackage", id), NotFoundMsg, ProviderERROR)
return resource.NonRetryableError(err)
}
err = WrapErrorf(err, DefaultErrorMsg, id, request.GetActionName(), AlibabaCloudSdkGoERROR)
return resource.NonRetryableError(err)
}
addDebug(request.GetActionName(), raw, request.RpcRequest, request)
response, _ := raw.(*cbn.DescribeCenBandwidthPackagesResponse)
if len(response.CenBandwidthPackages.CenBandwidthPackage) < 1 {
err = WrapErrorf(NotFoundErr("CenBandwidthPackage", id), NotFoundMsg, ProviderERROR, response.RequestId)
return resource.NonRetryableError(err)
}
object = response.CenBandwidthPackages.CenBandwidthPackage[0]
return nil
})
return object, WrapError(err)
}
func (s *CbnService) CenBandwidthPackageStateRefreshFunc(id string, failStates []string) resource.StateRefreshFunc {
return func() (interface{}, string, error) {
object, err := s.DescribeCenBandwidthPackage(id)
if err != nil {
if NotFoundError(err) {
// Set this to nil as if we didn't find anything.
return nil, "", nil
}
return nil, "", WrapError(err)
}
for _, failState := range failStates {
if object.Status == failState {
return object, object.Status, WrapError(Error(FailedToReachTargetStatus, object.Status))
}
}
return object, object.Status, nil
}
}
func (s *CbnService) ListTagResources(id string, resourceType string) (object interface{}, err error) {
client := s.client
action := "ListTagResources"
request := map[string]interface{}{
"RegionId": s.client.RegionId,
"ResourceType": resourceType,
}
resourceIdNum := strings.Count(id, ":")
switch resourceIdNum {
case 0:
request["ResourceId.1"] = id
case 1:
parts, err := ParseResourceId(id, 2)
if err != nil {
return object, WrapError(err)
}
request["ResourceId.1"] = parts[resourceIdNum]
}
tags := make([]interface{}, 0)
var response map[string]interface{}
for {
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
response, err := client.RpcPost("Cbn", "2017-09-12", action, nil, request, false)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
addDebug(action, response, request)
v, err := jsonpath.Get("$.TagResources.TagResource", response)
if err != nil {
return resource.NonRetryableError(WrapErrorf(err, FailedGetAttributeMsg, id, "$.TagResources.TagResource", response))
}
if v != nil {
tags = append(tags, v.([]interface{})...)
}
return nil
})
if err != nil {
err = WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR)
return
}
if response["NextToken"] == nil {
break
}
request["NextToken"] = response["NextToken"]
}
return tags, nil
}
func (s *CbnService) SetResourceTags(d *schema.ResourceData, resourceType string) error {
resourceIdNum := strings.Count(d.Id(), ":")
if d.HasChange("tags") {
added, removed := parsingTags(d)
client := s.client
removedTagKeys := make([]string, 0)
for _, v := range removed {
if !ignoredTags(v, "") {
removedTagKeys = append(removedTagKeys, v)
}
}
if len(removedTagKeys) > 0 {
action := "UntagResources"
request := map[string]interface{}{
"RegionId": s.client.RegionId,
"ResourceType": resourceType,
}
switch resourceIdNum {
case 0:
request["ResourceId.1"] = d.Id()
case 1:
parts, err := ParseResourceId(d.Id(), 2)
if err != nil {
return WrapError(err)
}
request["ResourceId.1"] = parts[resourceIdNum]
}
for i, key := range removedTagKeys {
request[fmt.Sprintf("TagKey.%d", i+1)] = key
}
wait := incrementalWait(2*time.Second, 1*time.Second)
err := resource.Retry(10*time.Minute, func() *resource.RetryError {
response, err := client.RpcPost("Cbn", "2017-09-12", action, nil, request, false)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
addDebug(action, response, request)
return nil
})
if err != nil {
return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR)
}
}
if len(added) > 0 {
action := "TagResources"
request := map[string]interface{}{
"RegionId": s.client.RegionId,
"ResourceType": resourceType,
}
switch resourceIdNum {
case 0:
request["ResourceId.1"] = d.Id()
case 1:
parts, err := ParseResourceId(d.Id(), 2)
if err != nil {
return WrapError(err)
}
request["ResourceId.1"] = parts[resourceIdNum]
}
count := 1
for key, value := range added {
request[fmt.Sprintf("Tag.%d.Key", count)] = key
request[fmt.Sprintf("Tag.%d.Value", count)] = value
count++
}
wait := incrementalWait(2*time.Second, 1*time.Second)
err := resource.Retry(10*time.Minute, func() *resource.RetryError {
response, err := client.RpcPost("Cbn", "2017-09-12", action, nil, request, false)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
addDebug(action, response, request)
return nil
})
if err != nil {
return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR)
}
}
d.SetPartial("tags")
}
return nil
}
func (s *CbnService) DescribeCenRouteService(id string) (object cbn.RouteServiceEntry, err error) {
parts, err := ParseResourceId(id, 4)
if err != nil {
err = WrapError(err)
return
}
request := cbn.CreateDescribeRouteServicesInCenRequest()
request.RegionId = s.client.RegionId
request.AccessRegionId = parts[3]
request.CenId = parts[0]
request.Host = parts[2]
request.HostRegionId = parts[1]
var raw interface{}
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
raw, err = s.client.WithCbnClient(func(cbnClient *cbn.Client) (interface{}, error) {
return cbnClient.DescribeRouteServicesInCen(request)
})
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
addDebug(request.GetActionName(), raw, request.RpcRequest, request)
return nil
})
if err != nil {
err = WrapErrorf(err, DefaultErrorMsg, id, request.GetActionName(), AlibabaCloudSdkGoERROR)
return
}
addDebug(request.GetActionName(), raw, request.RpcRequest, request)
response, _ := raw.(*cbn.DescribeRouteServicesInCenResponse)
if len(response.RouteServiceEntries.RouteServiceEntry) < 1 {
err = WrapErrorf(NotFoundErr("CenRouteService", id), NotFoundMsg, ProviderERROR, response.RequestId)
return
}
return response.RouteServiceEntries.RouteServiceEntry[0], nil
}
func (s *CbnService) CenRouteServiceStateRefreshFunc(id string, failStates []string) resource.StateRefreshFunc {
return func() (interface{}, string, error) {
object, err := s.DescribeCenRouteService(id)
if err != nil {
if NotFoundError(err) {
// Set this to nil as if we didn't find anything.
return nil, "", nil
}
return nil, "", WrapError(err)
}
for _, failState := range failStates {
if object.Status == failState {
return object, object.Status, WrapError(Error(FailedToReachTargetStatus, object.Status))
}
}
return object, object.Status, nil
}
}
func (s *CbnService) DescribeCenTransitRouter(id string) (object map[string]interface{}, err error) {
var response map[string]interface{}
client := s.client
parts, err := ParseResourceId(id, 2)
if err != nil {
return nil, WrapError(err)
}
action := "ListTransitRouters"
request := map[string]interface{}{
"Region_id": s.client.RegionId,
"CenId": parts[0],
"TransitRouterId": parts[1],
}
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
response, err = client.RpcPost("Cbn", "2017-09-12", action, nil, request, true)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
return nil
})
addDebug(action, response, request)
if err != nil {
if IsExpectedErrors(err, []string{"ParameterCenInstanceId"}) {
return nil, WrapErrorf(NotFoundErr("CEN Instance ID", id), NotFoundMsg, ProviderERROR)
}
return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR)
}
v, err := jsonpath.Get("$.TransitRouters", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.TransitRouters", response)
}
if len(v.([]interface{})) < 1 {
return object, WrapErrorf(NotFoundErr("CEN", id), NotFoundWithResponse, response)
} else {
if v.([]interface{})[0].(map[string]interface{})["TransitRouterId"].(string) != parts[1] {
return object, WrapErrorf(NotFoundErr("CEN", id), NotFoundWithResponse, response)
}
}
object = v.([]interface{})[0].(map[string]interface{})
return object, nil
}
func (s *CbnService) CenTransitRouterStateRefreshFunc(id string, failStates []string) resource.StateRefreshFunc {
return func() (interface{}, string, error) {
object, err := s.DescribeCenTransitRouter(id)
if err != nil {
if NotFoundError(err) {
// Set this to nil as if we didn't find anything.
return nil, "", nil
}
return nil, "", WrapError(err)
}
for _, failState := range failStates {
if fmt.Sprint(object["Status"]) == failState {
return object, fmt.Sprint(object["Status"]), WrapError(Error(FailedToReachTargetStatus, fmt.Sprint(object["Status"])))
}
}
return object, fmt.Sprint(object["Status"]), nil
}
}
func (s *CbnService) DescribeCenTransitRouterPeerAttachment(id string) (object map[string]interface{}, err error) {
var response map[string]interface{}
client := s.client
parts, err1 := ParseResourceId(id, 2)
if err1 != nil {
return nil, WrapError(err1)
}
action := "ListTransitRouterPeerAttachments"
request := map[string]interface{}{
"RegionId": s.client.RegionId,
"CenId": parts[0],
"TransitRouterAttachmentId": parts[1],
}
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
response, err = client.RpcPost("Cbn", "2017-09-12", action, nil, request, true)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
return nil
})
addDebug(action, response, request)
if err != nil {
if IsExpectedErrors(err, []string{"ParameterCenInstanceId", "IllegalParam.Region"}) {
return nil, WrapErrorf(NotFoundErr("CEN Instance ID", id), NotFoundMsg, ProviderERROR)
}
return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR)
}
v, err := jsonpath.Get("$.TransitRouterAttachments", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.TransitRouterAttachments", response)
}
if len(v.([]interface{})) < 1 {
return object, WrapErrorf(NotFoundErr("CEN", id), NotFoundWithResponse, response)
} else {
if v.([]interface{})[0].(map[string]interface{})["TransitRouterAttachmentId"].(string) != parts[1] {
return object, WrapErrorf(NotFoundErr("CEN", id), NotFoundWithResponse, response)
}
}
object = v.([]interface{})[0].(map[string]interface{})
return object, nil
}
func (s *CbnService) CenTransitRouterPeerAttachmentStateRefreshFunc(id string, failStates []string) resource.StateRefreshFunc {
return func() (interface{}, string, error) {
object, err := s.DescribeCenTransitRouterPeerAttachment(id)
if err != nil {
if NotFoundError(err) {
// Set this to nil as if we didn't find anything.
return nil, "", nil
}
return nil, "", WrapError(err)
}
for _, failState := range failStates {
if fmt.Sprint(object["Status"]) == failState {
return object, fmt.Sprint(object["Status"]), WrapError(Error(FailedToReachTargetStatus, fmt.Sprint(object["Status"])))
}
}
return object, fmt.Sprint(object["Status"]), nil
}
}
func (s *CbnService) DescribeCenTransitRouterVbrAttachment(id string) (object map[string]interface{}, err error) {
var response map[string]interface{}
action := "ListTransitRouterVbrAttachments"
client := s.client
parts, err := ParseResourceId(id, 2)
if err != nil {
return nil, WrapError(err)
}
request := map[string]interface{}{
"RegionId": s.client.RegionId,
"CenId": parts[0],
"TransitRouterAttachmentId": parts[1],
"MaxResults": PageSizeLarge,
}
idExist := false
for {
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
response, err = client.RpcPost("Cbn", "2017-09-12", action, nil, request, true)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
return nil
})
addDebug(action, response, request)
if err != nil {
if IsExpectedErrors(err, []string{"IllegalParam.Region"}) {
return object, WrapErrorf(NotFoundErr("Cen:TransitRouterVbrAttachment", id), NotFoundWithResponse, response)
}
return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR)
}
resp, err := jsonpath.Get("$.TransitRouterAttachments", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.TransitRouterAttachments", response)
}
if v, ok := resp.([]interface{}); !ok || len(v) < 1 {
return object, WrapErrorf(NotFoundErr("Cen:TransitRouterVbrAttachment", id), NotFoundWithResponse, response)
}
for _, v := range resp.([]interface{}) {
if fmt.Sprint(v.(map[string]interface{})["CenId"]) == parts[0] && fmt.Sprint(v.(map[string]interface{})["TransitRouterAttachmentId"]) == parts[1] {
idExist = true
return v.(map[string]interface{}), nil
}
}
if nextToken, ok := response["NextToken"].(string); ok && nextToken != "" {
request["NextToken"] = nextToken
} else {
break
}
}
if !idExist {
return object, WrapErrorf(NotFoundErr("Cen:TransitRouterVbrAttachment", id), NotFoundWithResponse, response)
}
return object, nil
}
func (s *CbnService) CenTransitRouterVbrAttachmentStateRefreshFunc(id string, failStates []string) resource.StateRefreshFunc {
return func() (interface{}, string, error) {
object, err := s.DescribeCenTransitRouterVbrAttachment(id)
if err != nil {
if NotFoundError(err) {
// Set this to nil as if we didn't find anything.
return nil, "", nil
}
return nil, "", WrapError(err)
}
for _, failState := range failStates {
if fmt.Sprint(object["Status"]) == failState {
return object, fmt.Sprint(object["Status"]), WrapError(Error(FailedToReachTargetStatus, fmt.Sprint(object["Status"])))
}
}
return object, fmt.Sprint(object["Status"]), nil
}
}
func (s *CbnService) DescribeCenTransitRouterVpcAttachment(id string) (object map[string]interface{}, err error) {
var response map[string]interface{}
action := "ListTransitRouterVpcAttachments"
client := s.client
parts, err := ParseResourceId(id, 2)
if err != nil {
return nil, WrapError(err)
}
request := map[string]interface{}{
"RegionId": s.client.RegionId,
"CenId": parts[0],
"TransitRouterAttachmentId": parts[1],
"MaxResults": PageSizeLarge,
}
idExist := false
for {
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
response, err = client.RpcPost("Cbn", "2017-09-12", action, nil, request, true)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
return nil
})
addDebug(action, response, request)
if err != nil {
if IsExpectedErrors(err, []string{"IllegalParam.Region"}) {
return object, WrapErrorf(NotFoundErr("Cen:TransitRouterVpcAttachment", id), NotFoundWithResponse, response)
}
return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR)
}
resp, err := jsonpath.Get("$.TransitRouterAttachments", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.TransitRouterAttachments", response)
}
if v, ok := resp.([]interface{}); !ok || len(v) < 1 {
return object, WrapErrorf(NotFoundErr("Cen:TransitRouterVpcAttachment", id), NotFoundWithResponse, response)
}
for _, v := range resp.([]interface{}) {
if fmt.Sprint(v.(map[string]interface{})["CenId"]) == parts[0] && fmt.Sprint(v.(map[string]interface{})["TransitRouterAttachmentId"]) == parts[1] {
idExist = true
return v.(map[string]interface{}), nil
}
}
if nextToken, ok := response["NextToken"].(string); ok && nextToken != "" {
request["NextToken"] = nextToken
} else {
break
}
}
if !idExist {
return object, WrapErrorf(NotFoundErr("Cen:TransitRouterVpcAttachment", id), NotFoundWithResponse, response)
}
return object, nil
}
func (s *CbnService) CenTransitRouterVpcAttachmentStateRefreshFunc(id string, failStates []string) resource.StateRefreshFunc {
return func() (interface{}, string, error) {
object, err := s.DescribeCenTransitRouterVpcAttachment(id)
if err != nil {
if NotFoundError(err) {
// Set this to nil as if we didn't find anything.
return nil, "", nil
}
return nil, "", WrapError(err)
}
for _, failState := range failStates {
if fmt.Sprint(object["Status"]) == failState {
return object, fmt.Sprint(object["Status"]), WrapError(Error(FailedToReachTargetStatus, fmt.Sprint(object["Status"])))
}
}
return object, fmt.Sprint(object["Status"]), nil
}
}
func (s *CbnService) DescribeCenTransitRouterRouteEntry(id string) (object map[string]interface{}, err error) {
var response map[string]interface{}
client := s.client
parts, err1 := ParseResourceId(id, 2)
if err1 != nil {
return nil, WrapError(err1)
}
action := "ListTransitRouterRouteEntries"
request := map[string]interface{}{
"TransitRouterRouteTableId": parts[0],
"TransitRouterRouteEntryIds": []string{parts[1]},
}
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
response, err = client.RpcPost("Cbn", "2017-09-12", action, nil, request, true)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
return nil
})
addDebug(action, response, request)
if err != nil {
if IsExpectedErrors(err, []string{"InvalidTransitRouterRouteTableId.NotFound"}) {
return nil, WrapErrorf(NotFoundErr("CEN TransitRouter RouteTable ID", id), NotFoundMsg, ProviderERROR)
}
return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR)
}
v, err := jsonpath.Get("$.TransitRouterRouteEntries", response)
if err != nil {
if IsExpectedErrors(err, []string{"ParameterCenInstanceId"}) {
return nil, WrapErrorf(NotFoundErr("CEN Instance ID", id), NotFoundMsg, ProviderERROR)
}
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.TransitRouterRouteEntries", response)
}
if len(v.([]interface{})) < 1 {
return object, WrapErrorf(NotFoundErr("CEN", id), NotFoundWithResponse, response)
} else {
if v.([]interface{})[0].(map[string]interface{})["TransitRouterRouteEntryId"].(string) != parts[1] {
return object, WrapErrorf(NotFoundErr("CEN", id), NotFoundWithResponse, response)
}
}
object = v.([]interface{})[0].(map[string]interface{})
return object, nil
}
func (s *CbnService) CenTransitRouterRouteEntryStateRefreshFunc(id string, failStates []string) resource.StateRefreshFunc {
return func() (interface{}, string, error) {
object, err := s.DescribeCenTransitRouterRouteEntry(id)
if err != nil {
if NotFoundError(err) {
// Set this to nil as if we didn't find anything.
return nil, "", nil
}
return nil, "", WrapError(err)
}
for _, failState := range failStates {
if fmt.Sprint(object["TransitRouterRouteEntryStatus"]) == failState {
return object, fmt.Sprint(object["TransitRouterRouteEntryStatus"]), WrapError(Error(FailedToReachTargetStatus, fmt.Sprint(object["TransitRouterRouteEntryStatus"])))
}
}
return object, fmt.Sprint(object["TransitRouterRouteEntryStatus"]), nil
}
}
func (s *CbnService) DescribeCenTransitRouterRouteTable(id string) (object map[string]interface{}, err error) {
var response map[string]interface{}
client := s.client
parts, err1 := ParseResourceId(id, 2)
if err1 != nil {
return nil, WrapError(err1)
}
action := "ListTransitRouterRouteTables"
request := map[string]interface{}{
"RegionId": s.client.RegionId,
"TransitRouterId": parts[0],
"TransitRouterRouteTableIds": []string{parts[1]},
}
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
response, err = client.RpcPost("Cbn", "2017-09-12", action, nil, request, true)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
return nil
})
addDebug(action, response, request)
if err != nil {
if IsExpectedErrors(err, []string{"InvalidTransitRouterId.NotFound"}) {
return nil, WrapErrorf(NotFoundErr("CEN TransitRouter ID", id), NotFoundMsg, ProviderERROR)
}
return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR)
}
v, err := jsonpath.Get("$.TransitRouterRouteTables", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.TransitRouterRouteTables", response)
}
if len(v.([]interface{})) < 1 {
return object, WrapErrorf(NotFoundErr("CEN", id), NotFoundWithResponse, response)
} else {
if v.([]interface{})[0].(map[string]interface{})["TransitRouterRouteTableId"].(string) != parts[1] {
return object, WrapErrorf(NotFoundErr("CEN", id), NotFoundWithResponse, response)
}
}
object = v.([]interface{})[0].(map[string]interface{})
return object, nil
}
func (s *CbnService) CenTransitRouterRouteTableStateRefreshFunc(id string, failStates []string) resource.StateRefreshFunc {
return func() (interface{}, string, error) {
object, err := s.DescribeCenTransitRouterRouteTable(id)
if err != nil {
if NotFoundError(err) {
// Set this to nil as if we didn't find anything.
return nil, "", nil
}
return nil, "", WrapError(err)
}
for _, failState := range failStates {
if fmt.Sprint(object["TransitRouterRouteTableStatus"]) == failState {
return object, fmt.Sprint(object["TransitRouterRouteTableStatus"]), WrapError(Error(FailedToReachTargetStatus, fmt.Sprint(object["TransitRouterRouteTableStatus"])))
}
}
return object, fmt.Sprint(object["TransitRouterRouteTableStatus"]), nil
}
}
func (s *CbnService) DescribeCenTransitRouterRouteTableAssociation(id string) (object map[string]interface{}, err error) {
var response map[string]interface{}
client := s.client
action := "ListTransitRouterRouteTableAssociations"
parts, err := ParseResourceId(id, 2)
if err != nil {
err = WrapError(err)
return
}
request := map[string]interface{}{
"TransitRouterAttachmentId": parts[0],
"TransitRouterRouteTableId": parts[1],
}
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
response, err = client.RpcPost("Cbn", "2017-09-12", action, nil, request, true)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
return nil
})
addDebug(action, response, request)
if err != nil {
if IsExpectedErrors(err, []string{"ParameterCenInstanceId"}) {
return nil, WrapErrorf(NotFoundErr("CEN Instance ID", id), NotFoundMsg, ProviderERROR)
}
return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR)
}
v, err := jsonpath.Get("$.TransitRouterAssociations", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.TransitRouterAssociations", response)
}
if len(v.([]interface{})) < 1 {
return object, WrapErrorf(NotFoundErr("CEN", id), NotFoundWithResponse, response)
} else {
if v.([]interface{})[0].(map[string]interface{})["TransitRouterAttachmentId"].(string) != parts[0] {
return object, WrapErrorf(NotFoundErr("CEN", id), NotFoundWithResponse, response)
}
}
object = v.([]interface{})[0].(map[string]interface{})
return object, nil
}
func (s *CbnService) CenTransitRouterRouteTableAssociationStateRefreshFunc(id string, failStates []string) resource.StateRefreshFunc {
return func() (interface{}, string, error) {
object, err := s.DescribeCenTransitRouterRouteTableAssociation(id)
if err != nil {
if NotFoundError(err) {
// Set this to nil as if we didn't find anything.
return nil, "", nil
}
return nil, "", WrapError(err)
}
for _, failState := range failStates {
if fmt.Sprint(object["Status"]) == failState {
return object, fmt.Sprint(object["Status"]), WrapError(Error(FailedToReachTargetStatus, fmt.Sprint(object["Status"])))
}
}
return object, fmt.Sprint(object["Status"]), nil
}
}
func (s *CbnService) DescribeCenTransitRouterRouteTablePropagation(id string) (object map[string]interface{}, err error) {
var response map[string]interface{}
client := s.client
action := "ListTransitRouterRouteTablePropagations"
parts, err := ParseResourceId(id, 2)
if err != nil {
err = WrapError(err)
return
}
request := map[string]interface{}{
"TransitRouterAttachmentId": parts[0],
"TransitRouterRouteTableId": parts[1],
}
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
response, err = client.RpcPost("Cbn", "2017-09-12", action, nil, request, true)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
return nil
})
addDebug(action, response, request)
if err != nil {
if IsExpectedErrors(err, []string{"ParameterCenInstanceId"}) {
return nil, WrapErrorf(NotFoundErr("CEN Instance ID", id), NotFoundMsg, ProviderERROR)
}
return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR)
}
v, err := jsonpath.Get("$.TransitRouterPropagations", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.TransitRouterPropagations", response)
}
if len(v.([]interface{})) < 1 {
return object, WrapErrorf(NotFoundErr("CEN", id), NotFoundWithResponse, response)
} else {
if v.([]interface{})[0].(map[string]interface{})["TransitRouterAttachmentId"].(string) != parts[0] {
return object, WrapErrorf(NotFoundErr("CEN", id), NotFoundWithResponse, response)
}
}
object = v.([]interface{})[0].(map[string]interface{})
return object, nil
}
func (s *CbnService) CenTransitRouterRouteTablePropagationStateRefreshFunc(id string, failStates []string) resource.StateRefreshFunc {
return func() (interface{}, string, error) {
object, err := s.DescribeCenTransitRouterRouteTablePropagation(id)
if err != nil {
if NotFoundError(err) {
// Set this to nil as if we didn't find anything.
return nil, "", nil
}
return nil, "", WrapError(err)
}
for _, failState := range failStates {
if fmt.Sprint(object["Status"]) == failState {
return object, fmt.Sprint(object["Status"]), WrapError(Error(FailedToReachTargetStatus, fmt.Sprint(object["Status"])))
}
}
return object, fmt.Sprint(object["Status"]), nil
}
}
func (s *CbnService) DescribeCenTrafficMarkingPolicy(id string) (object map[string]interface{}, err error) {
var response map[string]interface{}
client := s.client
parts, err := ParseResourceId(id, 2)
if err != nil {
err = WrapError(err)
return
}
action := "ListTrafficMarkingPolicies"
request := map[string]interface{}{
"TransitRouterId": parts[0],
"TrafficMarkingPolicyId": parts[1],
}
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
response, err = client.RpcPost("Cbn", "2017-09-12", action, nil, request, true)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
return nil
})
addDebug(action, response, request)
if err != nil {
return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR)
}
v, err := jsonpath.Get("$.TrafficMarkingPolicies", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.TrafficMarkingPolicies", response)
}
if len(v.([]interface{})) < 1 {
return object, WrapErrorf(NotFoundErr("CEN", id), NotFoundWithResponse, response)
} else {
if v.([]interface{})[0].(map[string]interface{})["TrafficMarkingPolicyId"].(string) != parts[1] {
return object, WrapErrorf(NotFoundErr("CEN", id), NotFoundWithResponse, response)
}
}
object = v.([]interface{})[0].(map[string]interface{})
return object, nil
}
func (s *CbnService) CenTrafficMarkingPolicyStateRefreshFunc(id string, failStates []string) resource.StateRefreshFunc {
return func() (interface{}, string, error) {
object, err := s.DescribeCenTrafficMarkingPolicy(id)
if err != nil {
if NotFoundError(err) {
// Set this to nil as if we didn't find anything.
return nil, "", nil
}
return nil, "", WrapError(err)
}
for _, failState := range failStates {
if fmt.Sprint(object["TrafficMarkingPolicyStatus"]) == failState {
return object, fmt.Sprint(object["TrafficMarkingPolicyStatus"]), WrapError(Error(FailedToReachTargetStatus, fmt.Sprint(object["TrafficMarkingPolicyStatus"])))
}
}
return object, fmt.Sprint(object["TrafficMarkingPolicyStatus"]), nil
}
}
func (s *CbnService) DescribeCenTransitRouterVpnAttachment(id string) (object map[string]interface{}, err error) {
var response map[string]interface{}
client := s.client
action := "ListTransitRouterVpnAttachments"
request := map[string]interface{}{
"RegionId": s.client.RegionId,
"TransitRouterAttachmentId": id,
}
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
response, err = client.RpcPost("Cbn", "2017-09-12", action, nil, request, true)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
return nil
})
addDebug(action, response, request)
if err != nil {
if IsExpectedErrors(err, []string{"IllegalParam.Region"}) {
return nil, WrapErrorf(NotFoundErr("CEN Instance ID", id), NotFoundMsg, ProviderERROR)
}
return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR)
}
v, err := jsonpath.Get("$.TransitRouterAttachments", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.TransitRouterAttachments", response)
}
if len(v.([]interface{})) < 1 {
return object, WrapErrorf(NotFoundErr("CEN", id), NotFoundWithResponse, response)
}
object = v.([]interface{})[0].(map[string]interface{})
return object, nil
}
func (s *CbnService) CenTransitRouterVpnAttachmentStateRefreshFunc(id string, failStates []string) resource.StateRefreshFunc {
return func() (interface{}, string, error) {
object, err := s.DescribeCenTransitRouterVpnAttachment(id)
if err != nil {
if NotFoundError(err) {
// Set this to nil as if we didn't find anything.
return nil, "", nil
}
return nil, "", WrapError(err)
}
for _, failState := range failStates {
if fmt.Sprint(object["Status"]) == failState {
return object, fmt.Sprint(object["Status"]), WrapError(Error(FailedToReachTargetStatus, fmt.Sprint(object["Status"])))
}
}
return object, fmt.Sprint(object["Status"]), nil
}
}
func (s *CbnService) DescribeCenTransitRouterGrantAttachment(id string) (object map[string]interface{}, err error) {
client := s.client
if err != nil {
return object, WrapError(err)
}
parts, err := ParseResourceId(id, 4)
if err != nil {
return object, WrapError(err)
}
request := map[string]interface{}{
"ResourceId": parts[1],
"ProductType": parts[0],
"RegionId": s.client.RegionId,
}
var response map[string]interface{}
action := "DescribeGrantRulesToResource"
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
resp, err := client.RpcPost("Cbn", "2017-09-12", action, nil, request, true)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
response = resp
addDebug(action, response, request)
return nil
})
if err != nil {
return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR)
}
v, err := jsonpath.Get("$.GrantRules", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.GrantRules", response)
}
if len(v.([]interface{})) < 1 {
return object, WrapErrorf(NotFoundErr("TransitRouterGrantAttachment", id), NotFoundWithResponse, response)
} else {
for _, vv := range v.([]interface{}) {
item := vv.(map[string]interface{})
if fmt.Sprint(item["CenId"]) == parts[3] && fmt.Sprint(item["CenOwnerId"]) == parts[2] {
return item, nil
}
}
}
return object, WrapErrorf(NotFoundErr("TransitRouterGrantAttachment", id), NotFoundWithResponse, response)
}
func (s *CbnService) DescribeCenTransitRouterPrefixListAssociation(id string) (object map[string]interface{}, err error) {
var response map[string]interface{}
action := "ListTransitRouterPrefixListAssociation"
client := s.client
parts, err := ParseResourceId(id, 4)
if err != nil {
return nil, WrapError(err)
}
request := map[string]interface{}{
"RegionId": s.client.RegionId,
"PrefixListId": parts[0],
"TransitRouterId": parts[1],
"TransitRouterTableId": parts[2],
}
idExist := false
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
response, err = client.RpcPost("Cbn", "2017-09-12", action, nil, request, true)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
return nil
})
addDebug(action, response, request)
if err != nil {
return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR)
}
resp, err := jsonpath.Get("$.PrefixLists", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.PrefixLists", response)
}
if v, ok := resp.([]interface{}); !ok || len(v) < 1 {
return object, WrapErrorf(NotFoundErr("CEN:TransitRouterPrefixListAssociation", id), NotFoundWithResponse, response)
}
for _, v := range resp.([]interface{}) {
if fmt.Sprint(v.(map[string]interface{})["NextHop"]) == parts[3] {
idExist = true
return v.(map[string]interface{}), nil
}
}
if !idExist {
return object, WrapErrorf(NotFoundErr("CEN:TransitRouterPrefixListAssociation", id), NotFoundWithResponse, response)
}
return object, nil
}
func (s *CbnService) CenTransitRouterPrefixListAssociationStateRefreshFunc(d *schema.ResourceData, failStates []string) resource.StateRefreshFunc {
return func() (interface{}, string, error) {
object, err := s.DescribeCenTransitRouterPrefixListAssociation(d.Id())
if err != nil {
if NotFoundError(err) {
return nil, "", nil
}
return nil, "", WrapError(err)
}
for _, failState := range failStates {
if fmt.Sprint(object["Status"]) == failState {
return object, fmt.Sprint(object["Status"]), WrapError(Error(FailedToReachTargetStatus, fmt.Sprint(object["Status"])))
}
}
return object, fmt.Sprint(object["Status"]), nil
}
}
func (s *CbnService) DescribeCenTransitRouterCidr(id string) (object map[string]interface{}, err error) {
var response map[string]interface{}
action := "ListTransitRouterCidr"
client := s.client
parts, err := ParseResourceId(id, 2)
if err != nil {
return nil, WrapError(err)
}
request := map[string]interface{}{
"RegionId": s.client.RegionId,
"ClientToken": buildClientToken("ListTransitRouterCidr"),
"TransitRouterId": parts[0],
"TransitRouterCidrId": parts[1],
}
idExist := false
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
response, err = client.RpcPost("Cbn", "2017-09-12", action, nil, request, true)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
return nil
})
addDebug(action, response, request)
if err != nil {
return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR)
}
resp, err := jsonpath.Get("$.CidrLists", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.CidrLists", response)
}
if v, ok := resp.([]interface{}); !ok || len(v) < 1 {
return object, WrapErrorf(NotFoundErr("CEN:TransitRouterCidr", id), NotFoundWithResponse, response)
}
for _, v := range resp.([]interface{}) {
if fmt.Sprint(v.(map[string]interface{})["TransitRouterCidrId"]) == parts[1] {
idExist = true
return v.(map[string]interface{}), nil
}
}
if !idExist {
return object, WrapErrorf(NotFoundErr("CEN:TransitRouterCidr", id), NotFoundWithResponse, response)
}
return object, nil
}
func (s *CbnService) DescribeCenTransitRouterMulticastDomainSource(id string) (object map[string]interface{}, err error) {
client := s.client
if err != nil {
return object, WrapError(err)
}
parts, err := ParseResourceId(id, 3)
if err != nil {
return object, WrapError(err)
}
request := map[string]interface{}{
"TransitRouterMulticastDomainId": parts[0],
"GroupIpAddress": parts[1],
"NetworkInterfaceIds.1": parts[2],
}
var response map[string]interface{}
action := "ListTransitRouterMulticastGroups"
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
resp, err := client.RpcPost("Cbn", "2017-09-12", action, nil, request, true)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
response = resp
addDebug(action, response, request)
return nil
})
if err != nil {
if IsExpectedErrors(err, []string{"IllegalParam.TransitRouterMulticastDomainId"}) {
return object, WrapErrorf(NotFoundErr("CEN:TransitRouterMulticastGroups", id), NotFoundWithResponse, response)
}
return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR)
}
v, err := jsonpath.Get("$.TransitRouterMulticastGroups", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.TransitRouterMulticastGroups", response)
}
resp := v.([]interface{})
if len(resp) < 1 {
return object, WrapErrorf(NotFoundErr("CEN:TransitRouterMulticastGroups", id), NotFoundWithResponse, response)
}
return resp[0].(map[string]interface{}), nil
}
func (s *CbnService) CenTransitRouterMulticastDomainSourceStateRefreshFunc(d *schema.ResourceData, failStates []string) resource.StateRefreshFunc {
return func() (interface{}, string, error) {
object, err := s.DescribeCenTransitRouterMulticastDomainSource(d.Id())
if err != nil {
if NotFoundError(err) {
return nil, "", nil
}
return nil, "", WrapError(err)
}
for _, failState := range failStates {
if fmt.Sprint(object["Status"]) == failState {
return object, fmt.Sprint(object["Status"]), WrapError(Error(FailedToReachTargetStatus, fmt.Sprint(object["Status"])))
}
}
return object, fmt.Sprint(object["Status"]), nil
}
}
func (s *CbnService) DescribeCenTransitRouterMulticastDomain(id string) (object map[string]interface{}, err error) {
var response map[string]interface{}
action := "ListTransitRouterMulticastDomains"
client := s.client
request := map[string]interface{}{
"RegionId": s.client.RegionId,
"ClientToken": buildClientToken("ListTransitRouterMulticastDomains"),
"TransitRouterMulticastDomainId": id,
}
idExist := false
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
response, err = client.RpcPost("Cbn", "2017-09-12", action, nil, request, true)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
return nil
})
addDebug(action, response, request)
if err != nil {
return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR)
}
resp, err := jsonpath.Get("$.TransitRouterMulticastDomains", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.TransitRouterMulticastDomains", response)
}
if v, ok := resp.([]interface{}); !ok || len(v) < 1 {
return object, WrapErrorf(NotFoundErr("CEN:TransitRouterMulticastDomain", id), NotFoundWithResponse, response)
}
for _, v := range resp.([]interface{}) {
if fmt.Sprint(v.(map[string]interface{})["TransitRouterMulticastDomainId"]) == id {
idExist = true
return v.(map[string]interface{}), nil
}
}
if !idExist {
return object, WrapErrorf(NotFoundErr("CEN:TransitRouterMulticastDomain", id), NotFoundWithResponse, response)
}
return object, nil
}
func (s *CbnService) CenTransitRouterMulticastDomainStateRefreshFunc(id string, failStates []string) resource.StateRefreshFunc {
return func() (interface{}, string, error) {
object, err := s.DescribeCenTransitRouterMulticastDomain(id)
if err != nil {
if NotFoundError(err) {
// Set this to nil as if we didn't find anything.
return nil, "", nil
}
return nil, "", WrapError(err)
}
for _, failState := range failStates {
if fmt.Sprint(object["Status"]) == failState {
return object, fmt.Sprint(object["Status"]), WrapError(Error(FailedToReachTargetStatus, fmt.Sprint(object["Status"])))
}
}
return object, fmt.Sprint(object["Status"]), nil
}
}
func (s *CbnService) DescribeCenInterRegionTrafficQosQueue(id string) (object map[string]interface{}, err error) {
client := s.client
if err != nil {
return object, WrapError(err)
}
request := map[string]interface{}{
"TrafficQosQueueId": id,
}
var response map[string]interface{}
action := "ListCenInterRegionTrafficQosQueues"
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
resp, err := client.RpcPost("Cbn", "2017-09-12", action, nil, request, true)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
response = resp
addDebug(action, response, request)
return nil
})
if err != nil {
return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR)
}
v, err := jsonpath.Get("$.TrafficQosQueues", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.TrafficQosQueues", response)
}
resp := v.([]interface{})
if len(resp) < 1 {
return object, WrapErrorf(NotFoundErr("CEN:InterRegionTrafficQosQueue", id), NotFoundWithResponse, response)
}
return resp[0].(map[string]interface{}), nil
}
func (s *CbnService) CenInterRegionTrafficQosQueueStateRefreshFunc(d *schema.ResourceData, failStates []string) resource.StateRefreshFunc {
return func() (interface{}, string, error) {
object, err := s.DescribeCenInterRegionTrafficQosQueue(d.Id())
if err != nil {
if NotFoundError(err) {
return nil, "", nil
}
return nil, "", WrapError(err)
}
for _, failState := range failStates {
if fmt.Sprint(object["Status"]) == failState {
return object, fmt.Sprint(object["Status"]), WrapError(Error(FailedToReachTargetStatus, fmt.Sprint(object["Status"])))
}
}
return object, fmt.Sprint(object["Status"]), nil
}
}
func (s *CbnService) DescribeCenInterRegionTrafficQosPolicy(id string) (object map[string]interface{}, err error) {
var response map[string]interface{}
action := "ListCenInterRegionTrafficQosPolicies"
client := s.client
request := map[string]interface{}{
"TrafficQosPolicyId": id,
}
idExist := false
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
response, err = client.RpcPost("Cbn", "2017-09-12", action, nil, request, true)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
return nil
})
addDebug(action, response, request)
if err != nil {
return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR)
}
resp, err := jsonpath.Get("$.TrafficQosPolicies", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.TrafficQosPolicies", response)
}
if v, ok := resp.([]interface{}); !ok || len(v) < 1 {
return object, WrapErrorf(NotFoundErr("CEN:InterRegionTrafficQosPolicy", id), NotFoundWithResponse, response)
}
for _, v := range resp.([]interface{}) {
if fmt.Sprint(v.(map[string]interface{})["TrafficQosPolicyId"]) == id {
idExist = true
return v.(map[string]interface{}), nil
}
}
if !idExist {
return object, WrapErrorf(NotFoundErr("CEN:InterRegionTrafficQosPolicy", id), NotFoundWithResponse, response)
}
return object, nil
}
func (s *CbnService) CenInterRegionTrafficQosPolicyStateRefreshFunc(id string, failStates []string) resource.StateRefreshFunc {
return func() (interface{}, string, error) {
object, err := s.DescribeCenInterRegionTrafficQosPolicy(id)
if err != nil {
if NotFoundError(err) {
// Set this to nil as if we didn't find anything.
return nil, "", nil
}
return nil, "", WrapError(err)
}
for _, failState := range failStates {
if fmt.Sprint(object["TrafficQosPolicyStatus"]) == failState {
return object, fmt.Sprint(object["TrafficQosPolicyStatus"]), WrapError(Error(FailedToReachTargetStatus, fmt.Sprint(object["TrafficQosPolicyStatus"])))
}
}
return object, fmt.Sprint(object["TrafficQosPolicyStatus"]), nil
}
}
func (s *CbnService) DescribeCenTransitRouterMulticastDomainPeerMember(id string) (object map[string]interface{}, err error) {
client := s.client
if err != nil {
return object, WrapError(err)
}
parts, err := ParseResourceId(id, 3)
if err != nil {
return object, WrapError(err)
}
request := map[string]interface{}{
"TransitRouterMulticastDomainId": parts[0],
"GroupIpAddress": parts[1],
"PeerTransitRouterMulticastDomains.1": parts[2],
}
var response map[string]interface{}
action := "ListTransitRouterMulticastGroups"
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
resp, err := client.RpcPost("Cbn", "2017-09-12", action, nil, request, true)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
response = resp
addDebug(action, response, request)
return nil
})
if err != nil {
return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR)
}
count, err := jsonpath.Get("$.TotalCount", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.TotalCount", response)
}
if formatInt(count) == 0 {
return object, WrapErrorf(NotFoundErr("CEN.TransitRouterMulticastDomainPeerMember", id), NotFoundWithResponse, response)
}
v, err := jsonpath.Get("$.TransitRouterMulticastGroups[0]", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.TransitRouterMulticastGroups[0]", response)
}
return v.(map[string]interface{}), nil
}
func (s *CbnService) CenTransitRouterMulticastDomainPeerMemberStateRefreshFunc(d *schema.ResourceData, failStates []string) resource.StateRefreshFunc {
return func() (interface{}, string, error) {
object, err := s.DescribeCenTransitRouterMulticastDomainPeerMember(d.Id())
if err != nil {
if NotFoundError(err) {
return nil, "", nil
}
return nil, "", WrapError(err)
}
for _, failState := range failStates {
if fmt.Sprint(object["Status"]) == failState {
return object, fmt.Sprint(object["Status"]), WrapError(Error(FailedToReachTargetStatus, fmt.Sprint(object["Status"])))
}
}
return object, fmt.Sprint(object["Status"]), nil
}
}
func (s *CbnService) DescribeCenTransitRouterMulticastDomainMember(id string) (object map[string]interface{}, err error) {
var response map[string]interface{}
action := "ListTransitRouterMulticastGroups"
client := s.client
if err != nil {
return object, WrapError(err)
}
parts, err := ParseResourceId(id, 3)
if err != nil {
return object, WrapError(err)
}
request := map[string]interface{}{
"ClientToken": buildClientToken("ListTransitRouterMulticastGroups"),
"TransitRouterMulticastDomainId": parts[0],
"GroupIpAddress": parts[1],
"NetworkInterfaceIds": []string{parts[2]},
"MaxResults": PageSizeLarge,
}
idExist := false
for {
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
response, err = client.RpcPost("Cbn", "2017-09-12", action, nil, request, true)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
return nil
})
addDebug(action, response, request)
if err != nil {
if IsExpectedErrors(err, []string{"IllegalParam.TransitRouterMulticastDomainId"}) {
return object, WrapErrorf(NotFoundErr("Cen:TransitRouterMulticastDomainMember", id), NotFoundWithResponse, response)
}
return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR)
}
totalCount, err := jsonpath.Get("$.TotalCount", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.TotalCount", response)
}
if fmt.Sprint(totalCount) == "0" {
return object, WrapErrorf(NotFoundErr("Cen:TransitRouterMulticastDomainMember", id), NotFoundWithResponse, response)
}
resp, err := jsonpath.Get("$.TransitRouterMulticastGroups", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.TransitRouterMulticastGroups", response)
}
if v, ok := resp.([]interface{}); !ok || len(v) < 1 {
return object, WrapErrorf(NotFoundErr("Cen:TransitRouterMulticastDomainMember", id), NotFoundWithResponse, response)
}
for _, v := range resp.([]interface{}) {
if fmt.Sprint(v.(map[string]interface{})["TransitRouterMulticastDomainId"]) == parts[0] && fmt.Sprint(v.(map[string]interface{})["GroupIpAddress"]) == parts[1] && fmt.Sprint(v.(map[string]interface{})["NetworkInterfaceId"]) == parts[2] {
idExist = true
return v.(map[string]interface{}), nil
}
}
if nextToken, ok := response["NextToken"].(string); ok && nextToken != "" {
request["NextToken"] = nextToken
} else {
break
}
}
if !idExist {
return object, WrapErrorf(NotFoundErr("Cen:TransitRouterMulticastDomainMember", id), NotFoundWithResponse, response)
}
return object, nil
}
func (s *CbnService) CenTransitRouterMulticastDomainMemberStateRefreshFunc(d *schema.ResourceData, failStates []string) resource.StateRefreshFunc {
return func() (interface{}, string, error) {
object, err := s.DescribeCenTransitRouterMulticastDomainMember(d.Id())
if err != nil {
if NotFoundError(err) {
return nil, "", nil
}
return nil, "", WrapError(err)
}
for _, failState := range failStates {
if fmt.Sprint(object["Status"]) == failState {
return object, fmt.Sprint(object["Status"]), WrapError(Error(FailedToReachTargetStatus, fmt.Sprint(object["Status"])))
}
}
return object, fmt.Sprint(object["Status"]), nil
}
}
func (s *CbnService) DescribeCenChildInstanceRouteEntryToAttachment(id string) (object map[string]interface{}, err error) {
client := s.client
if err != nil {
return object, WrapError(err)
}
parts, err := ParseResourceId(id, 4)
if err != nil {
return object, WrapError(err)
}
request := map[string]interface{}{
"CenId": parts[0],
"ChildInstanceRouteTableId": parts[1],
"TransitRouterAttachmentId": parts[2],
"RouteFilter.1.Key": "prefix-exact-match",
"RouteFilter.1.Value.1": parts[3],
}
var response map[string]interface{}
action := "ListCenChildInstanceRouteEntriesToAttachment"
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
resp, err := client.RpcPost("Cbn", "2017-09-12", action, nil, request, true)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
response = resp
addDebug(action, response, request)
return nil
})
if err != nil {
if IsExpectedErrors(err, []string{"ResourceNotFound.TransitRouterAttachment"}) {
err = WrapErrorf(NotFoundErr("Cen", id), NotFoundMsg, ProviderERROR)
return object, err
}
return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR)
}
all, err := jsonpath.Get("$.RouteEntry", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.RouteEntry", response)
}
if len(all.([]interface{})) == 0 {
return object, WrapErrorf(NotFoundErr("Cen", id), NotFoundWithResponse, response)
}
v, err := jsonpath.Get("$.RouteEntry[0]", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.RouteEntry[0]", response)
}
return v.(map[string]interface{}), nil
}
func (s *CbnService) CenChildInstanceRouteEntryToAttachmentStateRefreshFunc(d *schema.ResourceData, failStates []string) resource.StateRefreshFunc {
return func() (interface{}, string, error) {
object, err := s.DescribeCenChildInstanceRouteEntryToAttachment(d.Id())
if err != nil {
if NotFoundError(err) {
return nil, "", nil
}
return nil, "", WrapError(err)
}
for _, failState := range failStates {
if fmt.Sprint(object["Status"]) == failState {
return object, fmt.Sprint(object["Status"]), WrapError(Error(FailedToReachTargetStatus, fmt.Sprint(object["Status"])))
}
}
return object, fmt.Sprint(object["Status"]), nil
}
}
func (s *CbnService) DescribeCenTransitRouterMulticastDomainAssociation(id string) (object map[string]interface{}, err error) {
var response map[string]interface{}
action := "ListTransitRouterMulticastDomainAssociations"
client := s.client
parts, err := ParseResourceId(id, 3)
if err != nil {
return nil, WrapError(err)
}
request := map[string]interface{}{
"ClientToken": buildClientToken("ListTransitRouterMulticastDomainAssociations"),
"TransitRouterAttachmentId": parts[1],
"VSwitchIds": []string{parts[2]},
}
idExist := false
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
response, err = client.RpcPost("Cbn", "2017-09-12", action, nil, request, true)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
return nil
})
addDebug(action, response, request)
if err != nil {
return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR)
}
resp, err := jsonpath.Get("$.TransitRouterMulticastAssociations", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.TransitRouterMulticastAssociations", response)
}
if v, ok := resp.([]interface{}); !ok || len(v) < 1 {
return object, WrapErrorf(NotFoundErr("CEN:TransitRouterMulticastDomainAssociation", id), NotFoundWithResponse, response)
}
for _, v := range resp.([]interface{}) {
if fmt.Sprint(v.(map[string]interface{})["VSwitchId"]) == parts[2] {
idExist = true
return v.(map[string]interface{}), nil
}
}
if !idExist {
return object, WrapErrorf(NotFoundErr("CEN:TransitRouterMulticastDomainAssociation", id), NotFoundWithResponse, response)
}
return object, nil
}
func (s *CbnService) CenTransitRouterMulticastDomainAssociationStateRefreshFunc(id string, failStates []string) resource.StateRefreshFunc {
return func() (interface{}, string, error) {
object, err := s.DescribeCenTransitRouterMulticastDomainAssociation(id)
if err != nil {
if NotFoundError(err) {
// Set this to nil as if we didn't find anything.
return nil, "", nil
}
return nil, "", WrapError(err)
}
for _, failState := range failStates {
if fmt.Sprint(object["Status"]) == failState {
return object, fmt.Sprint(object["Status"]), WrapError(Error(FailedToReachTargetStatus, fmt.Sprint(object["Status"])))
}
}
return object, fmt.Sprint(object["Status"]), nil
}
}
func (s *CbnService) DescribeCenTransitRouteTableAggregation(id string) (object map[string]interface{}, err error) {
var response map[string]interface{}
action := "DescribeTransitRouteTableAggregation"
client := s.client
if err != nil {
return object, WrapError(err)
}
parts, _ := ParseResourceId(id, 2)
if strings.Contains(id, "#") {
parts = strings.Split(id, "#")
}
request := map[string]interface{}{
"ClientToken": buildClientToken("DescribeTransitRouteTableAggregation"),
"TransitRouteTableId": parts[0],
"TransitRouteTableAggregationCidr": parts[1],
}
idExist := false
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
response, err = client.RpcPost("Cbn", "2017-09-12", action, nil, request, true)
if err != nil {
if IsExpectedErrors(err, []string{"Operation.Blocking"}) || NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
return nil
})
addDebug(action, response, request)
if err != nil {
if IsExpectedErrors(err, []string{"InstanceNotExist.AggregationRoute", "InstanceNotExist.TransitRouterRouteTable"}) {
return nil, WrapErrorf(NotFoundErr("CEN:TransitRouteTableAggregation", id), NotFoundWithResponse, response)
}
return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR)
}
resp, err := jsonpath.Get("$.Data", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.Data", response)
}
if v, ok := resp.([]interface{}); !ok || len(v) < 1 {
return object, WrapErrorf(NotFoundErr("CEN:TransitRouteTableAggregation", id), NotFoundWithResponse, response)
}
for _, v := range resp.([]interface{}) {
if fmt.Sprint(v.(map[string]interface{})["TransitRouteTableAggregationCidr"]) == parts[1] {
idExist = true
return v.(map[string]interface{}), nil
}
}
if !idExist {
return object, WrapErrorf(NotFoundErr("CEN:TransitRouteTableAggregation", id), NotFoundWithResponse, response)
}
return object, nil
}
func (s *CbnService) CenTransitRouteTableAggregationStateRefreshFunc(d *schema.ResourceData, failStates []string) resource.StateRefreshFunc {
return func() (interface{}, string, error) {
object, err := s.DescribeCenTransitRouteTableAggregation(d.Id())
if err != nil {
if NotFoundError(err) {
return nil, "", nil
}
return nil, "", WrapError(err)
}
for _, failState := range failStates {
if fmt.Sprint(object["Status"]) == failState {
return object, fmt.Sprint(object["Status"]), WrapError(Error(FailedToReachTargetStatus, fmt.Sprint(object["Status"])))
}
}
return object, fmt.Sprint(object["Status"]), nil
}
}