alicloud/service_alicloud_vpc_v2.go (2,025 lines of code) (raw):

package alicloud import ( "encoding/json" "fmt" "strings" "time" "github.com/PaesslerAG/jsonpath" "github.com/aliyun/terraform-provider-alicloud/alicloud/connectivity" "github.com/hashicorp/terraform-plugin-sdk/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/helper/schema" "github.com/tidwall/sjson" ) type VpcServiceV2 struct { client *connectivity.AliyunClient } // DescribeVpcPublicIpAddressPool <<< Encapsulated get interface for Vpc PublicIpAddressPool. func (s *VpcServiceV2) DescribeVpcPublicIpAddressPool(id string) (object map[string]interface{}, err error) { client := s.client var request map[string]interface{} var response map[string]interface{} var query map[string]interface{} action := "ListPublicIpAddressPools" request = make(map[string]interface{}) query = make(map[string]interface{}) request["PublicIpAddressPoolIds.1"] = id query["RegionId"] = client.RegionId wait := incrementalWait(3*time.Second, 5*time.Second) err = resource.Retry(1*time.Minute, func() *resource.RetryError { response, err = client.RpcPost("Vpc", "2016-04-28", action, query, request, true) if err != nil { if NeedRetry(err) { wait() return resource.RetryableError(err) } return resource.NonRetryableError(err) } addDebug(action, response, request) return nil }) if err != nil { addDebug(action, response, request) return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR) } v, err := jsonpath.Get("$.PublicIpAddressPoolList[*]", response) if err != nil { return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.PublicIpAddressPoolList[*]", response) } if len(v.([]interface{})) == 0 { return object, WrapErrorf(NotFoundErr("PublicIpAddressPool", id), NotFoundMsg, response) } return v.([]interface{})[0].(map[string]interface{}), nil } func (s *VpcServiceV2) VpcPublicIpAddressPoolStateRefreshFunc(id string, field string, failStates []string) resource.StateRefreshFunc { return func() (interface{}, string, error) { object, err := s.DescribeVpcPublicIpAddressPool(id) if err != nil { if NotFoundError(err) { return nil, "", nil } return nil, "", WrapError(err) } v, err := jsonpath.Get(field, object) currentStatus := fmt.Sprint(v) for _, failState := range failStates { if currentStatus == failState { return object, currentStatus, WrapError(Error(FailedToReachTargetStatus, currentStatus)) } } return object, currentStatus, nil } } // DescribeVpcPublicIpAddressPool >>> Encapsulated. // SetResourceTags <<< Encapsulated tag function for Vpc. func (s *VpcServiceV2) SetResourceTags(d *schema.ResourceData, resourceType string) error { if d.HasChange("tags") { var action string var err error client := s.client var request map[string]interface{} var response map[string]interface{} query := make(map[string]interface{}) added, removed := parsingTags(d) removedTagKeys := make([]string, 0) for _, v := range removed { if !ignoredTags(v, "") { removedTagKeys = append(removedTagKeys, v) } } if len(removedTagKeys) > 0 { action = "UnTagResources" request = make(map[string]interface{}) query = make(map[string]interface{}) request["ResourceId.1"] = d.Id() request["RegionId"] = client.RegionId for i, key := range removedTagKeys { request[fmt.Sprintf("TagKey.%d", i+1)] = key } request["ResourceType"] = resourceType wait := incrementalWait(3*time.Second, 5*time.Second) err = resource.Retry(d.Timeout(schema.TimeoutUpdate), func() *resource.RetryError { response, err = client.RpcPost("Vpc", "2016-04-28", action, query, 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 WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR) } } if len(added) > 0 { action = "TagResources" request = make(map[string]interface{}) query = make(map[string]interface{}) request["ResourceId.1"] = d.Id() request["RegionId"] = client.RegionId count := 1 for key, value := range added { request[fmt.Sprintf("Tag.%d.Key", count)] = key request[fmt.Sprintf("Tag.%d.Value", count)] = value count++ } request["ResourceType"] = resourceType wait := incrementalWait(3*time.Second, 5*time.Second) err = resource.Retry(d.Timeout(schema.TimeoutUpdate), func() *resource.RetryError { response, err = client.RpcPost("Vpc", "2016-04-28", action, query, 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 WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR) } } } return nil } // SetResourceTags >>> tag function encapsulated. // DescribeVpcPrefixList <<< Encapsulated get interface for Vpc PrefixList. func (s *VpcServiceV2) DescribeVpcPrefixList(id string) (object map[string]interface{}, err error) { client := s.client var request map[string]interface{} var response map[string]interface{} var query map[string]interface{} action := "ListPrefixLists" request = make(map[string]interface{}) query = make(map[string]interface{}) request["PrefixListIds.1"] = id request["RegionId"] = client.RegionId wait := incrementalWait(3*time.Second, 5*time.Second) err = resource.Retry(1*time.Minute, func() *resource.RetryError { response, err = client.RpcPost("Vpc", "2016-04-28", action, query, request, true) if err != nil { if NeedRetry(err) { wait() return resource.RetryableError(err) } return resource.NonRetryableError(err) } addDebug(action, response, request) return nil }) if err != nil { if IsExpectedErrors(err, []string{}) { return object, WrapErrorf(NotFoundErr("PrefixList", id), NotFoundMsg, ProviderERROR, fmt.Sprint(response["RequestId"])) } return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR) } v, err := jsonpath.Get("$.PrefixLists[*]", response) if err != nil { return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.PrefixLists[*]", response) } if len(v.([]interface{})) == 0 { return object, WrapErrorf(NotFoundErr("PrefixList", id), NotFoundMsg, ProviderERROR, fmt.Sprint(response["RequestId"])) } return v.([]interface{})[0].(map[string]interface{}), nil } func (s *VpcServiceV2) DescribeGetVpcPrefixListEntries(id string) (object map[string]interface{}, err error) { client := s.client var request map[string]interface{} var response map[string]interface{} var query map[string]interface{} action := "GetVpcPrefixListEntries" request = make(map[string]interface{}) query = make(map[string]interface{}) query["PrefixListId"] = id request["RegionId"] = client.RegionId wait := incrementalWait(3*time.Second, 5*time.Second) err = resource.Retry(1*time.Minute, func() *resource.RetryError { response, err = client.RpcPost("Vpc", "2016-04-28", action, query, request, true) if err != nil { if NeedRetry(err) { wait() return resource.RetryableError(err) } return resource.NonRetryableError(err) } addDebug(action, response, request) return nil }) if err != nil { if IsExpectedErrors(err, []string{}) { return object, WrapErrorf(NotFoundErr("PrefixList", id), NotFoundMsg, ProviderERROR, fmt.Sprint(response["RequestId"])) } return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR) } v, err := jsonpath.Get("$", response) if err != nil { return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$", response) } return v.(map[string]interface{}), nil } func (s *VpcServiceV2) DescribeGetVpcPrefixListAssociations(id string) (object map[string]interface{}, err error) { client := s.client var request map[string]interface{} var response map[string]interface{} var query map[string]interface{} action := "GetVpcPrefixListAssociations" request = make(map[string]interface{}) query = make(map[string]interface{}) query["PrefixListId"] = id request["RegionId"] = client.RegionId wait := incrementalWait(3*time.Second, 5*time.Second) err = resource.Retry(1*time.Minute, func() *resource.RetryError { response, err = client.RpcPost("Vpc", "2016-04-28", action, query, request, true) if err != nil { if NeedRetry(err) { wait() return resource.RetryableError(err) } return resource.NonRetryableError(err) } addDebug(action, response, request) return nil }) if err != nil { if IsExpectedErrors(err, []string{}) { return object, WrapErrorf(NotFoundErr("PrefixList", id), NotFoundMsg, ProviderERROR, fmt.Sprint(response["RequestId"])) } return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR) } v, err := jsonpath.Get("$", response) if err != nil { return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$", response) } return v.(map[string]interface{}), nil } func (s *VpcServiceV2) VpcPrefixListStateRefreshFunc(id string, field string, failStates []string) resource.StateRefreshFunc { return func() (interface{}, string, error) { object, err := s.DescribeVpcPrefixList(id) if err != nil { if NotFoundError(err) { return nil, "", nil } return nil, "", WrapError(err) } currentStatus := fmt.Sprint(object[field]) for _, failState := range failStates { if currentStatus == failState { return object, currentStatus, WrapError(Error(FailedToReachTargetStatus, currentStatus)) } } return object, currentStatus, nil } } // DescribeVpcPrefixList >>> Encapsulated. // DescribeVpcHaVip <<< Encapsulated get interface for Vpc HaVip. func (s *VpcServiceV2) DescribeVpcHaVip(id string) (object map[string]interface{}, err error) { client := s.client var request map[string]interface{} var response map[string]interface{} var query map[string]interface{} action := "DescribeHaVips" request = make(map[string]interface{}) query = make(map[string]interface{}) jsonString := "{}" jsonString, _ = sjson.Set(jsonString, "Filter.0.Value.0", id) jsonString, _ = sjson.Set(jsonString, "Filter.0.Key", "HaVipId") err = json.Unmarshal([]byte(jsonString), &request) if err != nil { return object, WrapError(err) } request["RegionId"] = client.RegionId wait := incrementalWait(3*time.Second, 5*time.Second) err = resource.Retry(1*time.Minute, func() *resource.RetryError { response, err = client.RpcPost("Vpc", "2016-04-28", action, query, request, true) if err != nil { if NeedRetry(err) { wait() return resource.RetryableError(err) } return resource.NonRetryableError(err) } addDebug(action, response, request) return nil }) if err != nil { if IsExpectedErrors(err, []string{"InvalidHaVipId.NotFound"}) { return object, WrapErrorf(NotFoundErr("HaVip", id), NotFoundMsg, ProviderERROR, fmt.Sprint(response["RequestId"])) } return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR) } v, err := jsonpath.Get("$.HaVips.HaVip[*]", response) if err != nil { return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.HaVips.HaVip[*]", response) } if len(v.([]interface{})) == 0 { return object, WrapErrorf(NotFoundErr("HaVip", id), NotFoundMsg, ProviderERROR, fmt.Sprint(response["RequestId"])) } return v.([]interface{})[0].(map[string]interface{}), nil } func (s *VpcServiceV2) VpcHaVipStateRefreshFunc(id string, field string, failStates []string) resource.StateRefreshFunc { return func() (interface{}, string, error) { object, err := s.DescribeVpcHaVip(id) if err != nil { if NotFoundError(err) { return nil, "", nil } return nil, "", WrapError(err) } currentStatus := fmt.Sprint(object[field]) for _, failState := range failStates { if currentStatus == failState { return object, currentStatus, WrapError(Error(FailedToReachTargetStatus, currentStatus)) } } return object, currentStatus, nil } } // DescribeVpcHaVip >>> Encapsulated. // DescribeVpcVswitchCidrReservation <<< Encapsulated get interface for Vpc VswitchCidrReservation. func (s *VpcServiceV2) DescribeVpcVswitchCidrReservation(id string) (object map[string]interface{}, err error) { client := s.client var request map[string]interface{} var response map[string]interface{} var query map[string]interface{} action := "ListVSwitchCidrReservations" request = make(map[string]interface{}) query = make(map[string]interface{}) parts := strings.Split(id, ":") if len(parts) != 2 { err = WrapError(fmt.Errorf("invalid Resource Id %s. Expected parts' length %d, got %d", id, 2, len(parts))) } request["VSwitchCidrReservationIds.1"] = parts[1] request["VSwitchId"] = parts[0] request["RegionId"] = client.RegionId wait := incrementalWait(3*time.Second, 5*time.Second) err = resource.Retry(1*time.Minute, func() *resource.RetryError { response, err = client.RpcPost("Vpc", "2016-04-28", action, query, request, true) if err != nil { if NeedRetry(err) { wait() return resource.RetryableError(err) } return resource.NonRetryableError(err) } addDebug(action, response, request) return nil }) if err != nil { if IsExpectedErrors(err, []string{}) { return object, WrapErrorf(NotFoundErr("VswitchCidrReservation", id), NotFoundMsg, ProviderERROR, fmt.Sprint(response["RequestId"])) } return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR) } v, err := jsonpath.Get("$.VSwitchCidrReservations[*]", response) if err != nil { return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.VSwitchCidrReservations[*]", response) } if len(v.([]interface{})) == 0 { return object, WrapErrorf(NotFoundErr("VswitchCidrReservation", id), NotFoundMsg, ProviderERROR, fmt.Sprint(response["RequestId"])) } return v.([]interface{})[0].(map[string]interface{}), nil } func (s *VpcServiceV2) VpcVswitchCidrReservationStateRefreshFunc(id string, field string, failStates []string) resource.StateRefreshFunc { return func() (interface{}, string, error) { object, err := s.DescribeVpcVswitchCidrReservation(id) if err != nil { if NotFoundError(err) { return nil, "", nil } return nil, "", WrapError(err) } currentStatus := fmt.Sprint(object[field]) for _, failState := range failStates { if currentStatus == failState { return object, currentStatus, WrapError(Error(FailedToReachTargetStatus, currentStatus)) } } return object, currentStatus, nil } } // DescribeVpcVswitchCidrReservation >>> Encapsulated. // DescribeVpcFlowLog <<< Encapsulated get interface for Vpc FlowLog. func (s *VpcServiceV2) DescribeVpcFlowLog(id string) (object map[string]interface{}, err error) { client := s.client var request map[string]interface{} var response map[string]interface{} var query map[string]interface{} request = make(map[string]interface{}) query = make(map[string]interface{}) request["FlowLogId"] = id request["RegionId"] = client.RegionId action := "DescribeFlowLogs" wait := incrementalWait(3*time.Second, 5*time.Second) err = resource.Retry(1*time.Minute, func() *resource.RetryError { response, err = client.RpcPost("Vpc", "2016-04-28", action, query, 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{}) { return object, WrapErrorf(NotFoundErr("FlowLog", id), NotFoundMsg, ProviderERROR, fmt.Sprint(response["RequestId"])) } return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR) } v, err := jsonpath.Get("$.FlowLogs.FlowLog[*]", response) if err != nil { return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.FlowLogs.FlowLog[*]", response) } if len(v.([]interface{})) == 0 { return object, WrapErrorf(NotFoundErr("FlowLog", id), NotFoundMsg, ProviderERROR, fmt.Sprint(response["RequestId"])) } return v.([]interface{})[0].(map[string]interface{}), nil } func (s *VpcServiceV2) VpcFlowLogStateRefreshFunc(id string, field string, failStates []string) resource.StateRefreshFunc { return func() (interface{}, string, error) { object, err := s.DescribeVpcFlowLog(id) if err != nil { if NotFoundError(err) { return nil, "", nil } return nil, "", WrapError(err) } v, err := jsonpath.Get(field, object) currentStatus := fmt.Sprint(v) if strings.HasPrefix(field, "#") { v, _ := jsonpath.Get(strings.TrimPrefix(field, "#"), object) if v != nil { currentStatus = "#CHECKSET" } } for _, failState := range failStates { if currentStatus == failState { return object, currentStatus, WrapError(Error(FailedToReachTargetStatus, currentStatus)) } } return object, currentStatus, nil } } // DescribeVpcFlowLog >>> Encapsulated. // DescribeVpcIpv4Gateway <<< Encapsulated get interface for Vpc Ipv4Gateway. func (s *VpcServiceV2) DescribeVpcIpv4Gateway(id string) (object map[string]interface{}, err error) { client := s.client var request map[string]interface{} var response map[string]interface{} var query map[string]interface{} request = make(map[string]interface{}) query = make(map[string]interface{}) request["Ipv4GatewayId"] = id request["RegionId"] = client.RegionId action := "GetIpv4GatewayAttribute" wait := incrementalWait(3*time.Second, 5*time.Second) err = resource.Retry(1*time.Minute, func() *resource.RetryError { response, err = client.RpcPost("Vpc", "2016-04-28", action, query, 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{"ResourceNotFound.Ipv4Gateway"}) { return object, WrapErrorf(NotFoundErr("Ipv4Gateway", id), NotFoundMsg, response) } return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR) } return response, nil } func (s *VpcServiceV2) VpcIpv4GatewayStateRefreshFunc(id string, field string, failStates []string) resource.StateRefreshFunc { return func() (interface{}, string, error) { object, err := s.DescribeVpcIpv4Gateway(id) if err != nil { if NotFoundError(err) { return nil, "", nil } return nil, "", WrapError(err) } v, err := jsonpath.Get(field, object) currentStatus := fmt.Sprint(v) if strings.HasPrefix(field, "#") { v, _ := jsonpath.Get(strings.TrimPrefix(field, "#"), object) if v != nil { currentStatus = "#CHECKSET" } } for _, failState := range failStates { if currentStatus == failState { return object, currentStatus, WrapError(Error(FailedToReachTargetStatus, currentStatus)) } } return object, currentStatus, nil } } // DescribeVpcIpv4Gateway >>> Encapsulated. // DescribeVpcIpv6Gateway <<< Encapsulated get interface for Vpc Ipv6Gateway. func (s *VpcServiceV2) DescribeVpcIpv6Gateway(id string) (object map[string]interface{}, err error) { client := s.client var request map[string]interface{} var response map[string]interface{} var query map[string]interface{} action := "DescribeIpv6GatewayAttribute" request = make(map[string]interface{}) query = make(map[string]interface{}) query["Ipv6GatewayId"] = id request["RegionId"] = client.RegionId wait := incrementalWait(3*time.Second, 5*time.Second) err = resource.Retry(1*time.Minute, func() *resource.RetryError { response, err = client.RpcPost("Vpc", "2016-04-28", action, query, request, true) if err != nil { if NeedRetry(err) { wait() return resource.RetryableError(err) } return resource.NonRetryableError(err) } addDebug(action, response, request) return nil }) if err != nil { if IsExpectedErrors(err, []string{}) { return object, WrapErrorf(NotFoundErr("Ipv6Gateway", id), NotFoundMsg, ProviderERROR, fmt.Sprint(response["RequestId"])) } return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR) } currentStatus := response["Status"] if currentStatus == "" { return object, WrapErrorf(NotFoundErr("Ipv6Gateway", id), NotFoundMsg, ProviderERROR, fmt.Sprint(response["RequestId"])) } return response, nil } func (s *VpcServiceV2) VpcIpv6GatewayStateRefreshFunc(id string, field string, failStates []string) resource.StateRefreshFunc { return func() (interface{}, string, error) { object, err := s.DescribeVpcIpv6Gateway(id) if err != nil { if NotFoundError(err) { return object, "", nil } return nil, "", WrapError(err) } currentStatus := fmt.Sprint(object[field]) for _, failState := range failStates { if currentStatus == failState { return object, currentStatus, WrapError(Error(FailedToReachTargetStatus, currentStatus)) } } return object, currentStatus, nil } } // DescribeVpcIpv6Gateway >>> Encapsulated. // DescribeVpcPublicIpAddressPoolCidrBlock <<< Encapsulated get interface for Vpc PublicIpAddressPoolCidrBlock. func (s *VpcServiceV2) DescribeVpcPublicIpAddressPoolCidrBlock(id string) (object map[string]interface{}, err error) { client := s.client var request map[string]interface{} var response map[string]interface{} var query map[string]interface{} parts := strings.Split(id, ":") if len(parts) != 2 { err = WrapError(fmt.Errorf("invalid Resource Id %s. Expected parts' length %d, got %d", id, 2, len(parts))) } action := "ListPublicIpAddressPoolCidrBlocks" request = make(map[string]interface{}) query = make(map[string]interface{}) query["CidrBlock"] = parts[1] query["PublicIpAddressPoolId"] = parts[0] query["RegionId"] = client.RegionId wait := incrementalWait(3*time.Second, 5*time.Second) err = resource.Retry(1*time.Minute, func() *resource.RetryError { response, err = client.RpcPost("Vpc", "2016-04-28", action, query, request, true) if err != nil { if NeedRetry(err) { wait() return resource.RetryableError(err) } return resource.NonRetryableError(err) } addDebug(action, response, request) return nil }) if err != nil { addDebug(action, response, request) return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR) } v, err := jsonpath.Get("$.PublicIpPoolCidrBlockList[*]", response) if err != nil { return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.PublicIpPoolCidrBlockList[*]", response) } if len(v.([]interface{})) == 0 { return object, WrapErrorf(NotFoundErr("PublicIpAddressPoolCidrBlock", id), NotFoundMsg, response) } return v.([]interface{})[0].(map[string]interface{}), nil } func (s *VpcServiceV2) VpcPublicIpAddressPoolCidrBlockStateRefreshFunc(id string, field string, failStates []string) resource.StateRefreshFunc { return func() (interface{}, string, error) { object, err := s.DescribeVpcPublicIpAddressPoolCidrBlock(id) if err != nil { if NotFoundError(err) { return nil, "", nil } return nil, "", WrapError(err) } v, err := jsonpath.Get(field, object) currentStatus := fmt.Sprint(v) for _, failState := range failStates { if currentStatus == failState { return object, currentStatus, WrapError(Error(FailedToReachTargetStatus, currentStatus)) } } return object, currentStatus, nil } } // DescribeVpcPublicIpAddressPoolCidrBlock >>> Encapsulated. // DescribeVpcVswitch <<< Encapsulated get interface for Vpc Vswitch. func (s *VpcServiceV2) DescribeVpcVswitch(id string) (object map[string]interface{}, err error) { client := s.client var request map[string]interface{} var response map[string]interface{} var query map[string]interface{} action := "DescribeVSwitchAttributes" request = make(map[string]interface{}) query = make(map[string]interface{}) query["VSwitchId"] = id request["RegionId"] = client.RegionId wait := incrementalWait(3*time.Second, 5*time.Second) err = resource.Retry(1*time.Minute, func() *resource.RetryError { response, err = client.RpcPost("Vpc", "2016-04-28", action, query, request, true) if err != nil { if NeedRetry(err) { wait() return resource.RetryableError(err) } return resource.NonRetryableError(err) } addDebug(action, response, request) return nil }) if err != nil { if IsExpectedErrors(err, []string{}) { return object, WrapErrorf(NotFoundErr("Vswitch", id), NotFoundMsg, ProviderERROR, fmt.Sprint(response["RequestId"])) } return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR) } currentStatus := response["VSwitchId"] if currentStatus == "" { return object, WrapErrorf(NotFoundErr("Vswitch", id), NotFoundMsg, ProviderERROR, fmt.Sprint(response["RequestId"])) } return response, nil } func (s *VpcServiceV2) VpcVswitchStateRefreshFunc(id string, field string, failStates []string) resource.StateRefreshFunc { return func() (interface{}, string, error) { object, err := s.DescribeVpcVswitch(id) if err != nil { if NotFoundError(err) { return object, "", nil } return nil, "", WrapError(err) } currentStatus := fmt.Sprint(object[field]) for _, failState := range failStates { if currentStatus == failState { return object, currentStatus, WrapError(Error(FailedToReachTargetStatus, currentStatus)) } } return object, currentStatus, nil } } // DescribeVpcVswitch >>> Encapsulated. // DescribeVpcVpc <<< Encapsulated get interface for Vpc Vpc. func (s *VpcServiceV2) DescribeVpcVpc(id string) (object map[string]interface{}, err error) { client := s.client var request map[string]interface{} var response map[string]interface{} var query map[string]interface{} request = make(map[string]interface{}) query = make(map[string]interface{}) request["VpcId"] = id request["RegionId"] = client.RegionId action := "DescribeVpcAttribute" wait := incrementalWait(3*time.Second, 5*time.Second) err = resource.Retry(1*time.Minute, func() *resource.RetryError { response, err = client.RpcPost("Vpc", "2016-04-28", action, query, 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) } currentStatus := response["VpcId"] if fmt.Sprint(currentStatus) == "" { return object, WrapErrorf(NotFoundErr("Vpc", id), NotFoundMsg, response) } return response, nil } func (s *VpcServiceV2) DescribeVpcDescribeRouteTableList(id string) (object map[string]interface{}, err error) { client := s.client var request map[string]interface{} var response map[string]interface{} var query map[string]interface{} request = make(map[string]interface{}) query = make(map[string]interface{}) request["VpcId"] = id request["RegionId"] = client.RegionId action := "DescribeRouteTableList" wait := incrementalWait(3*time.Second, 5*time.Second) err = resource.Retry(1*time.Minute, func() *resource.RetryError { response, err = client.RpcPost("Vpc", "2016-04-28", action, query, 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("$.RouterTableList.RouterTableListType[*]", response) if err != nil { return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.RouterTableList.RouterTableListType[*]", response) } if len(v.([]interface{})) == 0 { return object, WrapErrorf(NotFoundErr("Vpc", id), NotFoundMsg, response) } result, _ := v.([]interface{}) for _, v := range result { item := v.(map[string]interface{}) if fmt.Sprint(item["RouteTableType"]) != "System" { continue } if fmt.Sprint(item["VpcId"]) != id { continue } return item, nil } return object, WrapErrorf(NotFoundErr("Vpc", id), NotFoundMsg, response) } func (s *VpcServiceV2) VpcVpcStateRefreshFunc(id string, field string, failStates []string) resource.StateRefreshFunc { return func() (interface{}, string, error) { object, err := s.DescribeVpcVpc(id) if err != nil { if NotFoundError(err) { return nil, "", nil } return nil, "", WrapError(err) } v, err := jsonpath.Get(field, object) currentStatus := fmt.Sprint(v) if strings.HasPrefix(field, "#") { v, _ := jsonpath.Get(strings.TrimPrefix(field, "#"), object) if v != nil { currentStatus = "#CHECKSET" } } for _, failState := range failStates { if currentStatus == failState { return object, currentStatus, WrapError(Error(FailedToReachTargetStatus, currentStatus)) } } return object, currentStatus, nil } } // DescribeVpcVpc >>> Encapsulated. // DescribeVpcRouteTable <<< Encapsulated get interface for Vpc RouteTable. func (s *VpcServiceV2) DescribeVpcRouteTable(id string) (object map[string]interface{}, err error) { client := s.client var request map[string]interface{} var response map[string]interface{} var query map[string]interface{} request = make(map[string]interface{}) query = make(map[string]interface{}) request["RouteTableId"] = id request["RegionId"] = client.RegionId action := "DescribeRouteTableList" wait := incrementalWait(3*time.Second, 5*time.Second) err = resource.Retry(1*time.Minute, func() *resource.RetryError { response, err = client.RpcPost("Vpc", "2016-04-28", action, query, 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("$.RouterTableList.RouterTableListType[*]", response) if err != nil { return object, WrapErrorf(NotFoundErr("RouteTable", id), NotFoundMsg, response) } if len(v.([]interface{})) == 0 { return object, WrapErrorf(NotFoundErr("RouteTable", id), NotFoundMsg, response) } currentStatus := v.([]interface{})[0].(map[string]interface{})["Status"] if currentStatus == nil { return object, WrapErrorf(NotFoundErr("RouteTable", id), NotFoundMsg, response) } return v.([]interface{})[0].(map[string]interface{}), nil } func (s *VpcServiceV2) VpcRouteTableStateRefreshFunc(id string, field string, failStates []string) resource.StateRefreshFunc { return func() (interface{}, string, error) { object, err := s.DescribeVpcRouteTable(id) if err != nil { if NotFoundError(err) { return nil, "", nil } return nil, "", WrapError(err) } v, err := jsonpath.Get(field, object) currentStatus := fmt.Sprint(v) if strings.HasPrefix(field, "#") { v, _ := jsonpath.Get(strings.TrimPrefix(field, "#"), object) if v != nil { currentStatus = "#CHECKSET" } } for _, failState := range failStates { if currentStatus == failState { return object, currentStatus, WrapError(Error(FailedToReachTargetStatus, currentStatus)) } } return object, currentStatus, nil } } // DescribeVpcRouteTable >>> Encapsulated. // DescribeVpcGatewayRouteTableAttachment <<< Encapsulated get interface for Vpc GatewayRouteTableAttachment. func (s *VpcServiceV2) DescribeVpcGatewayRouteTableAttachment(id string) (object map[string]interface{}, err error) { client := s.client var request map[string]interface{} var response map[string]interface{} var query map[string]interface{} action := "GetIpv4GatewayAttribute" request = make(map[string]interface{}) query = make(map[string]interface{}) parts := strings.Split(id, ":") if len(parts) != 2 { err = WrapError(fmt.Errorf("invalid Resource Id %s. Expected parts' length %d, got %d", id, 2, len(parts))) } request["Ipv4GatewayId"] = parts[1] request["RegionId"] = client.RegionId wait := incrementalWait(3*time.Second, 5*time.Second) err = resource.Retry(1*time.Minute, func() *resource.RetryError { response, err = client.RpcPost("Vpc", "2016-04-28", action, query, request, true) if err != nil { if NeedRetry(err) { wait() return resource.RetryableError(err) } return resource.NonRetryableError(err) } addDebug(action, response, request) return nil }) if err != nil { if IsExpectedErrors(err, []string{}) { return object, WrapErrorf(NotFoundErr("GatewayRouteTableAttachment", id), NotFoundMsg, ProviderERROR, fmt.Sprint(response["RequestId"])) } return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR) } return response, nil } func (s *VpcServiceV2) VpcGatewayRouteTableAttachmentStateRefreshFunc(id string, field string, failStates []string) resource.StateRefreshFunc { return func() (interface{}, string, error) { object, err := s.DescribeVpcGatewayRouteTableAttachment(id) if err != nil { if NotFoundError(err) { return object, "", nil } return nil, "", WrapError(err) } currentStatus := fmt.Sprint(object[field]) for _, failState := range failStates { if currentStatus == failState { return object, currentStatus, WrapError(Error(FailedToReachTargetStatus, currentStatus)) } } return object, currentStatus, nil } } // DescribeVpcGatewayRouteTableAttachment >>> Encapsulated. // DescribeVpcNetworkAcl <<< Encapsulated get interface for Vpc NetworkAcl. func (s *VpcServiceV2) DescribeVpcNetworkAcl(id string) (object map[string]interface{}, err error) { client := s.client var request map[string]interface{} var response map[string]interface{} var query map[string]interface{} action := "DescribeNetworkAclAttributes" request = make(map[string]interface{}) query = make(map[string]interface{}) query["NetworkAclId"] = id query["RegionId"] = client.RegionId request["ClientToken"] = buildClientToken(action) wait := incrementalWait(3*time.Second, 5*time.Second) err = resource.Retry(1*time.Minute, func() *resource.RetryError { response, err = client.RpcPost("Vpc", "2016-04-28", action, query, request, true) request["ClientToken"] = buildClientToken(action) if err != nil { if NeedRetry(err) { wait() return resource.RetryableError(err) } return resource.NonRetryableError(err) } addDebug(action, response, request) return nil }) if err != nil { if IsExpectedErrors(err, []string{"InvalidNetworkAcl.NotFound"}) { return object, WrapErrorf(NotFoundErr("NetworkAcl", id), NotFoundMsg, response) } addDebug(action, response, request) return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR) } v, err := jsonpath.Get("$.NetworkAclAttribute", response) if err != nil { return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.NetworkAclAttribute", response) } return v.(map[string]interface{}), nil } func (s *VpcServiceV2) VpcNetworkAclStateRefreshFunc(id string, field string, failStates []string) resource.StateRefreshFunc { return func() (interface{}, string, error) { object, err := s.DescribeVpcNetworkAcl(id) if err != nil { if NotFoundError(err) { return nil, "", nil } return nil, "", WrapError(err) } v, err := jsonpath.Get(field, object) currentStatus := fmt.Sprint(v) for _, failState := range failStates { if currentStatus == failState { return object, currentStatus, WrapError(Error(FailedToReachTargetStatus, currentStatus)) } } return object, currentStatus, nil } } // DescribeVpcNetworkAcl >>> Encapsulated. // DescribeVpcIpv6EgressRule <<< Encapsulated get interface for Vpc Ipv6EgressRule. func (s *VpcServiceV2) DescribeVpcIpv6EgressRule(id string) (object map[string]interface{}, err error) { client := s.client var request map[string]interface{} var response map[string]interface{} var query map[string]interface{} parts := strings.Split(id, ":") if len(parts) != 2 { err = WrapError(fmt.Errorf("invalid Resource Id %s. Expected parts' length %d, got %d", id, 2, len(parts))) } action := "DescribeIpv6EgressOnlyRules" request = make(map[string]interface{}) query = make(map[string]interface{}) query["Ipv6EgressOnlyRuleId"] = parts[1] query["Ipv6GatewayId"] = parts[0] query["RegionId"] = client.RegionId wait := incrementalWait(3*time.Second, 5*time.Second) err = resource.Retry(1*time.Minute, func() *resource.RetryError { response, err = client.RpcPost("Vpc", "2016-04-28", action, query, request, true) if err != nil { if NeedRetry(err) { wait() return resource.RetryableError(err) } return resource.NonRetryableError(err) } addDebug(action, response, request) return nil }) if err != nil { addDebug(action, response, request) return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR) } v, err := jsonpath.Get("$.Ipv6EgressOnlyRules.Ipv6EgressOnlyRule[*]", response) if err != nil { return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.Ipv6EgressOnlyRules.Ipv6EgressOnlyRule[*]", response) } if len(v.([]interface{})) == 0 { return object, WrapErrorf(NotFoundErr("Ipv6EgressRule", id), NotFoundMsg, response) } return v.([]interface{})[0].(map[string]interface{}), nil } func (s *VpcServiceV2) VpcIpv6EgressRuleStateRefreshFunc(id string, field string, failStates []string) resource.StateRefreshFunc { return func() (interface{}, string, error) { object, err := s.DescribeVpcIpv6EgressRule(id) if err != nil { if NotFoundError(err) { return nil, "", nil } return nil, "", WrapError(err) } v, err := jsonpath.Get(field, object) currentStatus := fmt.Sprint(v) for _, failState := range failStates { if currentStatus == failState { return object, currentStatus, WrapError(Error(FailedToReachTargetStatus, currentStatus)) } } return object, currentStatus, nil } } // DescribeVpcIpv6EgressRule >>> Encapsulated. // DescribeVpcTrafficMirrorFilter <<< Encapsulated get interface for Vpc TrafficMirrorFilter. func (s *VpcServiceV2) DescribeVpcTrafficMirrorFilter(id string) (object map[string]interface{}, err error) { client := s.client var request map[string]interface{} var response map[string]interface{} var query map[string]interface{} action := "ListTrafficMirrorFilters" request = make(map[string]interface{}) query = make(map[string]interface{}) request["TrafficMirrorFilterIds.1"] = id request["RegionId"] = client.RegionId wait := incrementalWait(3*time.Second, 5*time.Second) err = resource.Retry(1*time.Minute, func() *resource.RetryError { response, err = client.RpcPost("Vpc", "2016-04-28", action, query, request, true) if err != nil { if NeedRetry(err) { wait() return resource.RetryableError(err) } return resource.NonRetryableError(err) } addDebug(action, response, request) return nil }) if err != nil { if IsExpectedErrors(err, []string{}) { return object, WrapErrorf(NotFoundErr("TrafficMirrorFilter", id), NotFoundMsg, ProviderERROR, fmt.Sprint(response["RequestId"])) } return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR) } v, err := jsonpath.Get("$.TrafficMirrorFilters[*]", response) if err != nil { return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.TrafficMirrorFilters[*]", response) } if len(v.([]interface{})) == 0 { return object, WrapErrorf(NotFoundErr("TrafficMirrorFilter", id), NotFoundMsg, ProviderERROR, fmt.Sprint(response["RequestId"])) } return v.([]interface{})[0].(map[string]interface{}), nil } func (s *VpcServiceV2) VpcTrafficMirrorFilterStateRefreshFunc(id string, field string, failStates []string) resource.StateRefreshFunc { return func() (interface{}, string, error) { object, err := s.DescribeVpcTrafficMirrorFilter(id) if err != nil { if NotFoundError(err) { return nil, "", nil } return nil, "", WrapError(err) } currentStatus := fmt.Sprint(object[field]) for _, failState := range failStates { if currentStatus == failState { return object, currentStatus, WrapError(Error(FailedToReachTargetStatus, currentStatus)) } } return object, currentStatus, nil } } // DescribeVpcTrafficMirrorFilter >>> Encapsulated. // DescribeVpcTrafficMirrorSession <<< Encapsulated get interface for Vpc TrafficMirrorSession. func (s *VpcServiceV2) DescribeVpcTrafficMirrorSession(id string) (object map[string]interface{}, err error) { client := s.client var request map[string]interface{} var response map[string]interface{} var query map[string]interface{} action := "ListTrafficMirrorSessions" request = make(map[string]interface{}) query = make(map[string]interface{}) request["TrafficMirrorSessionIds.1"] = id request["RegionId"] = client.RegionId wait := incrementalWait(3*time.Second, 5*time.Second) err = resource.Retry(1*time.Minute, func() *resource.RetryError { response, err = client.RpcPost("Vpc", "2016-04-28", action, query, request, true) if err != nil { if NeedRetry(err) { wait() return resource.RetryableError(err) } return resource.NonRetryableError(err) } addDebug(action, response, request) return nil }) if err != nil { if IsExpectedErrors(err, []string{}) { return object, WrapErrorf(NotFoundErr("TrafficMirrorSession", id), NotFoundMsg, ProviderERROR, fmt.Sprint(response["RequestId"])) } return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR) } v, err := jsonpath.Get("$.TrafficMirrorSessions[*]", response) if err != nil { return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.TrafficMirrorSessions[*]", response) } if len(v.([]interface{})) == 0 { return object, WrapErrorf(NotFoundErr("TrafficMirrorSession", id), NotFoundMsg, ProviderERROR, fmt.Sprint(response["RequestId"])) } return v.([]interface{})[0].(map[string]interface{}), nil } func (s *VpcServiceV2) VpcTrafficMirrorSessionStateRefreshFunc(id string, field string, failStates []string) resource.StateRefreshFunc { return func() (interface{}, string, error) { object, err := s.DescribeVpcTrafficMirrorSession(id) if err != nil { if NotFoundError(err) { return nil, "", nil } return nil, "", WrapError(err) } currentStatus := fmt.Sprint(object[field]) for _, failState := range failStates { if currentStatus == failState { return object, currentStatus, WrapError(Error(FailedToReachTargetStatus, currentStatus)) } } return object, currentStatus, nil } } // DescribeVpcTrafficMirrorSession >>> Encapsulated. // DescribeVpcIpv6InternetBandwidth <<< Encapsulated get interface for Vpc Ipv6InternetBandwidth. func (s *VpcServiceV2) DescribeVpcIpv6InternetBandwidth(id string) (object map[string]interface{}, err error) { client := s.client var request map[string]interface{} var response map[string]interface{} var query map[string]interface{} action := "DescribeIpv6Addresses" request = make(map[string]interface{}) query = make(map[string]interface{}) query["Ipv6InternetBandwidthId"] = id request["RegionId"] = client.RegionId wait := incrementalWait(3*time.Second, 5*time.Second) err = resource.Retry(1*time.Minute, func() *resource.RetryError { response, err = client.RpcPost("Vpc", "2016-04-28", action, query, request, true) if err != nil { if NeedRetry(err) { wait() return resource.RetryableError(err) } return resource.NonRetryableError(err) } addDebug(action, response, request) return nil }) if err != nil { if IsExpectedErrors(err, []string{}) { return object, WrapErrorf(NotFoundErr("Ipv6InternetBandwidth", id), NotFoundMsg, ProviderERROR, fmt.Sprint(response["RequestId"])) } return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR) } v, err := jsonpath.Get("$.Ipv6Addresses.Ipv6Address[*]", response) if err != nil { return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.Ipv6Addresses.Ipv6Address[*]", response) } if len(v.([]interface{})) == 0 { return object, WrapErrorf(NotFoundErr("Ipv6InternetBandwidth", id), NotFoundMsg, ProviderERROR, fmt.Sprint(response["RequestId"])) } return v.([]interface{})[0].(map[string]interface{}), nil } func (s *VpcServiceV2) VpcIpv6InternetBandwidthStateRefreshFunc(id string, field string, failStates []string) resource.StateRefreshFunc { return func() (interface{}, string, error) { object, err := s.DescribeVpcIpv6InternetBandwidth(id) if err != nil { if NotFoundError(err) { return object, "", nil } return nil, "", WrapError(err) } currentStatus := fmt.Sprint(object[field]) for _, failState := range failStates { if currentStatus == failState { return object, currentStatus, WrapError(Error(FailedToReachTargetStatus, currentStatus)) } } return object, currentStatus, nil } } // DescribeVpcIpv6InternetBandwidth >>> Encapsulated. // DescribeVpcDhcpOptionsSet <<< Encapsulated get interface for Vpc DhcpOptionsSet. func (s *VpcServiceV2) DescribeVpcDhcpOptionsSet(id string) (object map[string]interface{}, err error) { client := s.client var request map[string]interface{} var response map[string]interface{} var query map[string]interface{} action := "GetDhcpOptionsSet" request = make(map[string]interface{}) query = make(map[string]interface{}) query["DhcpOptionsSetId"] = id query["RegionId"] = client.RegionId wait := incrementalWait(3*time.Second, 5*time.Second) err = resource.Retry(1*time.Minute, func() *resource.RetryError { response, err = client.RpcPost("Vpc", "2016-04-28", action, query, request, true) if err != nil { if NeedRetry(err) { wait() return resource.RetryableError(err) } return resource.NonRetryableError(err) } addDebug(action, response, request) return nil }) if err != nil { addDebug(action, response, request) return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR) } currentStatus := response["Status"] if currentStatus == nil { return object, WrapErrorf(NotFoundErr("DhcpOptionsSet", id), NotFoundMsg, response) } return response, nil } func (s *VpcServiceV2) VpcDhcpOptionsSetStateRefreshFunc(id string, field string, failStates []string) resource.StateRefreshFunc { return func() (interface{}, string, error) { object, err := s.DescribeVpcDhcpOptionsSet(id) if err != nil { if NotFoundError(err) { return nil, "", nil } return nil, "", WrapError(err) } v, err := jsonpath.Get(field, object) currentStatus := fmt.Sprint(v) for _, failState := range failStates { if currentStatus == failState { return object, currentStatus, WrapError(Error(FailedToReachTargetStatus, currentStatus)) } } return object, currentStatus, nil } } // DescribeVpcDhcpOptionsSet >>> Encapsulated. // DescribeVpcPeerConnection <<< Encapsulated get interface for Vpc PeerConnection. func (s *VpcServiceV2) DescribeVpcPeerConnection(id string) (object map[string]interface{}, err error) { client := s.client var response map[string]interface{} action := "GetVpcPeerConnectionAttribute" request := map[string]interface{}{ "InstanceId": id, } wait := incrementalWait(3*time.Second, 5*time.Second) err = resource.Retry(1*time.Minute, func() *resource.RetryError { response, err = client.RpcPost("VpcPeer", "2022-01-01", 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{"ResourceNotFound.InstanceId"}) { return nil, WrapErrorf(NotFoundErr("Vpc:PeerConnection", id), NotFoundWithResponse, response) } return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR) } v, err := jsonpath.Get("$", response) if err != nil { return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$", response) } object = v.(map[string]interface{}) return object, nil } // DescribeVpcGatewayEndpoint <<< Encapsulated get interface for Vpc GatewayEndpoint. func (s *VpcServiceV2) DescribeVpcGatewayEndpoint(id string) (object map[string]interface{}, err error) { client := s.client var request map[string]interface{} var response map[string]interface{} var query map[string]interface{} request = make(map[string]interface{}) query = make(map[string]interface{}) request["EndpointId"] = id request["RegionId"] = client.RegionId action := "GetVpcGatewayEndpointAttribute" wait := incrementalWait(3*time.Second, 5*time.Second) err = resource.Retry(1*time.Minute, func() *resource.RetryError { response, err = client.RpcPost("Vpc", "2016-04-28", action, query, 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{"ResourceNotFound.GatewayEndpoint"}) { return object, WrapErrorf(NotFoundErr("GatewayEndpoint", id), NotFoundMsg, response) } return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR) } return response, nil } func (s *VpcServiceV2) VpcGatewayEndpointStateRefreshFunc(id string, field string, failStates []string) resource.StateRefreshFunc { return func() (interface{}, string, error) { object, err := s.DescribeVpcGatewayEndpoint(id) if err != nil { if NotFoundError(err) { return object, "", nil } return nil, "", WrapError(err) } v, err := jsonpath.Get(field, object) currentStatus := fmt.Sprint(v) if strings.HasPrefix(field, "#") { v, _ := jsonpath.Get(strings.TrimPrefix(field, "#"), object) if v != nil { currentStatus = "#CHECKSET" } } for _, failState := range failStates { if currentStatus == failState { return object, currentStatus, WrapError(Error(FailedToReachTargetStatus, currentStatus)) } } return object, currentStatus, nil } } // DescribeVpcGatewayEndpoint >>> Encapsulated. // DescribeVpcGatewayEndpointRouteTableAttachment <<< Encapsulated get interface for Vpc GatewayEndpointRouteTableAttachment. func (s *VpcServiceV2) DescribeVpcGatewayEndpointRouteTableAttachment(id string) (object map[string]interface{}, err error) { client := s.client var request map[string]interface{} var response map[string]interface{} var query map[string]interface{} parts := strings.Split(id, ":") if len(parts) != 2 { err = WrapError(fmt.Errorf("invalid Resource Id %s. Expected parts' length %d, got %d", id, 2, len(parts))) } action := "GetVpcGatewayEndpointAttribute" request = make(map[string]interface{}) query = make(map[string]interface{}) query["EndpointId"] = parts[0] request["RegionId"] = client.RegionId wait := incrementalWait(3*time.Second, 5*time.Second) err = resource.Retry(1*time.Minute, func() *resource.RetryError { response, err = client.RpcPost("Vpc", "2016-04-28", action, query, request, true) if err != nil { if NeedRetry(err) { wait() return resource.RetryableError(err) } return resource.NonRetryableError(err) } addDebug(action, response, request) return nil }) if err != nil { if IsExpectedErrors(err, []string{"ResourceNotFound.GatewayEndpoint"}) { return object, WrapErrorf(NotFoundErr("GatewayEndpointRouteTableAttachment", id), NotFoundMsg, ProviderERROR, fmt.Sprint(response["RequestId"])) } return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR) } v, err := jsonpath.Get("$.RouteTables", response) if err != nil { return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.RouteTables", response) } result, _ := v.([]interface{}) for _, item := range result { if item.(string) == parts[1] { return response, nil } } return object, WrapErrorf(NotFoundErr("GatewayEndpointRouteTableAttachment", id), NotFoundMsg, ProviderERROR, fmt.Sprint(response["RequestId"])) } func (s *VpcServiceV2) VpcGatewayEndpointRouteTableAttachmentStateRefreshFunc(id string, field string, failStates []string) resource.StateRefreshFunc { return func() (interface{}, string, error) { object, err := s.DescribeVpcGatewayEndpointRouteTableAttachment(id) if err != nil { if NotFoundError(err) { return object, "", nil } return nil, "", WrapError(err) } currentStatus := fmt.Sprint(object[field]) for _, failState := range failStates { if currentStatus == failState { return object, currentStatus, WrapError(Error(FailedToReachTargetStatus, currentStatus)) } } return object, currentStatus, nil } } // DescribeVpcGatewayEndpointRouteTableAttachment >>> Encapsulated. // DescribeVpcNetworkAclAttachment <<< Encapsulated get interface for Vpc NetworkAclAttachment. func (s *VpcServiceV2) DescribeVpcNetworkAclAttachment(id string) (object map[string]interface{}, err error) { client := s.client var request map[string]interface{} var response map[string]interface{} var query map[string]interface{} parts := strings.Split(id, ":") if len(parts) != 2 { err = WrapError(fmt.Errorf("invalid Resource Id %s. Expected parts' length %d, got %d", id, 2, len(parts))) } action := "DescribeNetworkAcls" request = make(map[string]interface{}) query = make(map[string]interface{}) query["NetworkAclId"] = parts[0] query["ResourceId"] = parts[1] request["RegionId"] = client.RegionId request["ClientToken"] = buildClientToken(action) wait := incrementalWait(3*time.Second, 5*time.Second) err = resource.Retry(1*time.Minute, func() *resource.RetryError { response, err = client.RpcPost("Vpc", "2016-04-28", action, query, request, true) request["ClientToken"] = buildClientToken(action) if err != nil { if IsExpectedErrors(err, []string{"OperationFailure.OperationFailed"}) || NeedRetry(err) { wait() return resource.RetryableError(err) } return resource.NonRetryableError(err) } addDebug(action, response, request) return nil }) if err != nil { if IsExpectedErrors(err, []string{}) { return object, WrapErrorf(NotFoundErr("NetworkAclAttachment", id), NotFoundMsg, response) } return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR) } v, err := jsonpath.Get("$.NetworkAcls.NetworkAcl[*].Resources.Resource[*]", response) if err != nil { return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.NetworkAcls.NetworkAcl[*].Resources.Resource[*]", response) } if len(v.([]interface{})) == 0 { return object, WrapErrorf(NotFoundErr("NetworkAclAttachment", id), NotFoundMsg, response) } currentStatus := v.([]interface{})[0].(map[string]interface{})["Status"] if currentStatus == "UNBINDING" { return object, WrapErrorf(NotFoundErr("NetworkAclAttachment", id), NotFoundMsg, response) } return v.([]interface{})[0].(map[string]interface{}), nil } func (s *VpcServiceV2) VpcNetworkAclAttachmentStateRefreshFunc(id string, field string, failStates []string) resource.StateRefreshFunc { return func() (interface{}, string, error) { object, err := s.DescribeVpcNetworkAclAttachment(id) if err != nil { if NotFoundError(err) { return nil, "", nil } return nil, "", WrapError(err) } currentStatus := fmt.Sprint(object[field]) for _, failState := range failStates { if currentStatus == failState { return object, currentStatus, WrapError(Error(FailedToReachTargetStatus, currentStatus)) } } return object, currentStatus, nil } } // DescribeVpcNetworkAclAttachment >>> Encapsulated. // DescribeVpcTrafficMirrorFilterEgressRule <<< Encapsulated get interface for Vpc TrafficMirrorFilterEgressRule. func (s *VpcServiceV2) DescribeVpcTrafficMirrorFilterEgressRule(id string) (object map[string]interface{}, err error) { client := s.client var request map[string]interface{} var response map[string]interface{} var query map[string]interface{} parts := strings.Split(id, ":") if len(parts) != 2 { err = WrapError(fmt.Errorf("invalid Resource Id %s. Expected parts' length %d, got %d", id, 2, len(parts))) } action := "ListTrafficMirrorFilters" request = make(map[string]interface{}) query = make(map[string]interface{}) request["TrafficMirrorFilterIds.1"] = parts[0] request["RegionId"] = client.RegionId wait := incrementalWait(3*time.Second, 5*time.Second) err = resource.Retry(1*time.Minute, func() *resource.RetryError { response, err = client.RpcPost("Vpc", "2016-04-28", action, query, request, true) if err != nil { if NeedRetry(err) { wait() return resource.RetryableError(err) } return resource.NonRetryableError(err) } addDebug(action, response, request) return nil }) if err != nil { if IsExpectedErrors(err, []string{}) { return object, WrapErrorf(NotFoundErr("TrafficMirrorFilterEgressRule", id), NotFoundMsg, response) } return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR) } v, err := jsonpath.Get("$.TrafficMirrorFilters[*].EgressRules[*]", response) if err != nil { return object, WrapErrorf(NotFoundErr("TrafficMirrorFilterEgressRule", id), NotFoundMsg, response) } if len(v.([]interface{})) == 0 { return object, WrapErrorf(NotFoundErr("TrafficMirrorFilterEgressRule", id), NotFoundMsg, response) } result, _ := v.([]interface{}) for _, v := range result { item := v.(map[string]interface{}) if item["TrafficMirrorFilterId"] != parts[0] { continue } if item["TrafficMirrorFilterRuleId"] != parts[1] { continue } return item, nil } return object, WrapErrorf(NotFoundErr("TrafficMirrorFilterEgressRule", id), NotFoundMsg, response) } func (s *VpcServiceV2) VpcTrafficMirrorFilterEgressRuleStateRefreshFunc(id string, field string, failStates []string) resource.StateRefreshFunc { return func() (interface{}, string, error) { object, err := s.DescribeVpcTrafficMirrorFilterEgressRule(id) if err != nil { if NotFoundError(err) { return object, "", nil } return nil, "", WrapError(err) } v, err := jsonpath.Get(field, object) currentStatus := fmt.Sprint(v) for _, failState := range failStates { if currentStatus == failState { return object, currentStatus, WrapError(Error(FailedToReachTargetStatus, currentStatus)) } } return object, currentStatus, nil } } // DescribeVpcTrafficMirrorFilterEgressRule >>> Encapsulated. // DescribeVpcTrafficMirrorFilterIngressRule <<< Encapsulated get interface for Vpc TrafficMirrorFilterIngressRule. func (s *VpcServiceV2) DescribeVpcTrafficMirrorFilterIngressRule(id string) (object map[string]interface{}, err error) { client := s.client var request map[string]interface{} var response map[string]interface{} var query map[string]interface{} parts := strings.Split(id, ":") if len(parts) != 2 { err = WrapError(fmt.Errorf("invalid Resource Id %s. Expected parts' length %d, got %d", id, 2, len(parts))) } action := "ListTrafficMirrorFilters" request = make(map[string]interface{}) query = make(map[string]interface{}) request["TrafficMirrorFilterIds.1"] = parts[0] request["RegionId"] = client.RegionId wait := incrementalWait(3*time.Second, 5*time.Second) err = resource.Retry(1*time.Minute, func() *resource.RetryError { response, err = client.RpcPost("Vpc", "2016-04-28", action, query, request, true) if err != nil { if NeedRetry(err) { wait() return resource.RetryableError(err) } return resource.NonRetryableError(err) } addDebug(action, response, request) return nil }) if err != nil { if IsExpectedErrors(err, []string{}) { return object, WrapErrorf(NotFoundErr("TrafficMirrorFilterIngressRule", id), NotFoundMsg, response) } return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR) } v, err := jsonpath.Get("$.TrafficMirrorFilters[*].IngressRules[*]", response) if err != nil { return object, WrapErrorf(NotFoundErr("TrafficMirrorFilterIngressRule", id), NotFoundMsg, response) } if len(v.([]interface{})) == 0 { return object, WrapErrorf(NotFoundErr("TrafficMirrorFilterIngressRule", id), NotFoundMsg, response) } result, _ := v.([]interface{}) for _, v := range result { item := v.(map[string]interface{}) if item["TrafficMirrorFilterId"] != parts[0] { continue } if item["TrafficMirrorFilterRuleId"] != parts[1] { continue } return item, nil } return object, WrapErrorf(NotFoundErr("TrafficMirrorFilterIngressRule", id), NotFoundMsg, response) } func (s *VpcServiceV2) VpcTrafficMirrorFilterIngressRuleStateRefreshFunc(id string, field string, failStates []string) resource.StateRefreshFunc { return func() (interface{}, string, error) { object, err := s.DescribeVpcTrafficMirrorFilterIngressRule(id) if err != nil { if NotFoundError(err) { return object, "", nil } return nil, "", WrapError(err) } v, err := jsonpath.Get(field, object) currentStatus := fmt.Sprint(v) for _, failState := range failStates { if currentStatus == failState { return object, currentStatus, WrapError(Error(FailedToReachTargetStatus, currentStatus)) } } return object, currentStatus, nil } } // DescribeVpcTrafficMirrorFilterIngressRule >>> Encapsulated. // DescribeVpcHaVipAttachment <<< Encapsulated get interface for Vpc HaVipAttachment. func (s *VpcServiceV2) DescribeVpcHaVipAttachment(id string) (object map[string]interface{}, err error) { client := s.client var request map[string]interface{} var response map[string]interface{} var query map[string]interface{} parts := strings.Split(id, ":") if len(parts) != 2 { err = WrapError(fmt.Errorf("invalid Resource Id %s. Expected parts' length %d, got %d", id, 2, len(parts))) } action := "DescribeHaVips" request = make(map[string]interface{}) query = make(map[string]interface{}) jsonString := "{}" jsonString, _ = sjson.Set(jsonString, "Filter.0.Value.0", parts[0]) jsonString, _ = sjson.Set(jsonString, "Filter.0.Key", "HaVipId") err = json.Unmarshal([]byte(jsonString), &request) if err != nil { return object, WrapError(err) } request["RegionId"] = client.RegionId wait := incrementalWait(3*time.Second, 5*time.Second) err = resource.Retry(1*time.Minute, func() *resource.RetryError { response, err = client.RpcPost("Vpc", "2016-04-28", action, query, request, true) if err != nil { if NeedRetry(err) { wait() return resource.RetryableError(err) } return resource.NonRetryableError(err) } addDebug(action, response, request) return nil }) if err != nil { if IsExpectedErrors(err, []string{}) { return object, WrapErrorf(NotFoundErr("HaVipAttachment", id), NotFoundMsg, response) } return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR) } v, err := jsonpath.Get("$.HaVips.HaVip[*]", response) if err != nil { return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.HaVips.HaVip[*]", response) } if len(v.([]interface{})) == 0 { return object, WrapErrorf(NotFoundErr("HaVipAttachment", id), NotFoundMsg, response) } result, _ := v.([]interface{}) for _, v := range result { item := v.(map[string]interface{}) if item["HaVipId"] != parts[0] { continue } instanceIds, err := jsonpath.Get("$.AssociatedInstances.associatedInstance[*]", item) if err != nil { return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.AssociatedInstances.associatedInstance[*]", item) } found := false for _, vv := range instanceIds.([]interface{}) { if vv == parts[1] { found = true break } } if found { return item, nil } } return object, WrapErrorf(NotFoundErr("HaVipAttachment", id), NotFoundMsg, response) } func (s *VpcServiceV2) VpcHaVipAttachmentStateRefreshFunc(id string, field string, failStates []string) resource.StateRefreshFunc { return func() (interface{}, string, error) { object, err := s.DescribeVpcHaVipAttachment(id) if err != nil { if NotFoundError(err) { return object, "", nil } return nil, "", WrapError(err) } currentStatus := fmt.Sprint(object[field]) for _, failState := range failStates { if currentStatus == failState { return object, currentStatus, WrapError(Error(FailedToReachTargetStatus, currentStatus)) } } return object, currentStatus, nil } } // DescribeVpcHaVipAttachment >>> Encapsulated. // DescribeVpcRouteTableAttachment <<< Encapsulated get interface for Vpc RouteTableAttachment. func (s *VpcServiceV2) DescribeVpcRouteTableAttachment(id string) (object map[string]interface{}, err error) { client := s.client var request map[string]interface{} var response map[string]interface{} var query map[string]interface{} parts := strings.Split(id, ":") if len(parts) != 2 { err = WrapError(fmt.Errorf("invalid Resource Id %s. Expected parts' length %d, got %d", id, 2, len(parts))) } action := "DescribeRouteTableList" request = make(map[string]interface{}) query = make(map[string]interface{}) query["RouteTableId"] = parts[0] request["RegionId"] = client.RegionId wait := incrementalWait(3*time.Second, 5*time.Second) err = resource.Retry(1*time.Minute, func() *resource.RetryError { response, err = client.RpcPost("Vpc", "2016-04-28", action, query, request, true) if err != nil { if NeedRetry(err) { wait() return resource.RetryableError(err) } return resource.NonRetryableError(err) } addDebug(action, response, request) return nil }) if err != nil { if IsExpectedErrors(err, []string{}) { return object, WrapErrorf(NotFoundErr("RouteTableAttachment", id), NotFoundMsg, response) } return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR) } v, err := jsonpath.Get("$.RouterTableList.RouterTableListType[*]", response) if err != nil { return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.RouterTableList.RouterTableListType[*]", response) } if len(v.([]interface{})) == 0 { return object, WrapErrorf(NotFoundErr("RouteTableAttachment", id), NotFoundMsg, response) } result, _ := v.([]interface{}) for _, v := range result { item := v.(map[string]interface{}) if item["RouteTableId"] != parts[0] { continue } vSwitchIds, err := jsonpath.Get("$.VSwitchIds.VSwitchId[*]", item) if err != nil { return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.VSwitchIds.VSwitchId[*]", item) } found := false for _, vv := range vSwitchIds.([]interface{}) { if vv == parts[1] { found = true break } } if found { return item, nil } } return object, WrapErrorf(NotFoundErr("RouteTableAttachment", id), NotFoundMsg, response) } func (s *VpcServiceV2) VpcRouteTableAttachmentStateRefreshFunc(id string, field string, failStates []string) resource.StateRefreshFunc { return func() (interface{}, string, error) { object, err := s.DescribeVpcRouteTableAttachment(id) if err != nil { if NotFoundError(err) { return object, "", nil } return nil, "", WrapError(err) } currentStatus := fmt.Sprint(object[field]) for _, failState := range failStates { if currentStatus == failState { return object, currentStatus, WrapError(Error(FailedToReachTargetStatus, currentStatus)) } } return object, currentStatus, nil } } // DescribeVpcRouteTableAttachment >>> Encapsulated. // DescribeVpcIpv4CidrBlock <<< Encapsulated get interface for Vpc Ipv4CidrBlock. func (s *VpcServiceV2) DescribeVpcIpv4CidrBlock(id string) (object map[string]interface{}, err error) { client := s.client var request map[string]interface{} var response map[string]interface{} var query map[string]interface{} parts := strings.Split(id, ":") if len(parts) != 2 { err = WrapError(fmt.Errorf("invalid Resource Id %s. Expected parts' length %d, got %d", id, 2, len(parts))) } request = make(map[string]interface{}) query = make(map[string]interface{}) request["VpcId"] = parts[0] request["RegionId"] = client.RegionId action := "DescribeVpcs" wait := incrementalWait(3*time.Second, 5*time.Second) err = resource.Retry(1*time.Minute, func() *resource.RetryError { response, err = client.RpcPost("Vpc", "2016-04-28", action, query, 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("$.Vpcs.Vpc[*]", response) if err != nil { return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.Vpcs.Vpc[*]", response) } if len(v.([]interface{})) == 0 { return object, WrapErrorf(NotFoundErr("Ipv4CidrBlock", id), NotFoundMsg, response) } result, _ := v.([]interface{}) for _, v := range result { item := v.(map[string]interface{}) secondaryCidrBlocks, err := jsonpath.Get("$.SecondaryCidrBlocks.SecondaryCidrBlock[*]", item) if err != nil { return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.SecondaryCidrBlocks.SecondaryCidrBlock[*]", item) } found := false for _, vv := range secondaryCidrBlocks.([]interface{}) { if vv == parts[1] { found = true break } } if found { return item, nil } if fmt.Sprint(item["VpcId"]) != parts[0] { continue } } return object, WrapErrorf(NotFoundErr("Ipv4CidrBlock", id), NotFoundMsg, response) } func (s *VpcServiceV2) VpcIpv4CidrBlockStateRefreshFunc(id string, field string, failStates []string) resource.StateRefreshFunc { return func() (interface{}, string, error) { object, err := s.DescribeVpcIpv4CidrBlock(id) if err != nil { if NotFoundError(err) { return object, "", nil } return nil, "", WrapError(err) } v, err := jsonpath.Get(field, object) currentStatus := fmt.Sprint(v) if strings.HasPrefix(field, "#") { v, _ := jsonpath.Get(strings.TrimPrefix(field, "#"), object) if v != nil { currentStatus = "#CHECKSET" } } for _, failState := range failStates { if currentStatus == failState { return object, currentStatus, WrapError(Error(FailedToReachTargetStatus, currentStatus)) } } return object, currentStatus, nil } } // DescribeVpcIpv4CidrBlock >>> Encapsulated. // DescribeVpcIpv6Address <<< Encapsulated get interface for Vpc Ipv6Address. func (s *VpcServiceV2) DescribeVpcIpv6Address(id string) (object map[string]interface{}, err error) { client := s.client var request map[string]interface{} var response map[string]interface{} var query map[string]interface{} request = make(map[string]interface{}) query = make(map[string]interface{}) request["Ipv6AddressId"] = id request["RegionId"] = client.RegionId action := "DescribeIpv6Addresses" wait := incrementalWait(3*time.Second, 5*time.Second) err = resource.Retry(1*time.Minute, func() *resource.RetryError { response, err = client.RpcPost("Vpc", "2016-04-28", action, query, 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("$.Ipv6Addresses.Ipv6Address[*]", response) if err != nil { return object, WrapErrorf(NotFoundErr("Ipv6Address", id), NotFoundMsg, response) } if len(v.([]interface{})) == 0 { return object, WrapErrorf(NotFoundErr("Ipv6Address", id), NotFoundMsg, response) } currentStatus := v.([]interface{})[0].(map[string]interface{})["Status"] if currentStatus == nil { return object, WrapErrorf(NotFoundErr("Ipv6Address", id), NotFoundMsg, response) } return v.([]interface{})[0].(map[string]interface{}), nil } func (s *VpcServiceV2) VpcIpv6AddressStateRefreshFunc(id string, field string, failStates []string) resource.StateRefreshFunc { return func() (interface{}, string, error) { object, err := s.DescribeVpcIpv6Address(id) if err != nil { if NotFoundError(err) { return nil, "", nil } return nil, "", WrapError(err) } v, err := jsonpath.Get(field, object) currentStatus := fmt.Sprint(v) if strings.HasPrefix(field, "#") { v, _ := jsonpath.Get(strings.TrimPrefix(field, "#"), object) if v != nil { currentStatus = "#CHECKSET" } } for _, failState := range failStates { if currentStatus == failState { return object, currentStatus, WrapError(Error(FailedToReachTargetStatus, currentStatus)) } } return object, currentStatus, nil } } // DescribeVpcIpv6Address >>> Encapsulated. // DescribeVpcRouteEntry <<< Encapsulated get interface for Vpc RouteEntry. func (s *VpcServiceV2) DescribeVpcRouteEntry(id string) (object map[string]interface{}, err error) { client := s.client var request map[string]interface{} var response map[string]interface{} var query map[string]interface{} parts := strings.Split(id, ":") if len(parts) != 2 { err = WrapError(fmt.Errorf("invalid Resource Id %s. Expected parts' length %d, got %d", id, 2, len(parts))) } request = make(map[string]interface{}) query = make(map[string]interface{}) request["DestinationCidrBlock"] = parts[1] request["RouteTableId"] = parts[0] request["RegionId"] = client.RegionId action := "DescribeRouteEntryList" wait := incrementalWait(3*time.Second, 5*time.Second) err = resource.Retry(1*time.Minute, func() *resource.RetryError { response, err = client.RpcPost("Vpc", "2016-04-28", action, query, 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{"InvalidRouteTable.NotFound"}) { return object, WrapErrorf(NotFoundErr("RouteEntry", id), NotFoundMsg, response) } return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR) } v, err := jsonpath.Get("$.RouteEntrys.RouteEntry[*]", response) if err != nil { return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.RouteEntrys.RouteEntry[*]", response) } if len(v.([]interface{})) == 0 { return object, WrapErrorf(NotFoundErr("RouteEntry", id), NotFoundMsg, response) } return v.([]interface{})[0].(map[string]interface{}), nil } func (s *VpcServiceV2) DescribeRouteEntryListVpcPublishedRouteEntries(id string) (object map[string]interface{}, err error) { client := s.client var request map[string]interface{} var response map[string]interface{} var query map[string]interface{} parts := strings.Split(id, ":") if len(parts) != 2 { err = WrapError(fmt.Errorf("invalid Resource Id %s. Expected parts' length %d, got %d", id, 2, len(parts))) } request = make(map[string]interface{}) query = make(map[string]interface{}) request["DestinationCidrBlock"] = parts[1] request["RouteTableId"] = parts[0] request["RegionId"] = client.RegionId request["TargetType"] = "ECR" action := "ListVpcPublishedRouteEntries" wait := incrementalWait(3*time.Second, 5*time.Second) err = resource.Retry(1*time.Minute, func() *resource.RetryError { response, err = client.RpcPost("Vpc", "2016-04-28", action, query, 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("$.RouteEntries[*]", response) if err != nil { return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.RouteEntries[*]", response) } if len(v.([]interface{})) == 0 { return object, WrapErrorf(NotFoundErr("RouteEntry", id), NotFoundMsg, response) } return v.([]interface{})[0].(map[string]interface{}), nil } func (s *VpcServiceV2) VpcRouteEntryStateRefreshFunc(id string, field string, failStates []string) resource.StateRefreshFunc { return func() (interface{}, string, error) { object, err := s.DescribeVpcRouteEntry(id) if err != nil { if NotFoundError(err) { return nil, "", nil } return nil, "", WrapError(err) } v, err := jsonpath.Get(field, object) currentStatus := fmt.Sprint(v) if strings.HasPrefix(field, "#") { v, _ := jsonpath.Get(strings.TrimPrefix(field, "#"), object) if v != nil { currentStatus = "#CHECKSET" } } for _, failState := range failStates { if currentStatus == failState { return object, currentStatus, WrapError(Error(FailedToReachTargetStatus, currentStatus)) } } return object, currentStatus, nil } } // DescribeVpcRouteEntry >>> Encapsulated.