func resourceAlibabacloudStackAscmQuotaUpdate()

in alibabacloudstack/resource_apsarastack_ascm_quota.go [202:428]


func resourceAlibabacloudStackAscmQuotaUpdate(d *schema.ResourceData, meta interface{}) error {
	client := meta.(*connectivity.AlibabacloudStackClient)
	ascmService := AscmService{client}
	attributeUpdate := false
	check, err := ascmService.DescribeAscmQuota(d.Id())
	did := strings.Split(d.Id(), COLON_SEPARATED)
	if err != nil {
		return errmsgs.WrapErrorf(err, errmsgs.DefaultErrorMsg, d.Id(), "IsQuotaExist", errmsgs.AlibabacloudStackSdkGoERROR)
	}

	var quotaBody string
	switch did[0] {
	case "VPC":
		var totalVPC int
		if d.HasChange("total_vpc") {
			if v, ok := d.GetOk("total_vpc"); ok {
				totalVPC = v.(int)
			}
			check.Data.TotalVPC = totalVPC
			attributeUpdate = true
		} else {
			if v, ok := d.GetOk("total_vpc"); ok {
				totalVPC = v.(int)
			}
			check.Data.TotalVPC = totalVPC
		}
		quotaBody = fmt.Sprintf("{\"totalVPC\":%d}", totalVPC)
	case "RDS":
		var totalDISK, totalCPU, totalMEM int
		if d.HasChange("total_mem") {
			if v, ok := d.GetOk("total_mem"); ok {
				totalMEM = v.(int)
			}
			check.Data.TotalMem = totalMEM
			attributeUpdate = true
		}
		if d.HasChange("total_disk") {
			if v, ok := d.GetOk("total_disk"); ok {
				totalDISK = v.(int)
			}
			check.Data.TotalDisk = totalDISK
			attributeUpdate = true
		}
		if d.HasChange("total_cpu") {
			if v, ok := d.GetOk("total_cpu"); ok {
				totalCPU = v.(int)
			}
			check.Data.TotalCPU = totalCPU
			attributeUpdate = true
		}
		quotaBody = fmt.Sprintf("{\"totalCpu\":%d,\"totalMem\":%d,\"totalDisk\":%d}", totalCPU, totalMEM, totalDISK)
	case "EIP":
		var totalEIP int
		if d.HasChange("total_eip") {
			if v, ok := d.GetOk("total_eip"); ok {
				totalEIP = v.(int)
			}
			check.Data.TotalMem = totalEIP
			attributeUpdate = true
		}
		quotaBody = fmt.Sprintf("{\"totalEIP\":%d}", totalEIP)
	case "ECS":
		var totalGPU, totalCPU, totalMEM, totalDCE, totalDCS int
		if d.HasChange("total_cpu") {
			if v, ok := d.GetOk("total_cpu"); ok {
				totalCPU = v.(int)
			}
			check.Data.TotalCPU = totalCPU
			attributeUpdate = true
		}
		if d.HasChange("total_gpu") {
			if v, ok := d.GetOk("total_gpu"); ok {
				totalGPU = v.(int)
			}
			check.Data.TotalGpu = totalGPU
			attributeUpdate = true
		}
		if d.HasChange("total_mem") {
			if v, ok := d.GetOk("total_mem"); ok {
				totalMEM = v.(int)
			}
			check.Data.TotalMem = totalMEM
			attributeUpdate = true
		}
		if d.HasChange("total_disk_cloud_ssd") {
			if v, ok := d.GetOk("total_disk_cloud_ssd"); ok {
				totalDCS = v.(int)
			}
			check.Data.TotalDiskCloudSsd = totalDCS
			attributeUpdate = true
		}
		if d.HasChange("total_disk_cloud_efficiency") {
			if v, ok := d.GetOk("total_disk_cloud_efficiency"); ok {
				totalDCE = v.(int)
			}
			check.Data.TotalDiskCloudEfficiency = totalDCE
			attributeUpdate = true
		}
		quotaBody = fmt.Sprintf("{\"totalCpu\":%d,\"totalMem\":%d,\"totalGpu\":%d,\"totalDisk_cloud_ssd\":%d,\"totalDisk_cloud_efficiency\":%d}", totalCPU, totalMEM, totalGPU, totalDCS, totalDCE)
	case "SLB":
		var totalVP, totalVI int
		if d.HasChange("total_vip_internal") {
			if v, ok := d.GetOk("total_vip_internal"); ok {
				totalVI = v.(int)
			}
			check.Data.TotalVipInternal = totalVI
			attributeUpdate = true
		}
		if d.HasChange("total_vip_public") {
			if v, ok := d.GetOk("total_vip_public"); ok {
				totalVP = v.(int)
			}
			check.Data.TotalVipPublic = totalVP
			attributeUpdate = true
		}
		quotaBody = fmt.Sprintf("{\"totalVipPublic\":%d,\"totalVipInternal\":%d}", totalVP, totalVI)
	case "OSS":
		var totalAmount int
		if d.HasChange("total_amount") {
			if v, ok := d.GetOk("total_amount"); ok {
				totalAmount = v.(int)
			}
			check.Data.TotalAmount = totalAmount
			attributeUpdate = true
		}
		quotaBody = fmt.Sprintf("{\"totalAmount\":%d}", totalAmount)
	case "DDS":
		var totalDISK, totalCPU, totalMEM int
		if d.HasChange("total_mem") {
			if v, ok := d.GetOk("total_mem"); ok {
				totalMEM = v.(int)
			}
			check.Data.TotalMem = totalMEM
			attributeUpdate = true
		}
		if d.HasChange("total_disk") {
			if v, ok := d.GetOk("total_disk"); ok {
				totalDISK = v.(int)
			}
			check.Data.TotalDisk = totalDISK
			attributeUpdate = true
		}
		if d.HasChange("total_cpu") {
			if v, ok := d.GetOk("total_cpu"); ok {
				totalCPU = v.(int)
			}
			check.Data.TotalCPU = totalCPU
			attributeUpdate = true
		}
		quotaBody = fmt.Sprintf("{\"totalCpu\":%d,\"totalMem\":%d,\"totalDisk\":%d}", totalCPU, totalMEM, totalDISK)
	case "ODPS":
		var totalDISK, totalCU int
		if d.HasChange("total_disk") {
			if v, ok := d.GetOk("total_disk"); ok {
				totalDISK = v.(int)
			}
			check.Data.TotalDisk = totalDISK
			attributeUpdate = true
		}
		if d.HasChange("total_cu") {
			if v, ok := d.GetOk("total_cu"); ok {
				totalCU = v.(int)
			}
			check.Data.TotalCU = totalCU
			attributeUpdate = true
		}
		quotaBody = fmt.Sprintf("{\"totalCu\":%d,\"totalDisk\":%d}", totalCU, totalDISK)
	case "GPDB":
		var totalDISK, totalCPU, totalMEM int
		if d.HasChange("total_mem") {
			if v, ok := d.GetOk("total_mem"); ok {
				totalMEM = v.(int)
			}
			check.Data.TotalMem = totalMEM
			attributeUpdate = true
		}
		if d.HasChange("total_disk") {
			if v, ok := d.GetOk("total_disk"); ok {
				totalDISK = v.(int)
			}
			check.Data.TotalDisk = totalDISK
			attributeUpdate = true
		}
		if d.HasChange("total_cpu") {
			if v, ok := d.GetOk("total_cpu"); ok {
				totalCPU = v.(int)
			}
			check.Data.TotalCPU = totalCPU
			attributeUpdate = true
		}
		quotaBody = fmt.Sprintf("{\"totalCpu\":%d,\"totalMem\":%d,\"totalDisk\":%d}", totalCPU, totalMEM, totalDISK)
	case "R-KVSTORE":
		var totalMEM int
		if d.HasChange("total_mem") {
			if v, ok := d.GetOk("total_mem"); ok {
				totalMEM = v.(int)
			}
			check.Data.TotalMem = totalMEM
			attributeUpdate = true
		}
		quotaBody = fmt.Sprintf("{\"totalMem\":%d}", totalMEM)
	}

	if attributeUpdate {
		request := client.NewCommonRequest("POST", "ascm", "2019-05-10", "UpdateQuota", "/ascm/manage/quota/update")
		request.QueryParams["regionName"] = client.RegionId
		request.QueryParams["quotaType"] = did[1]
		request.QueryParams["quotaTypeId"] = did[2]
		request.QueryParams["productName"] = did[0]
		request.QueryParams["targetType"] = ""
		request.QueryParams["quotaBody"] = quotaBody

		raw, err := client.WithEcsClient(func(ecsClient *ecs.Client) (interface{}, error) {
			return ecsClient.ProcessCommonRequest(request)
		})
		if err != nil {
			errmsg := ""
			if bresponse, ok := raw.(*responses.CommonResponse); ok {
				errmsg = errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse)
			}
			return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, "alibabacloudstack_ascm_quota", "UpdateQuota", errmsgs.AlibabacloudStackSdkGoERROR, errmsg)
		}
		addDebug(request.GetActionName(), raw, nil, request)
	}

	return nil
}