alicloud/service_alicloud_pai_flow_v2.go (68 lines of code) (raw):
package alicloud
import (
"fmt"
"github.com/PaesslerAG/jsonpath"
"github.com/aliyun/terraform-provider-alicloud/alicloud/connectivity"
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
"strings"
"time"
)
type PaiFlowServiceV2 struct {
client *connectivity.AliyunClient
}
// DescribePaiFlowPipeline <<< Encapsulated get interface for PaiFlow Pipeline.
func (s *PaiFlowServiceV2) DescribePaiFlowPipeline(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]*string
PipelineId := id
request = make(map[string]interface{})
query = make(map[string]*string)
request["PipelineId"] = id
action := fmt.Sprintf("/api/v1/pipelines/%s", PipelineId)
wait := incrementalWait(3*time.Second, 5*time.Second)
err = resource.Retry(1*time.Minute, func() *resource.RetryError {
response, err = client.RoaGet("PAIFlow", "2021-02-02", action, query, nil, nil)
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{"200200004"}) {
return object, WrapErrorf(NotFoundErr("Pipeline", id), NotFoundMsg, response)
}
return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR)
}
return response, nil
}
func (s *PaiFlowServiceV2) PaiFlowPipelineStateRefreshFunc(id string, field string, failStates []string) resource.StateRefreshFunc {
return func() (interface{}, string, error) {
object, err := s.DescribePaiFlowPipeline(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
}
}
// DescribePaiFlowPipeline >>> Encapsulated.