alicloud/service_alicloud_ecd.go (790 lines of code) (raw):
package alicloud
import (
"fmt"
"time"
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
"github.com/PaesslerAG/jsonpath"
"github.com/aliyun/terraform-provider-alicloud/alicloud/connectivity"
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
)
type EcdService struct {
client *connectivity.AliyunClient
}
func (s *EcdService) DescribeEcdPolicyGroup(id string) (object map[string]interface{}, err error) {
var response map[string]interface{}
client := s.client
action := "DescribePolicyGroups"
request := map[string]interface{}{
"RegionId": s.client.RegionId,
"PolicyGroupId": []string{id},
}
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
response, err = client.RpcPost("ecd", "2020-09-30", 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("$.DescribePolicyGroups", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.DescribePolicyGroups", response)
}
if len(v.([]interface{})) < 1 {
return object, WrapErrorf(NotFoundErr("ECD", id), NotFoundWithResponse, response)
} else {
if fmt.Sprint(v.([]interface{})[0].(map[string]interface{})["PolicyGroupId"]) != id {
return object, WrapErrorf(NotFoundErr("ECD", id), NotFoundWithResponse, response)
}
}
object = v.([]interface{})[0].(map[string]interface{})
return object, nil
}
func parsingResourceType(d *schema.ResourceData, resourceType string) ([]interface{}, []interface{}) {
oraw, nraw := d.GetChange(resourceType)
removed := oraw.(*schema.Set).List()
added := nraw.(*schema.Set).List()
return removed, added
}
func (s *EcdService) setAuthAccessPolicyRules(d *schema.ResourceData, request map[string]interface{}, resourceType string) error {
if d.HasChange(resourceType) {
removed, added := parsingResourceType(d, resourceType)
client := s.client
var err error
if len(removed) > 0 {
action := "ModifyPolicyGroup"
req := map[string]interface{}{
"PolicyGroupId": d.Id(),
}
var response map[string]interface{}
for authorizeAccessPolicyRulesPtr, authorizeAccessPolicyRules := range removed {
authorizeAccessPolicyRulesArg := authorizeAccessPolicyRules.(map[string]interface{})
req["RevokeAccessPolicyRule."+fmt.Sprint(authorizeAccessPolicyRulesPtr+1)+".CidrIp"] = authorizeAccessPolicyRulesArg["cidr_ip"]
req["RevokeAccessPolicyRule."+fmt.Sprint(authorizeAccessPolicyRulesPtr+1)+".Description"] = authorizeAccessPolicyRulesArg["description"]
}
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(d.Timeout(schema.TimeoutUpdate), func() *resource.RetryError {
response, err = client.RpcPost("ecd", "2020-09-30", action, nil, req, false)
if err != nil {
if NeedRetry(err) || IsExpectedErrors(err, []string{"InvalidPolicyStatus.Modification"}) {
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 {
for authorizeAccessPolicyRulesPtr, authorizeAccessPolicyRules := range added {
authorizeAccessPolicyRulesArg := authorizeAccessPolicyRules.(map[string]interface{})
request["AuthorizeAccessPolicyRule."+fmt.Sprint(authorizeAccessPolicyRulesPtr+1)+".CidrIp"] = authorizeAccessPolicyRulesArg["cidr_ip"]
request["AuthorizeAccessPolicyRule."+fmt.Sprint(authorizeAccessPolicyRulesPtr+1)+".Description"] = authorizeAccessPolicyRulesArg["description"]
}
}
}
return nil
}
func (s *EcdService) setAuthSecurityPolicyRules(d *schema.ResourceData, request map[string]interface{}, resourceType string) error {
if d.HasChange(resourceType) {
removed, added := parsingResourceType(d, resourceType)
var err error
client := s.client
if len(removed) > 0 {
action := "ModifyPolicyGroup"
req := map[string]interface{}{
"PolicyGroupId": d.Id(),
}
var response map[string]interface{}
for authorizeSecurityPolicyRulesPtr, authorizeSecurityPolicyRules := range removed {
authorizeSecurityPolicyRulesArg := authorizeSecurityPolicyRules.(map[string]interface{})
req["RevokeSecurityPolicyRule."+fmt.Sprint(authorizeSecurityPolicyRulesPtr+1)+".CidrIp"] = authorizeSecurityPolicyRulesArg["cidr_ip"]
req["RevokeSecurityPolicyRule."+fmt.Sprint(authorizeSecurityPolicyRulesPtr+1)+".Description"] = authorizeSecurityPolicyRulesArg["description"]
req["RevokeSecurityPolicyRule."+fmt.Sprint(authorizeSecurityPolicyRulesPtr+1)+".IpProtocol"] = authorizeSecurityPolicyRulesArg["ip_protocol"]
req["RevokeSecurityPolicyRule."+fmt.Sprint(authorizeSecurityPolicyRulesPtr+1)+".Policy"] = authorizeSecurityPolicyRulesArg["policy"]
req["RevokeSecurityPolicyRule."+fmt.Sprint(authorizeSecurityPolicyRulesPtr+1)+".PortRange"] = authorizeSecurityPolicyRulesArg["port_range"]
req["RevokeSecurityPolicyRule."+fmt.Sprint(authorizeSecurityPolicyRulesPtr+1)+".Priority"] = authorizeSecurityPolicyRulesArg["priority"]
req["RevokeSecurityPolicyRule."+fmt.Sprint(authorizeSecurityPolicyRulesPtr+1)+".Type"] = authorizeSecurityPolicyRulesArg["type"]
}
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(d.Timeout(schema.TimeoutUpdate), func() *resource.RetryError {
response, err = client.RpcPost("ecd", "2020-09-30", action, nil, req, false)
if err != nil {
if NeedRetry(err) || IsExpectedErrors(err, []string{"InvalidPolicyStatus.Modification"}) {
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 {
for authorizeSecurityPolicyRulesPtr, authorizeSecurityPolicyRules := range added {
authorizeSecurityPolicyRulesArg := authorizeSecurityPolicyRules.(map[string]interface{})
request["AuthorizeSecurityPolicyRule."+fmt.Sprint(authorizeSecurityPolicyRulesPtr+1)+".CidrIp"] = authorizeSecurityPolicyRulesArg["cidr_ip"]
request["AuthorizeSecurityPolicyRule."+fmt.Sprint(authorizeSecurityPolicyRulesPtr+1)+".Description"] = authorizeSecurityPolicyRulesArg["description"]
request["AuthorizeSecurityPolicyRule."+fmt.Sprint(authorizeSecurityPolicyRulesPtr+1)+".IpProtocol"] = authorizeSecurityPolicyRulesArg["ip_protocol"]
request["AuthorizeSecurityPolicyRule."+fmt.Sprint(authorizeSecurityPolicyRulesPtr+1)+".Policy"] = authorizeSecurityPolicyRulesArg["policy"]
request["AuthorizeSecurityPolicyRule."+fmt.Sprint(authorizeSecurityPolicyRulesPtr+1)+".PortRange"] = authorizeSecurityPolicyRulesArg["port_range"]
request["AuthorizeSecurityPolicyRule."+fmt.Sprint(authorizeSecurityPolicyRulesPtr+1)+".Priority"] = authorizeSecurityPolicyRulesArg["priority"]
request["AuthorizeSecurityPolicyRule."+fmt.Sprint(authorizeSecurityPolicyRulesPtr+1)+".Type"] = authorizeSecurityPolicyRulesArg["type"]
}
}
}
return nil
}
func (s *EcdService) DescribeEcdSimpleOfficeSite(id string) (object map[string]interface{}, err error) {
var response map[string]interface{}
client := s.client
action := "DescribeOfficeSites"
request := map[string]interface{}{
"RegionId": s.client.RegionId,
"OfficeSiteId": []string{id},
}
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
response, err = client.RpcPost("ecd", "2020-09-30", 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("$.OfficeSites", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.OfficeSites", response)
}
if len(v.([]interface{})) < 1 {
return object, WrapErrorf(NotFoundErr("ECD", id), NotFoundWithResponse, response)
} else {
if fmt.Sprint(v.([]interface{})[0].(map[string]interface{})["OfficeSiteId"]) != id {
return object, WrapErrorf(NotFoundErr("ECD", id), NotFoundWithResponse, response)
}
}
object = v.([]interface{})[0].(map[string]interface{})
return object, nil
}
func (s *EcdService) EcdSimpleOfficeSiteStateRefreshFunc(id string) resource.StateRefreshFunc {
return func() (interface{}, string, error) {
object, err := s.DescribeEcdSimpleOfficeSite(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)
}
return object, object["Status"].(string), nil
}
}
func (s *EcdService) DescribeEcdNasFileSystem(id string) (object map[string]interface{}, err error) {
var response map[string]interface{}
client := s.client
action := "DescribeNASFileSystems"
request := map[string]interface{}{
"RegionId": s.client.RegionId,
"FileSystemId": []string{id},
}
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
response, err = client.RpcPost("ecd", "2020-09-30", 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("$.FileSystems", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.FileSystems", response)
}
if len(v.([]interface{})) < 1 {
return object, WrapErrorf(NotFoundErr("ECD", id), NotFoundWithResponse, response)
} else {
if fmt.Sprint(v.([]interface{})[0].(map[string]interface{})["FileSystemId"]) != id {
return object, WrapErrorf(NotFoundErr("ECD", id), NotFoundWithResponse, response)
}
}
object = v.([]interface{})[0].(map[string]interface{})
return object, nil
}
func (s *EcdService) DescribeEcdNetworkPackage(id string) (object map[string]interface{}, err error) {
var response map[string]interface{}
client := s.client
action := "DescribeNetworkPackages"
request := map[string]interface{}{
"RegionId": s.client.RegionId,
"NetworkPackageId": []string{id},
}
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
response, err = client.RpcPost("ecd", "2020-09-30", 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("$.NetworkPackages", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.NetworkPackages", response)
}
if len(v.([]interface{})) < 1 {
return object, WrapErrorf(NotFoundErr("ECD", id), NotFoundWithResponse, response)
} else {
if fmt.Sprint(v.([]interface{})[0].(map[string]interface{})["NetworkPackageId"]) != id {
return object, WrapErrorf(NotFoundErr("ECD", id), NotFoundWithResponse, response)
}
}
object = v.([]interface{})[0].(map[string]interface{})
return object, nil
}
func (s *EcdService) EcdNasFileSystemStateRefreshFunc(id string, failStates []string) resource.StateRefreshFunc {
return func() (interface{}, string, error) {
object, err := s.DescribeEcdNasFileSystem(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["FileSystemStatus"]) == failState {
return object, fmt.Sprint(object["FileSystemStatus"]), WrapError(Error(FailedToReachTargetStatus, fmt.Sprint(object["FileSystemStatus"])))
}
}
return object, fmt.Sprint(object["FileSystemStatus"]), nil
}
}
func (s *EcdService) EcdNetworkPackageRefreshFunc(id string, failStates []string) resource.StateRefreshFunc {
return func() (interface{}, string, error) {
object, err := s.DescribeEcdNetworkPackage(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["NetworkPackageStatus"]) == failState {
return object, fmt.Sprint(object["NetworkPackageStatus"]), WrapError(Error(FailedToReachTargetStatus, fmt.Sprint(object["FileSystemStatus"])))
}
}
return object, fmt.Sprint(object["NetworkPackageStatus"]), nil
}
}
func (s *EcdService) 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{}{
"RegionId": s.client.RegionId,
"ResourceType": resourceType,
"ResourceId": []string{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("ecd", "2020-09-30", 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{}{
"RegionId": s.client.RegionId,
"ResourceType": resourceType,
"ResourceId": []string{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("ecd", "2020-09-30", 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 *EcdService) DescribeEcdDesktop(id string) (object map[string]interface{}, err error) {
var response map[string]interface{}
client := s.client
action := "DescribeDesktops"
request := map[string]interface{}{
"RegionId": s.client.RegionId,
"DesktopId.1": id,
}
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
response, err = client.RpcPost("ecd", "2020-09-30", 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("$.Desktops", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.Desktops", response)
}
if len(v.([]interface{})) < 1 {
return object, WrapErrorf(NotFoundErr("ECD", id), NotFoundWithResponse, response)
} else {
if fmt.Sprint(v.([]interface{})[0].(map[string]interface{})["DesktopId"]) != id {
return object, WrapErrorf(NotFoundErr("ECD", id), NotFoundWithResponse, response)
}
}
object = v.([]interface{})[0].(map[string]interface{})
return object, nil
}
func (s *EcdService) EcdDesktopStateRefreshFunc(id string, failStates []string) resource.StateRefreshFunc {
return func() (interface{}, string, error) {
object, err := s.DescribeEcdDesktop(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["DesktopStatus"]) == failState {
return object, fmt.Sprint(object["DesktopStatus"]), WrapError(Error(FailedToReachTargetStatus, fmt.Sprint(object["DesktopStatus"])))
}
}
return object, fmt.Sprint(object["DesktopStatus"]), nil
}
}
func (s *EcdService) EcdDesktopDesktopTypeRefreshFunc(id string, failStates []string) resource.StateRefreshFunc {
return func() (interface{}, string, error) {
object, err := s.DescribeEcdDesktop(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["DesktopType"]) == failState {
return object, fmt.Sprint(object["DesktopType"]), WrapError(Error(FailedToReachTargetStatus, fmt.Sprint(object["DesktopType"])))
}
}
return object, fmt.Sprint(object["DesktopType"]), nil
}
}
func (s *EcdService) EcdDesktopChargeTypeFunc(id string, failStates []string) resource.StateRefreshFunc {
return func() (interface{}, string, error) {
object, err := s.DescribeEcdDesktop(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(convertEcdDesktopPaymentTypeResponse(object["ChargeType"])) == failState {
return object, fmt.Sprint(object["ChargeType"]), WrapError(Error(FailedToReachTargetStatus, fmt.Sprint(convertEcdDesktopPaymentTypeResponse(object["DesktopStatus"]))))
}
}
return object, fmt.Sprint(convertEcdDesktopPaymentTypeResponse(object["ChargeType"])), nil
}
}
func (s *EcdService) DescribeEcdImage(id string) (object map[string]interface{}, err error) {
var response map[string]interface{}
client := s.client
action := "DescribeImages"
request := map[string]interface{}{
"RegionId": s.client.RegionId,
"ImageId": []string{id},
}
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
response, err = client.RpcPost("ecd", "2020-09-30", 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("$.Images", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.Images", response)
}
if len(v.([]interface{})) < 1 {
return object, WrapErrorf(NotFoundErr("ECD", id), NotFoundWithResponse, response)
} else {
if fmt.Sprint(v.([]interface{})[0].(map[string]interface{})["ImageId"]) != id {
return object, WrapErrorf(NotFoundErr("ECD", id), NotFoundWithResponse, response)
}
}
object = v.([]interface{})[0].(map[string]interface{})
return object, nil
}
func (s *EcdService) EcdImageStateRefreshFunc(id string, failStates []string) resource.StateRefreshFunc {
return func() (interface{}, string, error) {
object, err := s.DescribeEcdImage(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
}
}
func (s *EcdService) DescribeEcdCommand(id string) (object map[string]interface{}, err error) {
var response map[string]interface{}
client := s.client
action := "DescribeInvocations"
request := map[string]interface{}{
"RegionId": s.client.RegionId,
"InvokeId": id,
}
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
response, err = client.RpcPost("ecd", "2020-09-30", 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("$.Invocations", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.Invocations", response)
}
if len(v.([]interface{})) < 1 {
return object, WrapErrorf(NotFoundErr("ECD", id), NotFoundWithResponse, response)
} else {
if fmt.Sprint(v.([]interface{})[0].(map[string]interface{})["InvokeId"]) != id {
return object, WrapErrorf(NotFoundErr("ECD", id), NotFoundWithResponse, response)
}
}
object = v.([]interface{})[0].(map[string]interface{})
return object, nil
}
func (s *EcdService) EcdCommandStateRefreshFunc(id string, failStates []string) resource.StateRefreshFunc {
return func() (interface{}, string, error) {
object, err := s.DescribeEcdCommand(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["InvocationStatus"]) == failState {
return object, fmt.Sprint(object["InvocationStatus"]), WrapError(Error(FailedToReachTargetStatus, fmt.Sprint(object["InvocationStatus"])))
}
}
return object, fmt.Sprint(object["InvocationStatus"]), nil
}
}
func (s *EcdService) DescribeEcdSnapshot(id string) (object map[string]interface{}, err error) {
client := s.client
request := map[string]interface{}{
"SnapshotId": id,
"RegionId": s.client.RegionId,
}
var response map[string]interface{}
action := "DescribeSnapshots"
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
resp, err := client.RpcPost("ecd", "2020-09-30", action, nil, request, true)
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 {
return object, WrapErrorf(err, DefaultErrorMsg, id, action, AlibabaCloudSdkGoERROR)
}
v, err := jsonpath.Get("$.Snapshots", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.Snapshots", response)
}
if len(v.([]interface{})) < 1 {
return object, WrapErrorf(NotFoundErr("Snapshot", id), NotFoundWithResponse, response)
}
return v.([]interface{})[0].(map[string]interface{}), nil
}
func (s *EcdService) DescribeEcdBundle(id string) (object map[string]interface{}, err error) {
var response map[string]interface{}
action := "DescribeBundles"
client := s.client
request := map[string]interface{}{
"RegionId": s.client.RegionId,
"BundleId": []string{id},
}
idExist := false
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
response, err = client.RpcPost("ecd", "2020-09-30", 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)
}
resp, err := jsonpath.Get("$.Bundles", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.Bundles", response)
}
if v, ok := resp.([]interface{}); !ok || len(v) < 1 {
return object, WrapErrorf(NotFoundErr("ECD:Bundle", id), NotFoundWithResponse, response)
}
for _, v := range resp.([]interface{}) {
if fmt.Sprint(v.(map[string]interface{})["BundleId"]) == id {
idExist = true
return v.(map[string]interface{}), nil
}
}
if !idExist {
return object, WrapErrorf(NotFoundErr("ECD:Bundle", id), NotFoundWithResponse, response)
}
return object, nil
}
func (s *EcdService) DescribeEcdRamDirectory(id string) (object map[string]interface{}, err error) {
var response map[string]interface{}
client := s.client
action := "DescribeDirectories"
request := map[string]interface{}{
"RegionId": s.client.RegionId,
"DirectoryId": []string{id},
}
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
response, err = client.RpcPost("ecd", "2020-09-30", 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("$.Directories", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.Directories", response)
}
if len(v.([]interface{})) < 1 {
return object, WrapErrorf(NotFoundErr("ECD", id), NotFoundWithResponse, response)
} else {
if fmt.Sprint(v.([]interface{})[0].(map[string]interface{})["DirectoryId"]) != id {
return object, WrapErrorf(NotFoundErr("ECD", id), NotFoundWithResponse, response)
}
}
object = v.([]interface{})[0].(map[string]interface{})
return object, nil
}
func (s *EcdService) DescribeEcdAdConnectorDirectory(id string) (object map[string]interface{}, err error) {
var response map[string]interface{}
client := s.client
action := "DescribeDirectories"
request := map[string]interface{}{
"RegionId": s.client.RegionId,
"DirectoryId": []string{id},
}
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
response, err = client.RpcPost("ecd", "2020-09-30", 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("$.Directories", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.Directories", response)
}
if len(v.([]interface{})) < 1 {
return object, WrapErrorf(NotFoundErr("ECD", id), NotFoundWithResponse, response)
} else {
if fmt.Sprint(v.([]interface{})[0].(map[string]interface{})["DirectoryId"]) != id {
return object, WrapErrorf(NotFoundErr("ECD", id), NotFoundWithResponse, response)
}
}
object = v.([]interface{})[0].(map[string]interface{})
return object, nil
}
func (s *EcdService) DescribeEcdAdConnectorOfficeSite(id string) (object map[string]interface{}, err error) {
var response map[string]interface{}
client := s.client
action := "DescribeOfficeSites"
request := map[string]interface{}{
"RegionId": s.client.RegionId,
"OfficeSiteId": []string{id},
}
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(5*time.Minute, func() *resource.RetryError {
response, err = client.RpcPost("ecd", "2020-09-30", 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("$.OfficeSites", response)
if err != nil {
return object, WrapErrorf(err, FailedGetAttributeMsg, id, "$.OfficeSites", response)
}
if len(v.([]interface{})) < 1 {
return object, WrapErrorf(NotFoundErr("ECD", id), NotFoundWithResponse, response)
} else {
if fmt.Sprint(v.([]interface{})[0].(map[string]interface{})["OfficeSiteId"]) != id {
return object, WrapErrorf(NotFoundErr("ECD", id), NotFoundWithResponse, response)
}
}
object = v.([]interface{})[0].(map[string]interface{})
return object, nil
}
func (s *EcdService) EcdAdConnectorOfficeSiteStateRefreshFunc(id string, failStates []string) resource.StateRefreshFunc {
return func() (interface{}, string, error) {
object, err := s.DescribeEcdAdConnectorOfficeSite(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
}
}