alibabacloudstack/resource_apsarastack_maxcompute_user.go (176 lines of code) (raw):

package alibabacloudstack import ( "fmt" "log" "strconv" "time" "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/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" ) func resourceAlibabacloudStackMaxcomputeUser() *schema.Resource { resource := &schema.Resource{ Timeouts: &schema.ResourceTimeout{ Delete: schema.DefaultTimeout(2 * time.Minute), }, Schema: map[string]*schema.Schema{ "id": { Type: schema.TypeString, Computed: true, ForceNew: true, }, "user_id": { Type: schema.TypeString, Computed: true, ForceNew: true, }, "user_pk": { Type: schema.TypeString, Computed: true, ForceNew: true, }, "user_name": { Type: schema.TypeString, Required: true, }, "user_type": { Type: schema.TypeString, Computed: true, ForceNew: true, }, "organization_id": { Type: schema.TypeInt, Optional: true, }, "organization_name": { Type: schema.TypeString, Computed: true, }, "description": { Type: schema.TypeString, Required: true, ValidateFunc: validation.StringLenBetween(2, 255), }, }, } setResourceFunc(resource, resourceAlibabacloudStackMaxcomputeUserCreate, resourceAlibabacloudStackMaxcomputeUserRead, resourceAlibabacloudStackMaxcomputeUserUpdate, resourceAlibabacloudStackMaxcomputeUserDelete) return resource } func resourceAlibabacloudStackMaxcomputeUserCreate(d *schema.ResourceData, meta interface{}) (err error) { client := meta.(*connectivity.AlibabacloudStackClient) var response map[string]interface{} action := "CreateOdpsUser" request := make(map[string]interface{}) request["UserName"] = d.Get("user_name") if v, ok := d.GetOk("organization_id"); ok { request["OrganizationId"] = v } else { request["OrganizationId"] = client.Department } request["Description"] = d.Get("description") response, err = client.DoTeaRequest("POST", "ascm", "2019-05-10", action, "", nil, nil, request) if err != nil { return err } if fmt.Sprintf(`%v`, response["code"]) != "200" { return errmsgs.WrapError(errmsgs.Error("CreateUpdateOdpsUser failed for ")) } return } func resourceAlibabacloudStackMaxcomputeUserRead(d *schema.ResourceData, meta interface{}) error { client := meta.(*connectivity.AlibabacloudStackClient) maxcomputeService := MaxcomputeService{client} object, err := maxcomputeService.DescribeMaxcomputeUser(d.Get("user_name").(string)) if err != nil { if errmsgs.NotFoundError(err) { log.Printf("[DEBUG] Resource alibabacloudstack_maxcompute_project_user maxcomputeService.DescribeMaxcomputeUser Failed!!! %s", err) d.SetId("") return nil } return errmsgs.WrapError(err) } d.SetId(strconv.Itoa(object.Data[0].ID)) d.Set("user_id", object.Data[0].UserID) d.Set("user_pk", object.Data[0].UserPK) d.Set("user_name", object.Data[0].UserName) d.Set("user_type", object.Data[0].UserType) d.Set("organization_id", object.Data[0].OrganizationId) d.Set("organization_name", object.Data[0].OrganizationName) d.Set("description", object.Data[0].Description) return nil } func resourceAlibabacloudStackMaxcomputeUserUpdate(d *schema.ResourceData, meta interface{}) error { client := meta.(*connectivity.AlibabacloudStackClient) update := false if d.HasChange("user_name") { update = true } if d.HasChange("organization_id") { update = true } if d.HasChange("organization_name") { update = true } if d.HasChange("description") { update = true } if update { var requestInfo *ecs.Client roleId, err := client.RoleIds() if err != nil { err = errmsgs.WrapErrorf(errmsgs.Error(errmsgs.GetNotFoundMessage("ASCM User", "defaultRoleId")), errmsgs.NotFoundMsg, errmsgs.ProviderERROR) return errmsgs.WrapErrorf(err, errmsgs.NotFoundMsg, errmsgs.AlibabacloudStackSdkGoERROR) } OrganizationId := "" if v, ok := d.GetOk("organization_id"); ok { OrganizationId = strconv.Itoa(v.(int)) } else { OrganizationId = client.Department } commonRequest := client.NewCommonRequest("POST", "ascm", "2019-05-10", "UpdateOdpsUser", "/ascm/manage/resource_mgmt/updateOdpsUser") mergeMaps(commonRequest.QueryParams, map[string]string{ "Id": d.Get("id").(string), "UserId": d.Get("user_id").(string), "UserName": d.Get("user_name").(string), "UserType": d.Get("user_type").(string), "OrganizationId": OrganizationId, "OrganizationName": d.Get("organization_name").(string), "Description": d.Get("description").(string), }) commonRequest.Headers["x-acs-roleid"] = strconv.Itoa(roleId) raw, err := client.WithEcsClient(func(ecsClient *ecs.Client) (interface{}, error) { return ecsClient.ProcessCommonRequest(commonRequest) }) if err != nil { if errmsgs.IsExpectedErrors(err, []string{"Error OdpsUser Not Found"}) { return errmsgs.WrapErrorf(err, errmsgs.NotFoundMsg, errmsgs.AlibabacloudStackSdkGoERROR) } errmsg := "" return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, d.Get("user_name").(string), "UpdateOdpsUser", errmsgs.AlibabacloudStackSdkGoERROR, errmsg) } addDebug("UpdateOdpsUser", raw, requestInfo, commonRequest) } return nil } func resourceAlibabacloudStackMaxcomputeUserDelete(d *schema.ResourceData, meta interface{}) error { // ASCM does not support deletion return nil client := meta.(*connectivity.AlibabacloudStackClient) action := "DeleteOdpsCu" request := make(map[string]interface{}) request["CuId"] = d.Id() request["CuName"] = d.Get("cu_name") request["ClusterName"] = d.Get("cluster_name") response, err := client.DoTeaRequest("POST", "ascm", "2019-05-10", action, "", nil, nil, request) if err != nil { return err } if errmsgs.IsExpectedErrorCodes(fmt.Sprintf("%v", response["code"]), []string{"102", "403"}) { return nil } if fmt.Sprintf(`%v`, response["code"]) != "200" { return errmsgs.WrapError(errmsgs.Error("DeleteOdpsCu failed for " + response["Message"].(string))) } return nil }