alibabacloudstack/resource_apsarastack_ascm_user_group_resource_set_binding.go (125 lines of code) (raw):
package alibabacloudstack
import (
"time"
"fmt"
"strings"
"strconv"
"github.com/aliyun/alibaba-cloud-sdk-go/services/ecs"
"github.com/aliyun/terraform-provider-alibabacloudstack/alibabacloudstack/connectivity"
"github.com/aliyun/terraform-provider-alibabacloudstack/alibabacloudstack/errmsgs"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
)
func resourceAlibabacloudStackAscmUserGroupResourceSetBinding() *schema.Resource {
resource := &schema.Resource{
Schema: map[string]*schema.Schema{
"resource_set_id": {
Type: schema.TypeString,
Optional: true,
ForceNew: true,
},
"user_group_id": {
Type: schema.TypeString,
Required: true,
ForceNew: true,
},
"ascm_role_id": {
Type: schema.TypeString,
Optional: true,
ForceNew: true,
},
},
}
setResourceFunc(resource,
resourceAlibabacloudStackAscmUserGroupResourceSetBindingCreate,
resourceAlibabacloudStackAscmUserGroupResourceSetBindingRead,
nil,
resourceAlibabacloudStackAscmUserGroupResourceSetBindingDelete)
return resource
}
func resourceAlibabacloudStackAscmUserGroupResourceSetBindingCreate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AlibabacloudStackClient)
var requestInfo *ecs.Client
resourceSetId := d.Get("resource_set_id").(string)
userGroupId := d.Get("user_group_id").(string)
ascmRoleId := d.Get("ascm_role_id").(string)
request := client.NewCommonRequest("POST", "ascm", "2019-05-10", "AddResourceSetToUserGroup", "/ascm/auth/user/addResourceSetToUserGroup")
mergeMaps(request.QueryParams, map[string]string{
"ProductName": "ascm",
"userGroupId": userGroupId,
"resourceSetId": resourceSetId,
"ascmRoleId": ascmRoleId,
})
bresponse, err := client.ProcessCommonRequest(request)
if err != nil {
errmsg := ""
if bresponse != nil {
errmsg = errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse)
}
return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, "alibabacloudstack_ascm_user_group_resource_set_binding", "AddResourceSetToUserGroup", errmsgs.AlibabacloudStackSdkGoERROR, errmsg)
}
addDebug("AddResourceSetToUserGroup", bresponse, requestInfo, request)
if bresponse.GetHttpStatus() != 200 {
errmsg := errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse)
return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, "alibabacloudstack_ascm_user_group_resource_set_binding", "AddResourceSetToUserGroup", errmsgs.AlibabacloudStackSdkGoERROR, errmsg)
}
addDebug("AddResourceSetToUserGroup", bresponse, requestInfo, bresponse.GetHttpContentString())
d.SetId(fmt.Sprintf("%s:%s:%s",resourceSetId, userGroupId, ascmRoleId))
return nil
}
func resourceAlibabacloudStackAscmUserGroupResourceSetBindingRead(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AlibabacloudStackClient)
id_infos := strings.Split(d.Id(), ":")
if len(id_infos) == 1 {
// 此时为老数据d.SetId(resourceSetId), 强制修改一次数据的格式
d.SetId(fmt.Sprintf("%s:%s:%s",d.Get("resource_set_id").(string), d.Get("user_group_id").(string), d.Get("ascm_role_id").(string)))
}
ascmService := &AscmService{client: client}
resp, err := ascmService.DescribeAscmUserGroupResourceSetBinding(d.Id())
if err != nil {
if errmsgs.NotFoundError(err) {
d.SetId("")
return nil
}
return errmsgs.WrapError(err)
}
// 确保import动作时可以正常加载
id_infos = strings.Split(d.Id(), ":")
d.Set("resource_set_id", id_infos[0])
d.Set("user_group_id", id_infos[1])
d.Set("ascm_role_id", strconv.Itoa(resp.Data[0].AuthorizedRoleId))
return nil
}
func resourceAlibabacloudStackAscmUserGroupResourceSetBindingDelete(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AlibabacloudStackClient)
ascmService := AscmService{client}
var requestInfo *ecs.Client
_, err := ascmService.DescribeAscmUserGroupResourceSetBinding(d.Id())
if err != nil {
return errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg, d.Id(), "IsBindingExist", errmsgs.AlibabacloudStackSdkGoERROR)
}
addDebug("IsBindingExist", requestInfo, map[string]string{"resourceGroupId": d.Id()})
var resourceSetId, userGroupId string
id_infos := strings.Split(d.Id(), ":")
resourceSetId = id_infos[0]
userGroupId = id_infos[1]
err = resource.Retry(1*time.Minute, func() *resource.RetryError {
request := client.NewCommonRequest("POST", "ascm", "2019-05-10", "RemoveResourceSetFromUserGroup", "/ascm/auth/user/removeResourceSetFromUserGroup")
request.QueryParams["ProductName"] = "ascm"
request.QueryParams["userGroupId"] = userGroupId
request.QueryParams["resourceSetId"] = resourceSetId
bresponse, err := client.ProcessCommonRequest(request)
if err != nil {
errmsg := ""
if bresponse != nil {
errmsg = errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse)
}
return resource.RetryableError(errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, "alibabacloudstack_ascm_user_group_resource_set_binding", "RemoveResourceSetFromUserGroup", errmsgs.AlibabacloudStackSdkGoERROR, errmsg))
}
addDebug("RemoveResourceSetFromUserGroup", bresponse, request)
_, err = ascmService.DescribeAscmUserGroupResourceSetBinding(d.Id())
if err != nil {
return resource.NonRetryableError(err)
}
return nil
})
return nil
}