alibabacloudstack/resource_apsarastack_maxcompute_project.go (187 lines of code) (raw):

package alibabacloudstack import ( "fmt" "log" "strconv" "time" "github.com/aliyun/alibaba-cloud-sdk-go/sdk/responses" "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" ) func resourceAlibabacloudStackMaxcomputeProject() *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, }, "quota_id": { Type: schema.TypeString, Required: true, }, "disk": { Type: schema.TypeInt, Required: true, }, "name": { Type: schema.TypeString, Required: true, }, }, } setResourceFunc(resource, resourceAlibabacloudStackMaxcomputeProjectCreate, resourceAlibabacloudStackMaxcomputeProjectRead, resourceAlibabacloudStackMaxcomputeProjectUpdate, resourceAlibabacloudStackMaxcomputeProjectDelete) return resource } func resourceAlibabacloudStackMaxcomputeProjectCreate(d *schema.ResourceData, meta interface{}) error { client := meta.(*connectivity.AlibabacloudStackClient) roleId, err := client.RoleIds() if err != nil { err = errmsgs.WrapErrorf(errmsgs.Error(errmsgs.GetNotFoundMessage("ASCM User", "defaultRoleId")), errmsgs.NotFoundMsg, errmsgs.ProviderERROR) return err } cluster_name := d.Get("cluster").(string) clusters, err := DescribeMaxcomputeProject(meta) if err != nil { return errmsgs.WrapError(err) } var cluster map[string]interface{} for _, object := range clusters { cluster = object.(map[string]interface{}) if cluster["cluster"].(string) == cluster_name { break } } if cluster == nil { return errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg, "alibabacloudstack_maxcompute_cluster", "getCluster", cluster_name) } disk_size := d.Get("disk").(int) name := d.Get("name").(string) pk := d.Get("pk").(string) request := client.NewCommonRequest("POST", "dataworks-private-cloud", "2019-01-17", "CreateCalcEngineForAscm", "") mergeMaps(request.QueryParams, map[string]string{ "KmsRegion": string(client.Region), "ResourceGroupId": client.ResourceGroup, "Product": "dataworks-private-cloud", "CalcEngineType": "ODPS", "OrganizationId": client.Department, "EnvType": "PRD", "Name": name, "EngineInfo": "{\"taskAk\":{\"kp\":\"" + pk + "\",\"aliyunAccount\":\"ascm-dw-1637809230710\"},\"clusters\":[{\"name\":\"" + cluster_name + "\",\"quota\":" + d.Get("quota_id").(string) + ",\"disk\":" + fmt.Sprintf("%f", float64(disk_size)/1024) + ",\"isDefault\":1,\"projectQuota\":{\"fileLength\":" + strconv.Itoa(disk_size*1024*1024*1024) + ",\"fileNumber\":null}}],\"odpsProjectName\":\"" + name + "\",\"needToCreateOdpsProject\":true,\"defaultClusterArch\":\"" + cluster["core_arch"].(string) + "\",\"isOdpsDev\":false}", "Department": client.Department, "Version": "2019-01-17", "ClusterItem": "{\"cluster\":\"" + cluster_name + "\",\"core_arch\":\"" + cluster["core_arch"].(string) + "\",\"project\":\"" + cluster["project"].(string) + "\",\"region\":\"" + cluster["region"].(string) + "\"}", "ClusterName": cluster_name, "ResourceGroup": client.ResourceGroup, "ExternalTable": strconv.FormatBool(d.Get("external_table").(bool)), "TaskPk": pk, "OdpsName": name, "RegionId": client.RegionId, "CurrentRoleId": strconv.Itoa(roleId), }) if v, ok := d.GetOk("enabled_mc_encrypt"); ok && v.(bool) { request.QueryParams["EnabledMcEncrypt"] = "1" if _, ok := d.GetOk("mc_encrypt_algorithm"); !ok { log.Printf("mc_encrypt_algorithm not set while enable me encrypt") return errmsgs.WrapErrorf(err, errmsgs.DataDefaultErrorMsg, "alibabacloudstack_maxcompute_project", "mc_encrypt_algorithm", errmsgs.AlibabacloudStackSdkGoERROR) } request.QueryParams["McEncryptAlgorithm"] = d.Get("mc_encrypt_algorithm").(string) if _, ok := d.GetOk("mc_encrypt_key"); !ok { log.Printf("mc_encrypt_key not set while enable me encrypt") return errmsgs.WrapErrorf(err, errmsgs.DataDefaultErrorMsg, "alibabacloudstack_maxcompute_project", "mc_encrypt_algorithm", errmsgs.AlibabacloudStackSdkGoERROR) } request.QueryParams["McEncryptKey"] = d.Get("mc_encrypt_key").(string) } if v, ok := d.GetOk("vpc_tunnel_ids"); ok { vpc_tunnel_ids := "" for _, id := range v.([]interface{}) { vpc_tunnel_ids += id.(string) } request.QueryParams["McEncryptKey"] = vpc_tunnel_ids } raw, err := client.WithEcsClient(func(ecsClient *ecs.Client) (interface{}, error) { return ecsClient.ProcessCommonRequest(request) }) log.Printf("response of raw create maxcomputecluster is : %s", raw) bresponse, ok := raw.(*responses.CommonResponse) if err != nil { errmsg := "" if ok { errmsg = errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse) } return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, "alibabacloudstack_maxcompute_project", "Create", errmsg) } addDebug("MaxcomputeProjectCreate", raw, request) if bresponse.GetHttpStatus() != 200 { errmsg := "" if ok { errmsg = errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse) } return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, "alibabacloudstack_maxcompute_project", "Create", errmsg) } addDebug("MaxcomputeProjectCreate", raw, request, bresponse.GetHttpContentString()) return nil } func resourceAlibabacloudStackMaxcomputeProjectRead(d *schema.ResourceData, meta interface{}) error { client := meta.(*connectivity.AlibabacloudStackClient) maxcomputeService := MaxcomputeService{client} objects, err := maxcomputeService.DescribeMaxcomputeProject(d.Get("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) } project := objects.Data.CalcEngines[0] d.SetId(strconv.Itoa(project.EngineId)) return nil } func resourceAlibabacloudStackMaxcomputeProjectUpdate(d *schema.ResourceData, meta interface{}) error { client := meta.(*connectivity.AlibabacloudStackClient) if d.HasChanges("cluster", "disk") { 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) } request := client.NewCommonRequest("POST", "ascm", "2019-05-10", "UpdateOdpsQuota", "/ascm/manage/resource_mgmt/updateOdpsQuota") request.Headers["x-acs-roleid"] = strconv.Itoa(roleId) mergeMaps(request.QueryParams, map[string]string{ "Cluster": d.Get("cluster").(string), "Product": "ascm", "Cu": d.Get("quota_id").(string), "Format": "JSON", "Forwardedregionid": client.RegionId, "Version": "2019-05-10", "RegionId": client.RegionId, "Id": d.Get("id").(string), "Disk": fmt.Sprintf("%f", float64(d.Get("disk").(int))/1024), }) raw, err := client.WithEcsClient(func(ecsClient *ecs.Client) (interface{}, error) { return ecsClient.ProcessCommonRequest(request) }) bresponse, ok := raw.(*responses.CommonResponse) if err != nil { errmsg := "" if ok { errmsg = errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse) } if errmsgs.IsExpectedErrors(err, []string{"ErrorOdpsQuota Not Found"}) { return errmsgs.WrapErrorf(err, errmsgs.NotFoundMsg, errmsgs.AlibabacloudStackSdkGoERROR) } return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, d.Get("user_name").(string), "UpdateOdpsQuota", errmsg) } addDebug("UpdateOdpsQuota", raw, request) } return nil } func resourceAlibabacloudStackMaxcomputeProjectDelete(d *schema.ResourceData, meta interface{}) error { // 不支持删除 return nil }