alibabacloudstack/resource_apsarastack_ascm_user_usergroup.go (183 lines of code) (raw):
package alibabacloudstack
import (
"encoding/json"
"fmt"
"strconv"
"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/schema"
)
func resourceAlibabacloudStackAscmUserGroupUser() *schema.Resource {
resource := &schema.Resource{
Schema: map[string]*schema.Schema{
"user_group_id": {
Type: schema.TypeInt,
Required: true,
ForceNew: true,
},
"login_names": {
Type: schema.TypeSet,
Optional: true,
Elem: &schema.Schema{Type: schema.TypeString},
},
},
}
setResourceFunc(resource, resourceAlibabacloudStackAscmUserGroupUserCreate, resourceAlibabacloudStackAscmUserGroupUserRead, resourceAlibabacloudStackAscmUserGroupUserUpdate, resourceAlibabacloudStackAscmUserGroupUserDelete)
return resource
}
func resourceAlibabacloudStackAscmUserGroupUserCreate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AlibabacloudStackClient)
userGroupId := d.Get("user_group_id").(int)
var loginNamesList []string
if v, ok := d.GetOk("login_names"); ok {
loginNames := expandStringList(v.(*schema.Set).List())
loginNamesList = append(loginNamesList, loginNames...)
}
body := map[string]interface{}{
"userGroupId": userGroupId,
"loginNameList": loginNamesList,
}
request := client.NewCommonRequest("POST", "ascm", "2019-05-10", "AddUsersToUserGroup", "/ascm/auth/user/addUsersToUserGroup")
jsonData, err := json.Marshal(body)
if err != nil {
return errmsgs.WrapError(fmt.Errorf("Error marshaling to JSON: %v", err))
}
request.SetContentType(requests.Json)
request.SetContent(jsonData)
bresponse, err := client.ProcessCommonRequest(request)
if err != nil {
if bresponse == nil {
return errmsgs.WrapErrorf(err, "Process Common Request Failed")
}
errmsg := errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse)
return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, "alibabacloudstack_ascm_usergroup_user", "AddUsersToUserGroup", errmsg)
}
if bresponse.GetHttpStatus() != 200 {
errmsg := ""
if bresponse != nil {
errmsg = errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse)
}
return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, "alibabacloudstack_ascm_usergroup_user", "AddUsersToUserGroup", errmsgs.AlibabacloudStackSdkGoERROR, errmsg)
}
addDebug("AddUsersToUserGroup", bresponse, nil, bresponse.GetHttpContentString())
d.SetId(strconv.Itoa(userGroupId))
return nil
}
func resourceAlibabacloudStackAscmUserGroupUserRead(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AlibabacloudStackClient)
ascmService := AscmService{client}
object, err := ascmService.DescribeAscmUsergroupUser(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
}
var loginNames []string
for _, data := range object.Data {
loginNames = append(loginNames, data.LoginName)
}
user_group_id, _ := strconv.Atoi(d.Id())
d.Set("user_group_id", user_group_id)
d.Set("login_names", loginNames)
return nil
}
func resourceAlibabacloudStackAscmUserGroupUserUpdate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AlibabacloudStackClient)
ascmService := AscmService{client}
object, err := ascmService.DescribeAscmUsergroupUser(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
}
var loginNames []string
for _, data := range object.Data {
loginNames = append(loginNames, data.LoginName)
}
userGroupId := d.Get("user_group_id").(int)
body := map[string]interface{}{
"userGroupId": userGroupId,
"loginNameList": loginNames,
}
request := client.NewCommonRequest("POST", "ascm", "2019-05-10", "RemoveUsersFromUserGroup", "/ascm/auth/user/removeUsersFromUserGroup")
jsonData, err := json.Marshal(body)
if err != nil {
return errmsgs.WrapError(fmt.Errorf("Error marshaling to JSON: %v", err))
}
request.SetContentType(requests.Json)
request.SetContent(jsonData)
bresponse, err := client.ProcessCommonRequest(request)
if err != nil {
if bresponse == nil {
return errmsgs.WrapErrorf(err, "Process Common Request Failed")
}
errmsg := errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse)
return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, "alibabacloudstack_ascm_usergroup_user", "RemoveUsersFromUserGroup", errmsg)
}
var loginNamesList []string
if v, ok := d.GetOk("login_names"); ok {
loginNames := expandStringList(v.(*schema.Set).List())
loginNamesList = append(loginNamesList, loginNames...)
}
body = map[string]interface{}{
"userGroupId": userGroupId,
"loginNameList": loginNamesList,
}
request = client.NewCommonRequest("POST", "ascm", "2019-05-10", "AddUsersToUserGroup", "/ascm/auth/user/addUsersToUserGroup")
jsonData, err = json.Marshal(body)
if err != nil {
return errmsgs.WrapError(fmt.Errorf("Error marshaling to JSON: %v", err))
}
request.SetContentType(requests.Json)
request.SetContent(jsonData)
bresponse, err = client.ProcessCommonRequest(request)
if err != nil {
if bresponse == nil {
return errmsgs.WrapErrorf(err, "Process Common Request Failed")
}
errmsg := errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse)
return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, "alibabacloudstack_ascm_usergroup_user", "AddUsersToUserGroup", errmsg)
}
return nil
}
func resourceAlibabacloudStackAscmUserGroupUserDelete(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AlibabacloudStackClient)
var loginNames []string
userGroupId := d.Get("user_group_id").(int)
if v, ok := d.GetOk("login_names"); ok {
loginNames = expandStringList(v.(*schema.Set).List())
}
body := map[string]interface{}{
"userGroupId": userGroupId,
"LoginNameList": loginNames,
}
request := client.NewCommonRequest("POST", "ascm", "2019-05-10", "RemoveUsersFromUserGroup", "/ascm/auth/user/removeUsersFromUserGroup")
jsonData, err := json.Marshal(body)
if err != nil {
return errmsgs.WrapError(fmt.Errorf("Error marshaling to JSON: %v", err))
}
request.SetContentType(requests.Json)
request.SetContent(jsonData)
bresponse, err := client.ProcessCommonRequest(request)
if err != nil {
if bresponse == nil {
return errmsgs.WrapErrorf(err, "Process Common Request Failed")
}
errmsg := errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse)
return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, "alibabacloudstack_ascm_usergroup_user", "RemoveUsersFromUserGroup", errmsg)
}
return nil
}