alibabacloudstack/resource_apsarastack_ascm_user_group_role_binding.go (182 lines of code) (raw):
package alibabacloudstack
import (
"encoding/json"
"fmt"
"log"
"strconv"
"time"
"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
"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 resourceAlibabacloudStackAscmUserGroupRoleBinding() *schema.Resource {
resource := &schema.Resource{
Schema: map[string]*schema.Schema{
"user_group_id": {
Type: schema.TypeInt,
Required: true,
},
"role_ids": {
Type: schema.TypeSet,
Optional: true,
Elem: &schema.Schema{Type: schema.TypeInt},
},
},
DeprecationMessage: "ascm_user_group already includes corresponding functions",
}
setResourceFunc(resource,
resourceAlibabacloudStackAscmUserGroupRoleBindingCreate,
resourceAlibabacloudStackAscmUserGroupRoleBindingRead,
resourceAlibabacloudStackAscmUserGroupRoleBindingUpdate,
resourceAlibabacloudStackAscmUserGroupRoleBindingDelete)
return resource
}
func resourceAlibabacloudStackAscmUserGroupRoleBindingCreate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AlibabacloudStackClient)
userGroupId := d.Get("user_group_id").(int)
flag := false
var roleids []int
if v, ok := d.GetOk("role_ids"); ok {
roleids = expandIntList(v.(*schema.Set).List())
}
log.Printf("roleids is %v", roleids)
flag = true
if flag {
for i := range roleids {
request := client.NewCommonRequest("POST", "ascm", "2019-05-10", "AddRoleToUserGroup", "/ascm/auth/user/addRoleToUserGroup")
mergeMaps(request.QueryParams, map[string]string{
"ProductName": "ascm",
"userGroupId": strconv.Itoa(userGroupId),
"RoleId": fmt.Sprint(roleids[i]),
"SecurityToken": client.Config.SecurityToken,
"SignatureVersion": "1.0",
"SignatureMethod": "HMAC-SHA1",
})
bresponse, err := client.ProcessCommonRequest(request)
log.Printf("response of raw AddRoleToUserGroup Role(%d) is : %s", roleids[i], bresponse)
if err != nil {
errmsg := ""
if bresponse != nil {
errmsg = errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse)
}
return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, "alibabacloudstack_ascm_usergroup_role_binding", "AddRoleToUserGroup", errmsgs.AlibabacloudStackSdkGoERROR, errmsg)
}
addDebug("AddRoleToUserGroup", bresponse, request, request.QueryParams)
if bresponse.GetHttpStatus() != 200 {
errmsg := errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse)
return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, "alibabacloudstack_ascm_usergroup_role_binding", "AddRoleToUserGroup", errmsgs.AlibabacloudStackSdkGoERROR, errmsg)
}
log.Printf("response of queryparams AddRoleToUserGroup is : %s", request.QueryParams)
}
}
d.SetId(strconv.Itoa(userGroupId))
return nil
}
func resourceAlibabacloudStackAscmUserGroupRoleBindingRead(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AlibabacloudStackClient)
ascmService := AscmService{client}
object, err := ascmService.DescribeAscmUserGroupRoleBinding(d.Id())
if err != nil {
if errmsgs.NotFoundError(err) {
d.SetId("")
return nil
}
return errmsgs.WrapError(err)
}
if len(object.Data) == 0 {
d.SetId("")
return nil
}
atoi, err := strconv.Atoi(d.Id())
d.Set("user_group_id", atoi)
return nil
}
func resourceAlibabacloudStackAscmUserGroupRoleBindingUpdate(d *schema.ResourceData, meta interface{}) error {
var roleIdList []string
if v, ok := d.GetOk("role_ids"); ok {
roleids := expandIntList(v.(*schema.Set).List())
for _, roleid := range roleids {
roleIdList = append(roleIdList, strconv.Itoa(roleid))
}
}
user_group_id := d.Get("user_group_id").(int)
client := meta.(*connectivity.AlibabacloudStackClient)
request := client.NewCommonRequest("POST", "ascm", "2019-05-10", "ResetRolesForUserGroup", "/ascm/auth/user/resetRolesForUserGroup")
request.Headers["x-ascm-product-version"] = "2019-05-10"
QueryParams := map[string]interface{}{
"userGroupId": strconv.Itoa(user_group_id),
"roleIdList": roleIdList,
"SecurityToken": client.Config.SecurityToken,
"SignatureVersion": "1.0",
"SignatureMethod": "HMAC-SHA1",
}
requeststring, _ := json.Marshal(QueryParams)
request.SetContent(requeststring)
request.Headers["Content-Type"] = requests.Json
bresponse, err := client.ProcessCommonRequest(request)
log.Printf("response of raw ResetRolesForUserGroup is : %s", bresponse)
if err != nil {
errmsg := ""
if bresponse != nil {
errmsg = errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse)
}
return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, "alibabacloudstack_ascm_user", "ResetRolesForUserGroup", errmsgs.AlibabacloudStackSdkGoERROR, errmsg)
}
addDebug("ResetRolesForUserGroup", bresponse, request)
return nil
}
func resourceAlibabacloudStackAscmUserGroupRoleBindingDelete(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AlibabacloudStackClient)
ascmService := AscmService{client}
var roleid int
flag := false
var roleids []int
if v, ok := d.GetOk("role_ids"); ok {
roleids = expandIntList(v.(*schema.Set).List())
for i := range roleids {
if len(roleids) > 1 {
roleid = roleids[i]
flag = true
} else {
roleid = roleids[0]
flag = true
}
}
}
log.Printf("roleid is %v", roleid)
log.Printf("roleids is %v", roleids)
_, err := ascmService.DescribeAscmUserGroupRoleBinding(d.Id())
if err != nil {
return errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg, d.Id(), "IsBindingExist", errmsgs.AlibabacloudStackSdkGoERROR)
}
err = resource.Retry(2*time.Minute, func() *resource.RetryError {
if flag {
request := client.NewCommonRequest("POST", "ascm", "2019-05-10", "RemoveRoleFromUserGroup", "/ascm/auth/user/removeRoleFromUserGroup")
mergeMaps(request.QueryParams, map[string]string{
"ProductName": "ascm",
"userGroupId": d.Id(),
"roleId": fmt.Sprint(roleid),
})
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, d.Id(), "RemoveRoleFromUserGroup", errmsgs.AlibabacloudStackSdkGoERROR, errmsg))
}
_, err = ascmService.DescribeAscmUserGroupRoleBinding(d.Id())
if err != nil {
return resource.NonRetryableError(err)
}
addDebug("RemoveRoleFromUserGroup", bresponse, request)
}
return nil
})
if err != nil {
return errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg, d.Id(), "RemoveRoleFromUserGroup", errmsgs.AlibabacloudStackSdkGoERROR)
}
return nil
}