alicloud/service_alicloud_gpdb_v2.go (760 lines of code) (raw):

package alicloud import ( "fmt" "strings" "time" "github.com/PaesslerAG/jsonpath" "github.com/aliyun/terraform-provider-alicloud/alicloud/connectivity" "github.com/blues/jsonata-go" "github.com/hashicorp/terraform-plugin-sdk/helper/resource" ) type GpdbServiceV2 struct { client *connectivity.AliyunClient } // DescribeGpdbLogBackup <<< Encapsulated get interface for Gpdb LogBackup. func (s *GpdbServiceV2) DescribeGpdbLogBackup(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 := "DescribeLogBackups" request = make(map[string]interface{}) query = make(map[string]interface{}) query["DBInstanceId"] = parts[0] wait := incrementalWait(3*time.Second, 5*time.Second) err = resource.Retry(1*time.Minute, func() *resource.RetryError { response, err = client.RpcPost("gpdb", "2016-05-03", 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("LogBackup", id), NotFoundMsg, response) } return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR) } v, err := jsonpath.Get("$.Items[*]", response) if err != nil { return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.Items[*]", response) } if len(v.([]interface{})) == 0 { return object, WrapErrorf(NotFoundErr("LogBackup", id), NotFoundMsg, response) } result, _ := v.([]interface{}) for _, v := range result { item := v.(map[string]interface{}) if item["DBInstanceId"] != parts[0] { continue } if item["BackupId"] != parts[1] { continue } return item, nil } return object, WrapErrorf(NotFoundErr("LogBackup", id), NotFoundMsg, response) } func (s *GpdbServiceV2) GpdbLogBackupStateRefreshFunc(id string, field string, failStates []string) resource.StateRefreshFunc { return func() (interface{}, string, error) { object, err := s.DescribeGpdbLogBackup(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 } } // DescribeGpdbLogBackup >>> Encapsulated. // DescribeGpdbBackupPolicy <<< Encapsulated get interface for Gpdb BackupPolicy. func (s *GpdbServiceV2) DescribeGpdbBackupPolicy(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 := "DescribeBackupPolicy" request = make(map[string]interface{}) query = make(map[string]interface{}) query["DBInstanceId"] = id wait := incrementalWait(3*time.Second, 5*time.Second) err = resource.Retry(1*time.Minute, func() *resource.RetryError { response, err = client.RpcPost("gpdb", "2016-05-03", 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("BackupPolicy", id), NotFoundMsg, response) } return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR) } return response, nil } func (s *GpdbServiceV2) GpdbBackupPolicyStateRefreshFunc(id string, field string, failStates []string) resource.StateRefreshFunc { return func() (interface{}, string, error) { object, err := s.DescribeGpdbBackupPolicy(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 } } // DescribeGpdbBackupPolicy >>> Encapsulated. // DescribeGpdbDbResourceGroup <<< Encapsulated get interface for Gpdb DbResourceGroup. func (s *GpdbServiceV2) DescribeGpdbDbResourceGroup(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 := "DescribeDBResourceGroup" request = make(map[string]interface{}) query = make(map[string]interface{}) query["DBInstanceId"] = parts[0] query["ResourceGroupName"] = parts[1] wait := incrementalWait(3*time.Second, 5*time.Second) err = resource.Retry(1*time.Minute, func() *resource.RetryError { response, err = client.RpcPost("gpdb", "2016-05-03", 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("$.ResourceGroupItems.ResourceGroupItem[*]", response) if err != nil { return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.ResourceGroupItems.ResourceGroupItem[*]", response) } if len(v.([]interface{})) == 0 { return object, WrapErrorf(NotFoundErr("DbResourceGroup", id), NotFoundMsg, response) } return v.([]interface{})[0].(map[string]interface{}), nil } func (s *GpdbServiceV2) GpdbDbResourceGroupStateRefreshFunc(id string, field string, failStates []string) resource.StateRefreshFunc { return func() (interface{}, string, error) { object, err := s.DescribeGpdbDbResourceGroup(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 field == "ResourceGroupConfig" { currentStatus, _ = normalizeJsonString(v) } for _, failState := range failStates { if currentStatus == failState { return object, currentStatus, WrapError(Error(FailedToReachTargetStatus, currentStatus)) } } return object, currentStatus, nil } } // DescribeGpdbDbResourceGroup >>> Encapsulated. // DescribeGpdbRemoteADBDataSource <<< Encapsulated get interface for Gpdb RemoteADBDataSource. func (s *GpdbServiceV2) DescribeGpdbRemoteADBDataSource(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 := "ListRemoteADBDataSources" request = make(map[string]interface{}) query = make(map[string]interface{}) query["DBInstanceId"] = parts[0] query["DataSourceId"] = parts[1] wait := incrementalWait(3*time.Second, 5*time.Second) err = resource.Retry(1*time.Minute, func() *resource.RetryError { response, err = client.RpcPost("gpdb", "2016-05-03", 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("$.DataSourceItems.RemoteDataSources[*]", response) if err != nil { return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.DataSourceItems.RemoteDataSources[*]", response) } if len(v.([]interface{})) == 0 { return object, WrapErrorf(NotFoundErr("RemoteADBDataSource", id), NotFoundMsg, response) } currentStatus := v.([]interface{})[0].(map[string]interface{})["Id"] if currentStatus == "" { return object, WrapErrorf(NotFoundErr("RemoteADBDataSource", id), NotFoundMsg, response) } return v.([]interface{})[0].(map[string]interface{}), nil } func (s *GpdbServiceV2) GpdbRemoteADBDataSourceStateRefreshFunc(id string, field string, failStates []string) resource.StateRefreshFunc { return func() (interface{}, string, error) { object, err := s.DescribeGpdbRemoteADBDataSource(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 } } // DescribeGpdbRemoteADBDataSource >>> Encapsulated. // DescribeGpdbExternalDataService <<< Encapsulated get interface for Gpdb ExternalDataService. func (s *GpdbServiceV2) DescribeGpdbExternalDataService(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 := "DescribeExternalDataService" request = make(map[string]interface{}) query = make(map[string]interface{}) query["DBInstanceId"] = parts[0] query["ServiceId"] = parts[1] 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("gpdb", "2016-05-03", 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{"ExternalService.NotFound"}) { return object, WrapErrorf(NotFoundErr("ExternalDataService", id), NotFoundMsg, response) } addDebug(action, response, request) return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR) } return response, nil } func (s *GpdbServiceV2) GpdbExternalDataServiceStateRefreshFunc(id string, field string, failStates []string) resource.StateRefreshFunc { return func() (interface{}, string, error) { object, err := s.DescribeGpdbExternalDataService(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 } } // DescribeGpdbExternalDataService >>> Encapsulated. // DescribeGpdbStreamingDataService <<< Encapsulated get interface for Gpdb StreamingDataService. func (s *GpdbServiceV2) DescribeGpdbStreamingDataService(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 := "DescribeStreamingDataService" request = make(map[string]interface{}) query = make(map[string]interface{}) query["DBInstanceId"] = parts[0] query["ServiceId"] = parts[1] 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("gpdb", "2016-05-03", 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{"ExternalService.NotFound"}) { return object, WrapErrorf(NotFoundErr("StreamingDataService", id), NotFoundMsg, response) } addDebug(action, response, request) return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR) } return response, nil } func (s *GpdbServiceV2) GpdbStreamingDataServiceStateRefreshFunc(id string, field string, failStates []string) resource.StateRefreshFunc { return func() (interface{}, string, error) { object, err := s.DescribeGpdbStreamingDataService(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 } } // DescribeGpdbStreamingDataService >>> Encapsulated. // DescribeGpdbStreamingDataSource <<< Encapsulated get interface for Gpdb StreamingDataSource. func (s *GpdbServiceV2) DescribeGpdbStreamingDataSource(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 := "DescribeStreamingDataSource" request = make(map[string]interface{}) query = make(map[string]interface{}) query["DBInstanceId"] = parts[0] query["DataSourceId"] = parts[1] 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("gpdb", "2016-05-03", 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{"ExternalDataSource.NotFound"}) { return object, WrapErrorf(NotFoundErr("StreamingDataSource", id), NotFoundMsg, response) } addDebug(action, response, request) return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR) } return response, nil } func (s *GpdbServiceV2) GpdbStreamingDataSourceStateRefreshFunc(id string, field string, failStates []string) resource.StateRefreshFunc { return func() (interface{}, string, error) { object, err := s.DescribeGpdbStreamingDataSource(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 } } // DescribeGpdbStreamingDataSource >>> Encapsulated. // DescribeGpdbAccount <<< Encapsulated get interface for Gpdb Account. func (s *GpdbServiceV2) DescribeGpdbAccount(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 := "GetAccount" request = make(map[string]interface{}) query = make(map[string]interface{}) query["AccountName"] = parts[1] query["DBInstanceId"] = parts[0] wait := incrementalWait(3*time.Second, 5*time.Second) err = resource.Retry(1*time.Minute, func() *resource.RetryError { response, err = client.RpcPost("gpdb", "2016-05-03", 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{"InvalidAccountName.NotFound"}) { return object, WrapErrorf(NotFoundErr("Account", id), NotFoundMsg, response) } addDebug(action, response, request) return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR) } return response, nil } func (s *GpdbServiceV2) GpdbAccountStateRefreshFunc(id string, field string, failStates []string) resource.StateRefreshFunc { return func() (interface{}, string, error) { object, err := s.DescribeGpdbAccount(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 } } // DescribeGpdbAccount >>> Encapsulated. // DescribeGpdbJdbcDataSource <<< Encapsulated get interface for Gpdb JdbcDataSource. func (s *GpdbServiceV2) DescribeGpdbJdbcDataSource(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 := "DescribeJDBCDataSource" request = make(map[string]interface{}) query = make(map[string]interface{}) query["DataSourceId"] = parts[1] query["DBInstanceId"] = parts[0] wait := incrementalWait(3*time.Second, 5*time.Second) err = resource.Retry(1*time.Minute, func() *resource.RetryError { response, err = client.RpcPost("gpdb", "2016-05-03", 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) } return response, nil } func (s *GpdbServiceV2) GpdbJdbcDataSourceStateRefreshFunc(id string, field string, failStates []string) resource.StateRefreshFunc { return func() (interface{}, string, error) { object, err := s.DescribeGpdbJdbcDataSource(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 } } // DescribeGpdbJdbcDataSource >>> Encapsulated. // DescribeGpdbHadoopDataSource <<< Encapsulated get interface for Gpdb HadoopDataSource. func (s *GpdbServiceV2) DescribeGpdbHadoopDataSource(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 := "DescribeHadoopDataSource" request = make(map[string]interface{}) query = make(map[string]interface{}) query["DBInstanceId"] = parts[0] query["DataSourceId"] = parts[1] 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("gpdb", "2016-05-03", 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) } return response, nil } func (s *GpdbServiceV2) GpdbHadoopDataSourceStateRefreshFunc(id string, field string, failStates []string) resource.StateRefreshFunc { return func() (interface{}, string, error) { object, err := s.DescribeGpdbHadoopDataSource(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 } } // DescribeGpdbHadoopDataSource >>> Encapsulated. // DescribeGpdbStreamingJob <<< Encapsulated get interface for Gpdb StreamingJob. func (s *GpdbServiceV2) DescribeGpdbStreamingJob(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 := "DescribeStreamingJob" request = make(map[string]interface{}) query = make(map[string]interface{}) query["DBInstanceId"] = parts[0] query["JobId"] = parts[1] 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("gpdb", "2016-05-03", 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{"ExternalDataSourceJob.NotFound"}) { return object, WrapErrorf(NotFoundErr("StreamingJob", id), NotFoundMsg, response) } addDebug(action, response, request) return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR) } return response, nil } func (s *GpdbServiceV2) GpdbStreamingJobStateRefreshFunc(id string, field string, failStates []string) resource.StateRefreshFunc { return func() (interface{}, string, error) { object, err := s.DescribeGpdbStreamingJob(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 } } // DescribeGpdbStreamingJob >>> Encapsulated. // DescribeGpdbDBInstanceIPArray <<< Encapsulated get interface for Gpdb DBInstanceIPArray. func (s *GpdbServiceV2) DescribeGpdbDBInstanceIPArray(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 := "DescribeDBInstanceIPArrayList" request = make(map[string]interface{}) query = make(map[string]interface{}) query["DBInstanceIPArrayName"] = parts[1] query["DBInstanceId"] = parts[0] wait := incrementalWait(3*time.Second, 5*time.Second) err = resource.Retry(1*time.Minute, func() *resource.RetryError { response, err = client.RpcPost("gpdb", "2016-05-03", 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("$.Items.DBInstanceIPArray[*]", response) if err != nil { return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.Items.DBInstanceIPArray[*]", response) } if len(v.([]interface{})) == 0 { return object, WrapErrorf(NotFoundErr("DBInstanceIPArray", id), NotFoundMsg, response) } return v.([]interface{})[0].(map[string]interface{}), nil } func (s *GpdbServiceV2) GpdbDBInstanceIPArrayStateRefreshFunc(id string, field string, failStates []string) resource.StateRefreshFunc { return func() (interface{}, string, error) { object, err := s.DescribeGpdbDBInstanceIPArray(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 field == "$.SecurityIPList" { e := jsonata.MustCompile("$split(ApiOutput.SecurityIPList, \",\")") v, _ = e.Eval(object) currentStatus = fmt.Sprint(v) } for _, failState := range failStates { if currentStatus == failState { return object, currentStatus, WrapError(Error(FailedToReachTargetStatus, currentStatus)) } } return object, currentStatus, nil } } // DescribeGpdbDBInstanceIPArray >>> Encapsulated. // DescribeGpdbDatabase <<< Encapsulated get interface for Gpdb Database. func (s *GpdbServiceV2) DescribeGpdbDatabase(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 := "DescribeDatabase" request = make(map[string]interface{}) query = make(map[string]interface{}) query["DatabaseName"] = parts[1] query["DBInstanceId"] = parts[0] wait := incrementalWait(3*time.Second, 5*time.Second) err = resource.Retry(1*time.Minute, func() *resource.RetryError { response, err = client.RpcPost("gpdb", "2016-05-03", 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{"Database.NotFound"}) { return object, WrapErrorf(NotFoundErr("Database", id), NotFoundMsg, response) } return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR) } return response, nil } func (s *GpdbServiceV2) GpdbDatabaseStateRefreshFunc(id string, field string, failStates []string) resource.StateRefreshFunc { return func() (interface{}, string, error) { object, err := s.DescribeGpdbDatabase(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 } } // DescribeGpdbDatabase >>> Encapsulated.