alicloud/service_alicloud_resourcemanager.go (662 lines of code) (raw):
package alicloud
import (
"fmt"
"log"
"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"
)
type ResourcemanagerService struct {
client *connectivity.AliyunClient
}
func (s *ResourcemanagerService) DescribeResourceManagerRole(id string) (object map[string]interface{}, err error) {
var response map[string]interface{}
client := s.client
action := "GetRole"
request := map[string]interface{}{
"RegionId": s.client.RegionId,
"RoleName": id,
}
response, err = client.RpcPost("ResourceManager", "2020-03-31", action, nil, request, true)
if err != nil {
if IsExpectedErrors(err, []string{"EntityNotExist.Role"}) {
err = WrapErrorf(NotFoundErr("ResourceManagerRole", id), NotFoundMsg, ProviderERROR)
return object, err
}
err = WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR)
return object, err
}
addDebug(action, response, request)
v, err := jsonpath.Get("$.Role", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.Role", response)
}
object = v.(map[string]interface{})
return object, nil
}
func (s *ResourcemanagerService) DescribeResourceManagerResourceGroup(id string) (object map[string]interface{}, err error) {
var response map[string]interface{}
action := "GetResourceGroup"
client := s.client
request := map[string]interface{}{
"ResourceGroupId": id,
}
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
response, err = client.RpcPost("ResourceManager", "2020-03-31", 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{"EntityNotExists.ResourceGroup"}) {
return object, WrapErrorf(NotFoundErr("ResourceManager:ResourceGroup", id), NotFoundWithResponse, response)
}
return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR)
}
v, err := jsonpath.Get("$.ResourceGroup", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.ResourceGroup", response)
}
if status, ok := v.(map[string]interface{})["Status"].(string); ok && status == "PendingDelete" {
log.Printf("[WARN] Removing ResourceManagerResourceGroup %s because it's already gone", id)
return v.(map[string]interface{}), WrapErrorf(NotFoundErr("ResourceManager:ResourceGroup", id), NotFoundWithResponse, response)
}
object = v.(map[string]interface{})
return object, nil
}
func (s *ResourcemanagerService) ResourceManagerResourceGroupStateRefreshFunc(id string, failStates []string) resource.StateRefreshFunc {
return func() (interface{}, string, error) {
object, err := s.DescribeResourceManagerResourceGroup(id)
if err != nil {
if NotFoundError(err) {
// Set this to nil as if we didn't find anything.
return nil, "", nil
}
return nil, "", WrapError(err)
}
for _, failState := range failStates {
if object["Status"].(string) == failState {
return object, object["Status"].(string), WrapError(Error(FailedToReachTargetStatus, object["Status"].(string)))
}
}
return object, object["Status"].(string), nil
}
}
func (s *ResourcemanagerService) DescribeResourceManagerFolder(id string) (object map[string]interface{}, err error) {
client := s.client
request := map[string]interface{}{
"FolderId": id,
}
var response map[string]interface{}
action := "GetFolder"
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
resp, err := client.RpcPost("ResourceManager", "2020-03-31", action, nil, request, false)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
response = resp
addDebug(action, resp, request)
return nil
})
if err != nil {
if IsExpectedErrors(err, []string{"EntityNotExists.Folder", "EntityNotExists.ResourceDirectory"}) {
err = WrapErrorf(NotFoundErr("ResourceManagerFolder", id), NotFoundMsg, ProviderERROR)
return object, err
}
return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR)
}
v, err := jsonpath.Get("$.Folder", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.Folder", response)
}
return v.(map[string]interface{}), nil
}
func (s *ResourcemanagerService) DescribeResourceManagerHandshake(id string) (object map[string]interface{}, err error) {
var response map[string]interface{}
client := s.client
action := "GetHandshake"
request := map[string]interface{}{
"RegionId": s.client.RegionId,
"HandshakeId": id,
}
response, err = client.RpcPost("ResourceManager", "2020-03-31", action, nil, request, true)
if err != nil {
if IsExpectedErrors(err, []string{"EntityNotExists.Handshake"}) {
err = WrapErrorf(NotFoundErr("ResourceManagerHandshake", id), NotFoundMsg, ProviderERROR)
return object, err
}
err = WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR)
return object, err
}
addDebug(action, response, request)
v, err := jsonpath.Get("$.Handshake", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.Handshake", response)
}
object = v.(map[string]interface{})
return object, nil
}
func (s *ResourcemanagerService) GetPolicyVersion(id string, d *schema.ResourceData) (object map[string]interface{}, err error) {
var response map[string]interface{}
client := s.client
action := "GetPolicyVersion"
request := map[string]interface{}{
"RegionId": s.client.RegionId,
"PolicyName": id,
"PolicyType": "Custom",
}
if v, ok := d.GetOk("default_version"); ok {
request["VersionId"] = v.(string)
}
response, err = client.RpcPost("ResourceManager", "2020-03-31", action, nil, request, true)
if err != nil {
if IsExpectedErrors(err, []string{"EntityNotExist.Policy", "EntityNotExist.Policy.Version"}) {
err = WrapErrorf(NotFoundErr("ResourceManagerPolicy", id), NotFoundMsg, ProviderERROR)
return object, err
}
err = WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR)
return object, err
}
addDebug(action, response, request)
v, err := jsonpath.Get("$.PolicyVersion", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.PolicyVersion", response)
}
object = v.(map[string]interface{})
return object, nil
}
func (s *ResourcemanagerService) DescribeResourceManagerPolicy(id string) (object map[string]interface{}, err error) {
var response map[string]interface{}
client := s.client
action := "GetPolicy"
request := map[string]interface{}{
"RegionId": s.client.RegionId,
"PolicyName": id,
"PolicyType": "Custom",
}
response, err = client.RpcPost("ResourceManager", "2020-03-31", action, nil, request, true)
if err != nil {
if IsExpectedErrors(err, []string{"EntityNotExist.Policy"}) {
err = WrapErrorf(NotFoundErr("ResourceManagerPolicy", id), NotFoundMsg, ProviderERROR)
return object, err
}
err = WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR)
return object, err
}
addDebug(action, response, request)
v, err := jsonpath.Get("$.Policy", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.Policy", response)
}
object = v.(map[string]interface{})
return object, nil
}
func (s *ResourcemanagerService) DescribeResourceManagerAccount(id string) (object map[string]interface{}, err error) {
var response map[string]interface{}
client := s.client
action := "GetAccount"
request := map[string]interface{}{
"RegionId": s.client.RegionId,
"AccountId": id,
}
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
response, err = client.RpcPost("ResourceManager", "2020-03-31", 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{"EntityNotExists.Account", "EntityNotExists.ResourceDirectory"}) {
return object, WrapErrorf(NotFoundErr("ResourceManager:Account", id), NotFoundMsg, ProviderERROR, fmt.Sprint(response["RequestId"]))
}
return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR)
}
v, err := jsonpath.Get("$.Account", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.Account", response)
}
object = v.(map[string]interface{})
return object, nil
}
func (s *ResourcemanagerService) GetAccountDeletionStatus(id string) (object map[string]interface{}, err error) {
var response map[string]interface{}
client := s.client
action := "GetAccountDeletionStatus"
request := map[string]interface{}{
"AccountId": id,
}
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
response, err = client.RpcPost("ResourceManager", "2020-03-31", 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{"EntityNotExists.Account", "EntityNotExists.ResourceDirectory"}) {
return object, WrapErrorf(NotFoundErr("ResourceManager:Account", id), NotFoundMsg, ProviderERROR, fmt.Sprint(response["RequestId"]))
}
return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR)
}
v, err := jsonpath.Get("$.RdAccountDeletionStatus", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.RdAccountDeletionStatus", response)
}
object = v.(map[string]interface{})
v, _ = jsonpath.Get("$.RequestId", response)
object["RequestId"] = v
return object, nil
}
func (s *ResourcemanagerService) AccountDeletionStateRefreshFunc(id string, failStates []string) resource.StateRefreshFunc {
return func() (interface{}, string, error) {
object, err := s.GetAccountDeletionStatus(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(FailedToReachTargetStatusWithRequestId, fmt.Sprint(object["Status"]), fmt.Sprint(object["RequestId"])))
}
}
return object, fmt.Sprint(object["Status"]), nil
}
}
func (s *ResourcemanagerService) DescribeResourceManagerResourceDirectory(id string) (object map[string]interface{}, err error) {
var response map[string]interface{}
action := "GetResourceDirectory"
client := s.client
request := map[string]interface{}{}
response, err = client.RpcPost("ResourceManager", "2020-03-31", action, nil, request, true)
if err != nil {
if IsExpectedErrors(err, []string{"ResourceDirectoryNotInUse"}) {
err = WrapErrorf(NotFoundErr("ResourceManagerResourceDirectory", id), NotFoundMsg, ProviderERROR)
return object, err
}
return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR)
}
addDebug(action, response, request)
v, err := jsonpath.Get("$.ResourceDirectory", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.ResourceDirectory", response)
}
object = v.(map[string]interface{})
return object, nil
}
func (s *ResourcemanagerService) DescribeResourceManagerPolicyVersion(id string) (object map[string]interface{}, err error) {
var response map[string]interface{}
client := s.client
action := "GetPolicyVersion"
parts, err := ParseResourceId(id, 2)
if err != nil {
err = WrapError(err)
return
}
request := map[string]interface{}{
"RegionId": s.client.RegionId,
"PolicyName": parts[0],
"VersionId": parts[1],
"PolicyType": "Custom",
}
response, err = client.RpcPost("ResourceManager", "2020-03-31", action, nil, request, true)
if err != nil {
if IsExpectedErrors(err, []string{"EntityNotExist.Policy", "EntityNotExist.Policy.Version"}) {
err = WrapErrorf(NotFoundErr("ResourceManagerPolicyVersion", id), NotFoundMsg, ProviderERROR)
return object, err
}
err = WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR)
return object, err
}
addDebug(action, response, request)
v, err := jsonpath.Get("$.PolicyVersion", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.PolicyVersion", response)
}
object = v.(map[string]interface{})
return object, nil
}
func (s *ResourcemanagerService) DescribeResourceManagerPolicyAttachment(id string) (object map[string]interface{}, err error) {
var response map[string]interface{}
client := s.client
action := "ListPolicyAttachments"
parts, err := ParseResourceId(id, 5)
if err != nil {
err = WrapError(err)
return
}
request := map[string]interface{}{
"RegionId": s.client.RegionId,
"PolicyName": parts[0],
"PolicyType": parts[1],
"PrincipalName": parts[2],
"PrincipalType": parts[3],
"ResourceGroupId": parts[4],
}
response, err = client.RpcPost("ResourceManager", "2020-03-31", action, nil, request, true)
if err != nil {
if IsExpectedErrors(err, []string{"EntityNotExist.Policy", "EntityNotExists.ResourceGroup"}) {
err = WrapErrorf(NotFoundErr("ResourceManagerPolicyAttachment", id), NotFoundMsg, ProviderERROR)
return object, err
}
err = WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR)
return object, err
}
addDebug(action, response, request)
v, err := jsonpath.Get("$.PolicyAttachments.PolicyAttachment", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.PolicyAttachments.PolicyAttachment", response)
}
if len(v.([]interface{})) < 1 {
return object, WrapErrorf(NotFoundErr("ResourceManager", id), NotFoundWithResponse, response)
}
object = v.([]interface{})[0].(map[string]interface{})
return object, nil
}
func (s *ResourcemanagerService) DescribeResourceManagerControlPolicy(id string) (object map[string]interface{}, err error) {
var response map[string]interface{}
client := s.client
action := "GetControlPolicy"
request := map[string]interface{}{
"RegionId": s.client.RegionId,
"PolicyId": id,
}
response, err = client.RpcPost("ResourceManager", "2020-03-31", action, nil, request, true)
if err != nil {
if IsExpectedErrors(err, []string{"EntityNotExists.ControlPolicy"}) {
err = WrapErrorf(NotFoundErr("ResourceManagerControlPolicy", id), NotFoundMsg, ProviderERROR)
return object, err
}
err = WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR)
return object, err
}
addDebug(action, response, request)
v, err := jsonpath.Get("$.ControlPolicy", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.ControlPolicy", response)
}
object = v.(map[string]interface{})
return object, nil
}
func (s *ResourcemanagerService) DescribeResourceManagerControlPolicyAttachment(id string) (object map[string]interface{}, err error) {
var response map[string]interface{}
action := "ListControlPolicyAttachmentsForTarget"
client := s.client
parts, err := ParseResourceId(id, 2)
if err != nil {
return nil, WrapError(err)
}
request := map[string]interface{}{
"TargetId": parts[1],
}
idExist := false
wait := incrementalWait(3*time.Second, 5*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
response, err = client.RpcPost("ResourceManager", "2020-03-31", 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{"EntityNotExists.Target"}) {
return object, WrapErrorf(NotFoundErr("ResourceManager:ControlPolicyAttachment", id), NotFoundWithResponse, response)
}
return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR)
}
resp, err := jsonpath.Get("$.ControlPolicyAttachments.ControlPolicyAttachment", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.ControlPolicyAttachments.ControlPolicyAttachment", response)
}
if v, ok := resp.([]interface{}); !ok || len(v) < 1 {
return object, WrapErrorf(NotFoundErr("ResourceManager:ControlPolicyAttachment", id), NotFoundWithResponse, response)
}
for _, v := range resp.([]interface{}) {
if fmt.Sprint(v.(map[string]interface{})["PolicyId"]) == parts[0] {
idExist = true
return v.(map[string]interface{}), nil
}
}
if !idExist {
return object, WrapErrorf(NotFoundErr("ResourceManager:ControlPolicyAttachment", id), NotFoundWithResponse, response)
}
return object, nil
}
func (s *ResourcemanagerService) ResourceManagerResourceDirectoryStateRefreshFunc(id string, failStates []string) resource.StateRefreshFunc {
return func() (interface{}, string, error) {
object, err := s.DescribeResourceManagerResourceDirectory(id)
if err != nil {
if NotFoundError(err) {
// Set this to nil as if we didn't find anything.
return nil, "", nil
}
return nil, "", WrapError(err)
}
for _, failState := range failStates {
if object["ScpStatus"].(string) == failState {
return object, object["ScpStatus"].(string), WrapError(Error(FailedToReachTargetStatus, object["ScpStatus"].(string)))
}
}
return object, object["ScpStatus"].(string), nil
}
}
func (s *ResourcemanagerService) GetPayerForAccount(id string) (object map[string]interface{}, err error) {
var response map[string]interface{}
client := s.client
action := "GetPayerForAccount"
request := map[string]interface{}{
"RegionId": s.client.RegionId,
"AccountId": id,
}
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
response, err = client.RpcPost("ResourceManager", "2020-03-31", 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("$", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$", response)
}
object = v.(map[string]interface{})
return object, nil
}
func (s *ResourcemanagerService) ListTagResources(id string, resourceType string) (object interface{}, err error) {
client := s.client
action := "ListTagResources"
request := map[string]interface{}{
"ResourceType": resourceType,
"ResourceId.1": id,
}
tags := make([]interface{}, 0)
var response map[string]interface{}
for {
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
var err error
response, err = client.RpcPost("ResourceManager", "2020-03-31", action, nil, request, false)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
addDebug(action, response, request)
v, err := jsonpath.Get("$.TagResources", response)
if err != nil {
return resource.NonRetryableError(WrapErrorf(err, FailedGetAttributeMsg, id, "$.TagResources", response))
}
if v != nil {
tags = append(tags, v.([]interface{})...)
}
return nil
})
if err != nil {
err = WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR)
return
}
if response["NextToken"] == nil {
break
}
request["NextToken"] = response["NextToken"]
}
return tags, nil
}
func (s *ResourcemanagerService) SetResourceTags(d *schema.ResourceData, resourceType string) error {
if d.HasChange("tags") {
added, removed := parsingTags(d)
client := s.client
removedTagKeys := make([]string, 0)
for _, v := range removed {
if !ignoredTags(v, "") {
removedTagKeys = append(removedTagKeys, v)
}
}
if len(removedTagKeys) > 0 {
action := "UnTagResources"
request := map[string]interface{}{
"ResourceType": resourceType,
"ResourceId.1": d.Id(),
}
for i, key := range removedTagKeys {
request[fmt.Sprintf("TagKey.%d", i+1)] = key
}
wait := incrementalWait(2*time.Second, 1*time.Second)
err := resource.Retry(10*time.Minute, func() *resource.RetryError {
response, err := client.RpcPost("ResourceManager", "2020-03-31", action, nil, request, false)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
addDebug(action, response, request)
return nil
})
if err != nil {
return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR)
}
}
if len(added) > 0 {
action := "TagResources"
request := map[string]interface{}{
"ResourceType": resourceType,
"ResourceId.1": d.Id(),
}
count := 1
for key, value := range added {
request[fmt.Sprintf("Tag.%d.Key", count)] = key
request[fmt.Sprintf("Tag.%d.Value", count)] = value
count++
}
wait := incrementalWait(2*time.Second, 1*time.Second)
err := resource.Retry(10*time.Minute, func() *resource.RetryError {
response, err := client.RpcPost("ResourceManager", "2020-03-31", action, nil, request, false)
if err != nil {
if NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
addDebug(action, response, request)
return nil
})
if err != nil {
return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR)
}
}
d.SetPartial("tags")
}
return nil
}
func (s *ResourcemanagerService) DescribeResourceManagerAccountDeletionCheckTask(id string) (object map[string]interface{}, err error) {
var response map[string]interface{}
client := s.client
action := "GetAccountDeletionCheckResult"
request := map[string]interface{}{
"AccountId": id,
}
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
response, err = client.RpcPost("ResourceManager", "2020-03-31", 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("$.AccountDeletionCheckResultInfo", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.AccountDeletionCheckResultInfo", response)
}
object = v.(map[string]interface{})
return object, nil
}
func (s *ResourcemanagerService) ResourceManagerAccountDeletionCheckTaskStateRefreshFunc(id string, failStates []string) resource.StateRefreshFunc {
return func() (interface{}, string, error) {
object, err := s.DescribeResourceManagerAccountDeletionCheckTask(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
}
}