alicloud/service_alicloud_sag.go (735 lines of code) (raw):

package alicloud import ( "fmt" "time" "github.com/PaesslerAG/jsonpath" "github.com/aliyun/alibaba-cloud-sdk-go/services/smartag" "github.com/aliyun/terraform-provider-alicloud/alicloud/connectivity" "github.com/hashicorp/terraform-plugin-sdk/helper/resource" ) type SagService struct { client *connectivity.AliyunClient } func (s *SagService) DescribeCloudConnectNetwork(id string) (c smartag.CloudConnectNetwork, err error) { request := smartag.CreateDescribeCloudConnectNetworksRequest() request.RegionId = s.client.RegionId request.CcnId = id var raw interface{} err = resource.Retry(5*time.Minute, func() *resource.RetryError { raw, err = s.client.WithSagClient(func(ccnClient *smartag.Client) (interface{}, error) { return ccnClient.DescribeCloudConnectNetworks(request) }) if err != nil { if IsExpectedErrors(err, []string{AliyunGoClientFailure, "ServiceUnavailable", Throttling, "Throttling.User"}) { time.Sleep(DefaultIntervalShort * time.Second) return resource.RetryableError(err) } return resource.NonRetryableError(err) } addDebug(request.GetActionName(), raw, request.RpcRequest, request) return nil }) if err != nil { if IsExpectedErrors(err, []string{"CcnNotExist"}) { return c, WrapErrorf(err, NotFoundMsg, AlibabaCloudSdkGoERROR) } return c, WrapErrorf(err, DefaultErrorMsg, id, request.GetActionName(), AlibabaCloudSdkGoERROR) } response, _ := raw.(*smartag.DescribeCloudConnectNetworksResponse) if len(response.CloudConnectNetworks.CloudConnectNetwork) <= 0 || response.CloudConnectNetworks.CloudConnectNetwork[0].CcnId != id { return c, WrapErrorf(NotFoundErr("CloudConnectNetwork ", id), NotFoundMsg, ProviderERROR) } c = response.CloudConnectNetworks.CloudConnectNetwork[0] return c, nil } func (s *SagService) DescribeCloudConnectNetworkGrant(id string) (c smartag.GrantRule, err error) { parts, err := ParseResourceId(id, 2) if err != nil { return c, WrapError(err) } request := smartag.CreateDescribeGrantRulesRequest() request.RegionId = s.client.RegionId request.AssociatedCcnId = parts[0] var raw interface{} err = resource.Retry(5*time.Minute, func() *resource.RetryError { raw, err = s.client.WithSagClient(func(ccnClient *smartag.Client) (interface{}, error) { return ccnClient.DescribeGrantRules(request) }) if err != nil { if IsExpectedErrors(err, []string{AliyunGoClientFailure, "ServiceUnavailable", Throttling, "Throttling.User"}) { time.Sleep(DefaultIntervalShort * time.Second) return resource.RetryableError(err) } return resource.NonRetryableError(err) } addDebug(request.GetActionName(), raw, request.RpcRequest, request) return nil }) if err != nil { if IsExpectedErrors(err, []string{"CcnNotExist"}) { return c, WrapErrorf(err, NotFoundMsg, AlibabaCloudSdkGoERROR) } return c, WrapErrorf(err, DefaultErrorMsg, id, request.GetActionName(), AlibabaCloudSdkGoERROR) } response, _ := raw.(*smartag.DescribeGrantRulesResponse) for _, value := range response.GrantRules.GrantRule { if value.CcnInstanceId == parts[0] && value.CenInstanceId == parts[1] { return value, nil } } return c, WrapErrorf(NotFoundErr("CloudConnectNetworkGrant", id), NotFoundMsg, ProviderERROR) } func (s *SagService) DescribeCloudConnectNetworkAttachment(id string) (c smartag.SmartAccessGateway, err error) { parts, err := ParseResourceId(id, 2) if err != nil { return c, WrapError(err) } ccnId := parts[0] sagId := parts[1] request := smartag.CreateDescribeSmartAccessGatewaysRequest() request.RegionId = s.client.RegionId request.SmartAGId = sagId var raw interface{} err = resource.Retry(5*time.Minute, func() *resource.RetryError { raw, err = s.client.WithSagClient(func(ccnClient *smartag.Client) (interface{}, error) { return ccnClient.DescribeSmartAccessGateways(request) }) if err != nil { if IsExpectedErrors(err, []string{AliyunGoClientFailure, "ServiceUnavailable", Throttling, "Throttling.User"}) { time.Sleep(DefaultIntervalShort * time.Second) return resource.RetryableError(err) } return resource.NonRetryableError(err) } addDebug(request.GetActionName(), raw, request.RpcRequest, request) return nil }) if err != nil { if IsExpectedErrors(err, []string{"SmartAccessGatewayNotExist"}) { return c, WrapErrorf(err, NotFoundMsg, AlibabaCloudSdkGoERROR) } return c, WrapErrorf(err, DefaultErrorMsg, id, request.GetActionName(), AlibabaCloudSdkGoERROR) } response, _ := raw.(*smartag.DescribeSmartAccessGatewaysResponse) if len(response.SmartAccessGateways.SmartAccessGateway) <= 0 || response.SmartAccessGateways.SmartAccessGateway[0].AssociatedCcnId != ccnId || response.SmartAccessGateways.SmartAccessGateway[0].SmartAGId != sagId { return c, WrapErrorf(NotFoundErr("SmartAccessGatewayAttachment", id), NotFoundMsg, ProviderERROR) } c = response.SmartAccessGateways.SmartAccessGateway[0] return c, nil } func (s *SagService) DescribeSagAcl(id string) (c smartag.Acl, err error) { request := smartag.CreateDescribeACLsRequest() request.RegionId = s.client.RegionId request.AclIds = id var raw interface{} err = resource.Retry(5*time.Minute, func() *resource.RetryError { raw, err = s.client.WithSagClient(func(sagClient *smartag.Client) (interface{}, error) { return sagClient.DescribeACLs(request) }) if err != nil { if IsExpectedErrors(err, []string{AliyunGoClientFailure, "ServiceUnavailable", Throttling, "Throttling.User"}) { time.Sleep(DefaultIntervalShort * time.Second) return resource.RetryableError(err) } return resource.NonRetryableError(err) } addDebug(request.GetActionName(), raw, request.RpcRequest, request) return nil }) if err != nil { if IsExpectedErrors(err, []string{"SagAclNotExist"}) { return c, WrapErrorf(err, NotFoundMsg, AlibabaCloudSdkGoERROR) } return c, WrapErrorf(err, DefaultErrorMsg, id, request.GetActionName(), AlibabaCloudSdkGoERROR) } response, _ := raw.(*smartag.DescribeACLsResponse) if len(response.Acls.Acl) <= 0 || response.Acls.Acl[0].AclId != id { return c, WrapErrorf(NotFoundErr("Sag Acl", id), NotFoundMsg, ProviderERROR) } c = response.Acls.Acl[0] return c, nil } func (s *SagService) DescribeSagAclRule(id string) (c smartag.Acr, err error) { parts, err := ParseResourceId(id, 2) if err != nil { return c, WrapError(err) } request := smartag.CreateDescribeACLAttributeRequest() request.RegionId = s.client.RegionId request.AclId = parts[0] var raw interface{} err = resource.Retry(5*time.Minute, func() *resource.RetryError { raw, err = s.client.WithSagClient(func(sagClient *smartag.Client) (interface{}, error) { return sagClient.DescribeACLAttribute(request) }) if err != nil { if IsExpectedErrors(err, []string{AliyunGoClientFailure, "ServiceUnavailable", Throttling, "Throttling.User"}) { time.Sleep(DefaultIntervalShort * time.Second) return resource.RetryableError(err) } return resource.NonRetryableError(err) } addDebug(request.GetActionName(), raw, request.RpcRequest, request) return nil }) if err != nil { if IsExpectedErrors(err, []string{"SagAclRuleNotExist"}) { return c, WrapErrorf(err, NotFoundMsg, AlibabaCloudSdkGoERROR) } return c, WrapErrorf(err, DefaultErrorMsg, id, request.GetActionName(), AlibabaCloudSdkGoERROR) } response, _ := raw.(*smartag.DescribeACLAttributeResponse) for _, value := range response.Acrs.Acr { if value.AcrId == parts[1] { return value, nil } } return c, WrapErrorf(NotFoundErr("Sag Acl Rule", id), NotFoundMsg, ProviderERROR) } func (s *SagService) DescribeSagClientUser(id string) (c smartag.User, err error) { parts, err := ParseResourceId(id, 2) if err != nil { return c, WrapError(err) } request := smartag.CreateDescribeSmartAccessGatewayClientUsersRequest() request.RegionId = s.client.RegionId request.SmartAGId = parts[0] var raw interface{} err = resource.Retry(5*time.Minute, func() *resource.RetryError { raw, err = s.client.WithSagClient(func(sagClient *smartag.Client) (interface{}, error) { return sagClient.DescribeSmartAccessGatewayClientUsers(request) }) if err != nil { if IsExpectedErrors(err, []string{AliyunGoClientFailure, "ServiceUnavailable", Throttling, "Throttling.User"}) { time.Sleep(DefaultIntervalShort * time.Second) return resource.RetryableError(err) } return resource.NonRetryableError(err) } addDebug(request.GetActionName(), raw, request.RpcRequest, request) return nil }) if err != nil { if IsExpectedErrors(err, []string{"SagClientUserNotExist"}) { return c, WrapErrorf(err, NotFoundMsg, AlibabaCloudSdkGoERROR) } return c, WrapErrorf(err, DefaultErrorMsg, id, request.GetActionName(), AlibabaCloudSdkGoERROR) } response, _ := raw.(*smartag.DescribeSmartAccessGatewayClientUsersResponse) for _, value := range response.Users.User { if value.UserName == parts[1] { return value, nil } } return c, WrapErrorf(NotFoundErr("Sag Client User", id), NotFoundMsg, ProviderERROR) } func (s *SagService) DescribeSagSnatEntry(id string) (c smartag.SnatEntry, err error) { parts, err := ParseResourceId(id, 2) if err != nil { return c, WrapError(err) } request := smartag.CreateDescribeSnatEntriesRequest() request.RegionId = s.client.RegionId request.SmartAGId = parts[0] var raw interface{} err = resource.Retry(5*time.Minute, func() *resource.RetryError { raw, err = s.client.WithSagClient(func(sagClient *smartag.Client) (interface{}, error) { return sagClient.DescribeSnatEntries(request) }) if err != nil { if IsExpectedErrors(err, []string{AliyunGoClientFailure, "ServiceUnavailable", Throttling, "Throttling.User"}) { time.Sleep(DefaultIntervalShort * time.Second) return resource.RetryableError(err) } return resource.NonRetryableError(err) } addDebug(request.GetActionName(), raw, request.RpcRequest, request) return nil }) if err != nil { if IsExpectedErrors(err, []string{"SnatEntryiesNotExist"}) { return c, WrapErrorf(err, NotFoundMsg, AlibabaCloudSdkGoERROR) } return c, WrapErrorf(err, DefaultErrorMsg, id, request.GetActionName(), AlibabaCloudSdkGoERROR) } response, _ := raw.(*smartag.DescribeSnatEntriesResponse) for _, value := range response.SnatEntries.SnatEntry { if value.InstanceId == parts[1] { return value, nil } } return c, WrapErrorf(NotFoundErr("sag_snat_entry", id), NotFoundMsg, ProviderERROR) } func (s *SagService) DescribeSagDnatEntry(id string) (c smartag.DnatEntry, err error) { parts, err := ParseResourceId(id, 2) if err != nil { return c, WrapError(err) } request := smartag.CreateDescribeDnatEntriesRequest() request.RegionId = s.client.RegionId request.SagId = parts[0] var raw interface{} err = resource.Retry(5*time.Minute, func() *resource.RetryError { raw, err = s.client.WithSagClient(func(sagClient *smartag.Client) (interface{}, error) { return sagClient.DescribeDnatEntries(request) }) if err != nil { if IsExpectedErrors(err, []string{AliyunGoClientFailure, "ServiceUnavailable", Throttling, "Throttling.User"}) { time.Sleep(DefaultIntervalShort * time.Second) return resource.RetryableError(err) } return resource.NonRetryableError(err) } addDebug(request.GetActionName(), raw, request.RpcRequest, request) return nil }) if err != nil { if IsExpectedErrors(err, []string{"DnatEntryiesNotExist"}) { return c, WrapErrorf(err, NotFoundMsg, AlibabaCloudSdkGoERROR) } return c, WrapErrorf(err, DefaultErrorMsg, id, request.GetActionName(), AlibabaCloudSdkGoERROR) } response, _ := raw.(*smartag.DescribeDnatEntriesResponse) for _, value := range response.DnatEntries.DnatEntry { if value.DnatEntryId == parts[1] { return value, nil } } return c, WrapErrorf(NotFoundErr("sag_dnat_entry", id), NotFoundMsg, ProviderERROR) } func (s *SagService) DescribeSagQos(id string) (c smartag.Qos, err error) { request := smartag.CreateDescribeQosesRequest() request.RegionId = s.client.RegionId request.QosIds = id var raw interface{} err = resource.Retry(5*time.Minute, func() *resource.RetryError { raw, err = s.client.WithSagClient(func(sagClient *smartag.Client) (interface{}, error) { return sagClient.DescribeQoses(request) }) if err != nil { if IsExpectedErrors(err, []string{AliyunGoClientFailure, "ServiceUnavailable", Throttling, "Throttling.User"}) { time.Sleep(DefaultIntervalShort * time.Second) return resource.RetryableError(err) } return resource.NonRetryableError(err) } addDebug(request.GetActionName(), raw, request.RpcRequest, request) return nil }) if err != nil { if IsExpectedErrors(err, []string{"SagQosNotExist"}) { return c, WrapErrorf(err, NotFoundMsg, AlibabaCloudSdkGoERROR) } return c, WrapErrorf(err, DefaultErrorMsg, id, request.GetActionName(), AlibabaCloudSdkGoERROR) } response, _ := raw.(*smartag.DescribeQosesResponse) if len(response.Qoses.Qos) <= 0 || response.Qoses.Qos[0].QosId != id { return c, WrapErrorf(NotFoundErr("Sag Qos", id), NotFoundMsg, ProviderERROR) } c = response.Qoses.Qos[0] return c, nil } func (s *SagService) DescribeSagQosPolicy(id string) (c smartag.QosPolicy, err error) { parts, err := ParseResourceId(id, 2) if err != nil { return c, WrapError(err) } request := smartag.CreateDescribeQosPoliciesRequest() request.RegionId = s.client.RegionId request.QosId = parts[0] request.QosPolicyId = parts[1] var raw interface{} err = resource.Retry(5*time.Minute, func() *resource.RetryError { raw, err = s.client.WithSagClient(func(sagClient *smartag.Client) (interface{}, error) { return sagClient.DescribeQosPolicies(request) }) if err != nil { if IsExpectedErrors(err, []string{AliyunGoClientFailure, "ServiceUnavailable", Throttling, "Throttling.User"}) { time.Sleep(DefaultIntervalShort * time.Second) return resource.RetryableError(err) } return resource.NonRetryableError(err) } addDebug(request.GetActionName(), raw, request.RpcRequest, request) return nil }) if err != nil { if IsExpectedErrors(err, []string{"SagQosPolicyNotExist"}) { return c, WrapErrorf(err, NotFoundMsg, AlibabaCloudSdkGoERROR) } return c, WrapErrorf(err, DefaultErrorMsg, id, request.GetActionName(), AlibabaCloudSdkGoERROR) } response, _ := raw.(*smartag.DescribeQosPoliciesResponse) if len(response.QosPolicies.QosPolicy) <= 0 || response.QosPolicies.QosPolicy[0].QosPolicyId != parts[1] { return c, WrapErrorf(NotFoundErr("Sag Qos Policy", id), NotFoundMsg, ProviderERROR) } c = response.QosPolicies.QosPolicy[0] return c, nil } func (s *SagService) DescribeSagQosCar(id string) (c smartag.QosCar, err error) { parts, err := ParseResourceId(id, 2) if err != nil { return c, WrapError(err) } request := smartag.CreateDescribeQosCarsRequest() request.RegionId = s.client.RegionId request.QosId = parts[0] request.QosCarId = parts[1] var raw interface{} err = resource.Retry(5*time.Minute, func() *resource.RetryError { raw, err = s.client.WithSagClient(func(sagClient *smartag.Client) (interface{}, error) { return sagClient.DescribeQosCars(request) }) if err != nil { if IsExpectedErrors(err, []string{AliyunGoClientFailure, "ServiceUnavailable", Throttling, "Throttling.User"}) { time.Sleep(DefaultIntervalShort * time.Second) return resource.RetryableError(err) } return resource.NonRetryableError(err) } addDebug(request.GetActionName(), raw, request.RpcRequest, request) return nil }) if err != nil { if IsExpectedErrors(err, []string{"SagQosCarNotExist"}) { return c, WrapErrorf(err, NotFoundMsg, AlibabaCloudSdkGoERROR) } return c, WrapErrorf(err, DefaultErrorMsg, id, request.GetActionName(), AlibabaCloudSdkGoERROR) } response, _ := raw.(*smartag.DescribeQosCarsResponse) if len(response.QosCars.QosCar) <= 0 || response.QosCars.QosCar[0].QosCarId != parts[1] { return c, WrapErrorf(NotFoundErr("Sag Qos Car", id), NotFoundMsg, ProviderERROR) } c = response.QosCars.QosCar[0] return c, nil } func (s *SagService) WaitForCloudConnectNetwork(id string, status Status, timeout int) error { deadline := time.Now().Add(time.Duration(timeout) * time.Second) for { object, err := s.DescribeCloudConnectNetwork(id) if err != nil { if NotFoundError(err) { if status == Deleted { return nil } } return WrapError(err) } if object.CcnId == id && status != Deleted { break } if time.Now().After(deadline) { return WrapErrorf(err, WaitTimeoutMsg, id, GetFunc(1), timeout, object.CcnId, id, ProviderERROR) } time.Sleep(DefaultIntervalShort * time.Second) } return nil } func (s *SagService) WaitForCloudConnectNetworkGrant(id string, status Status, timeout int) error { deadline := time.Now().Add(time.Duration(timeout) * time.Second) parts, err := ParseResourceId(id, 2) if err != nil { return WrapError(err) } for { object, err := s.DescribeCloudConnectNetworkGrant(id) if err != nil { if NotFoundError(err) { if status == Deleted { return nil } } return WrapError(err) } if object.CenInstanceId == parts[1] && status != Deleted { break } if time.Now().After(deadline) { return WrapErrorf(err, WaitTimeoutMsg, id, GetFunc(1), timeout, object.CenInstanceId, parts[1], ProviderERROR) } time.Sleep(DefaultIntervalShort * time.Second) } return nil } func (s *SagService) WaitForCloudConnectNetworkAttachment(id string, status Status, timeout int) error { deadline := time.Now().Add(time.Duration(timeout) * time.Second) parts, err := ParseResourceId(id, 2) if err != nil { return WrapError(err) } ccnId := parts[0] for { object, err := s.DescribeCloudConnectNetworkAttachment(id) if err != nil { if NotFoundError(err) { if status == Deleted { return nil } } return WrapError(err) } if object.AssociatedCcnId == ccnId && status != Deleted { break } if time.Now().After(deadline) { return WrapErrorf(err, WaitTimeoutMsg, id, GetFunc(1), timeout, object.AssociatedCcnId, ccnId, ProviderERROR) } time.Sleep(DefaultIntervalShort * time.Second) } return nil } func (s *SagService) WaitForSagAcl(id string, status Status, timeout int) error { deadline := time.Now().Add(time.Duration(timeout) * time.Second) for { object, err := s.DescribeSagAcl(id) if err != nil { if NotFoundError(err) { if status == Deleted { return nil } } return WrapError(err) } if object.AclId == id && status != Deleted { break } if time.Now().After(deadline) { return WrapErrorf(err, WaitTimeoutMsg, id, GetFunc(1), timeout, object.AclId, id, ProviderERROR) } time.Sleep(DefaultIntervalShort * time.Second) } return nil } func (s *SagService) WaitForSagAclRule(id string, status Status, timeout int) error { deadline := time.Now().Add(time.Duration(timeout) * time.Second) parts, err := ParseResourceId(id, 2) if err != nil { return WrapError(err) } for { object, err := s.DescribeSagAclRule(id) if err != nil { if NotFoundError(err) { if status == Deleted { return nil } } return WrapError(err) } if object.AcrId == parts[1] && status != Deleted { break } if time.Now().After(deadline) { return WrapErrorf(err, WaitTimeoutMsg, id, GetFunc(1), timeout, object.AcrId, parts[1], ProviderERROR) } time.Sleep(DefaultIntervalShort * time.Second) } return nil } func (s *SagService) WaitForSagQos(id string, status Status, timeout int) error { deadline := time.Now().Add(time.Duration(timeout) * time.Second) for { object, err := s.DescribeSagQos(id) if err != nil { if NotFoundError(err) { if status == Deleted { return nil } } return WrapError(err) } if object.QosId == id && status != Deleted { break } if time.Now().After(deadline) { return WrapErrorf(err, WaitTimeoutMsg, id, GetFunc(1), timeout, object.QosId, id, ProviderERROR) } time.Sleep(DefaultIntervalShort * time.Second) } return nil } func (s *SagService) WaitForSagQosPolicy(id string, status Status, timeout int) error { parts, err := ParseResourceId(id, 2) if err != nil { return WrapError(err) } deadline := time.Now().Add(time.Duration(timeout) * time.Second) for { object, err := s.DescribeSagQosPolicy(id) if err != nil { if NotFoundError(err) { if status == Deleted { return nil } } return WrapError(err) } if object.QosPolicyId == parts[1] && status != Deleted { break } if time.Now().After(deadline) { return WrapErrorf(err, WaitTimeoutMsg, id, GetFunc(1), timeout, object.QosPolicyId, parts[1], ProviderERROR) } time.Sleep(DefaultIntervalShort * time.Second) } return nil } func (s *SagService) WaitForSagQosCar(id string, status Status, timeout int) error { parts, err := ParseResourceId(id, 2) if err != nil { return WrapError(err) } deadline := time.Now().Add(time.Duration(timeout) * time.Second) for { object, err := s.DescribeSagQosCar(id) if err != nil { if NotFoundError(err) { if status == Deleted { return nil } } return WrapError(err) } if object.QosCarId == parts[1] && status != Deleted { break } if time.Now().After(deadline) { return WrapErrorf(err, WaitTimeoutMsg, id, GetFunc(1), timeout, object.QosCarId, parts[1], ProviderERROR) } time.Sleep(DefaultIntervalShort * time.Second) } return nil } func (s *SagService) WaitForSagSnatEntry(id string, status Status, timeout int) error { deadline := time.Now().Add(time.Duration(timeout) * time.Second) parts, err := ParseResourceId(id, 2) if err != nil { return WrapError(err) } for { object, err := s.DescribeSagSnatEntry(id) if err != nil { if NotFoundError(err) { if status == Deleted { return nil } } return WrapError(err) } if object.InstanceId == parts[1] && status != Deleted { break } if time.Now().After(deadline) { return WrapErrorf(err, WaitTimeoutMsg, id, GetFunc(1), timeout, object.InstanceId, parts[1], ProviderERROR) } time.Sleep(DefaultIntervalShort * time.Second) } return nil } func (s *SagService) WaitForSagDnatEntry(id string, status Status, timeout int) error { deadline := time.Now().Add(time.Duration(timeout) * time.Second) parts, err := ParseResourceId(id, 2) if err != nil { return WrapError(err) } for { object, err := s.DescribeSagDnatEntry(id) if err != nil { if NotFoundError(err) { if status == Deleted { return nil } } return WrapError(err) } if object.DnatEntryId == parts[1] && status != Deleted { break } if time.Now().After(deadline) { return WrapErrorf(err, WaitTimeoutMsg, id, GetFunc(1), timeout, object.DnatEntryId, parts[1], ProviderERROR) } time.Sleep(DefaultIntervalShort * time.Second) } return nil } func (s *SagService) WaitForSagClientUser(id string, status Status, timeout int) error { deadline := time.Now().Add(time.Duration(timeout) * time.Second) parts, err := ParseResourceId(id, 2) if err != nil { return WrapError(err) } for { object, err := s.DescribeSagClientUser(id) if err != nil { if NotFoundError(err) { if status == Deleted { return nil } } return WrapError(err) } if object.UserName == parts[1] && status != Deleted { break } if time.Now().After(deadline) { return WrapErrorf(err, WaitTimeoutMsg, id, GetFunc(1), timeout, object.UserName, parts[1], ProviderERROR) } time.Sleep(DefaultIntervalShort * time.Second) } return nil } func (s *SagService) DescribeSmartagFlowLog(id string) (object map[string]interface{}, err error) { var response map[string]interface{} client := s.client action := "DescribeFlowLogs" request := map[string]interface{}{ "RegionId": s.client.RegionId, "FlowLogId": id, } wait := incrementalWait(3*time.Second, 3*time.Second) err = resource.Retry(5*time.Minute, func() *resource.RetryError { response, err = client.RpcPost("Smartag", "2018-03-13", 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("$.FlowLogs.FlowLogSetType", response) if err != nil { return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.FlowLogs.FlowLogSetType", response) } if len(v.([]interface{})) < 1 { return object, WrapErrorf(NotFoundErr("Smartag", id), NotFoundWithResponse, response) } else { if fmt.Sprint(v.([]interface{})[0].(map[string]interface{})["FlowLogId"]) != id { return object, WrapErrorf(NotFoundErr("Smartag", id), NotFoundWithResponse, response) } } object = v.([]interface{})[0].(map[string]interface{}) return object, nil } func (s *SagService) SmartagFlowLogStateRefreshFunc(id string, failStates []string) resource.StateRefreshFunc { return func() (interface{}, string, error) { object, err := s.DescribeSmartagFlowLog(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 } }