func resourceAlibabacloudStackEdasK8sApplicationCreate()

in alibabacloudstack/resource_apsarastack_edas_k8s_application.go [302:484]


func resourceAlibabacloudStackEdasK8sApplicationCreate(d *schema.ResourceData, meta interface{}) error {
	client := meta.(*connectivity.AlibabacloudStackClient)
	edasService := EdasService{client}
	// request := edas.CreateInsertK8sApplicationRequest()
	request := client.NewCommonRequest("POST", "Edas", "2017-08-01", "InsertK8sApplication", "/pop/v5/k8s/acs/create_k8s_app")
	packageType := d.Get("package_type").(string)

	request.QueryParams["AppName"] = d.Get("application_name").(string)
	request.QueryParams["RegionId"] = client.RegionId
	request.QueryParams["PackageType"] = packageType
	request.QueryParams["ClusterId"] = d.Get("cluster_id").(string)
	if strings.ToLower(packageType) == "image" {
		if v, ok := d.GetOk("image_url"); !ok {
			return errmsgs.WrapError(errmsgs.Error("image_url is needed for creating image k8s application"))
		} else {
			request.QueryParams["ImageUrl"] = v.(string)
			if strings.HasPrefix(v.(string), "cr-ee.registry") {
				if crid, ok := d.GetOk("cr_ee_repo_id"); ok && crid.(string) != "" {
					request.QueryParams["crInstanceId"] = crid.(string)
				} else {
					return errmsgs.WrapError(errmsgs.Error("`cr_ee_repo_id` is needed for the image repo is enterprise-edition"))
				}
			}
		}
	} else {
		if v, ok := d.GetOk("package_url"); !ok {
			return errmsgs.WrapError(errmsgs.Error("package_url is needed for creating fatjar k8s application"))
		} else {
			request.QueryParams["PackageUrl"] = v.(string)
			request.QueryParams["ImageUrl"] = v.(string)
		}
		if v, ok := d.GetOk("package_version"); ok {
			request.QueryParams["PackageVersion"] = v.(string)
		}
		if v, ok := d.GetOk("jdk"); !ok {
			return errmsgs.WrapError(errmsgs.Error("jdk is needed for creating non-image k8s application"))
		} else {
			request.QueryParams["JDK"] = v.(string)
		}
		if strings.ToLower(packageType) == "war" {
			var webContainer string
			var edasContainer string
			if v, ok := d.GetOk("web_container"); ok {
				webContainer = v.(string)
			}
			if v, ok := d.GetOk("edas_container_version"); ok {
				edasContainer = v.(string)
			}
			if len(webContainer) == 0 && len(edasContainer) == 0 {
				return errmsgs.WrapError(errmsgs.Error("web_container or edas_container_version is needed for creating war k8s application"))
			}
			request.QueryParams["WebContainer"] = webContainer
			request.QueryParams["EdasContainerVersion"] = edasContainer
		}
	}

	request.QueryParams["Replicas"] = fmt.Sprintf("%d", d.Get("replicas").(int))

	if v, ok := connectivity.GetResourceDataOk(d, "application_description", "application_descriotion"); ok {
		request.QueryParams["ApplicationDescription"] = v.(string)
	}

	if v, ok := d.GetOk("limit_mem"); ok {
		request.QueryParams["LimitMem"] = fmt.Sprintf("%d", v.(int))
	}

	if v, ok := d.GetOk("requests_mem"); ok {
		request.QueryParams["RequestsMem"] = fmt.Sprintf("%d", v.(int))
	}

	if v, ok := d.GetOk("command"); ok {
		request.QueryParams["Command"] = v.(string)
	}

	if v, ok := d.GetOk("command_args"); ok {
		commands, err := edasService.GetK8sCommandArgs(v.([]interface{}))
		if err != nil {
			return errmsgs.WrapError(err)
		}
		request.QueryParams["CommandArgs"] = commands
	}

	if v, ok := d.GetOk("envs"); ok {
		envs, err := edasService.GetK8sEnvs(v.(map[string]interface{}))
		if err != nil {
			return errmsgs.WrapError(err)
		}
		request.QueryParams["Envs"] = envs
	}

	if v, ok := d.GetOk("pre_stop"); ok {
		request.QueryParams["PreStop"] = v.(string)
	}

	if v, ok := d.GetOk("post_start"); ok {
		request.QueryParams["PostStart"] = v.(string)
	}

	if v, ok := d.GetOk("liveness"); ok {
		request.QueryParams["Liveness"] = v.(string)
	}

	if v, ok := d.GetOk("readiness"); ok {
		request.QueryParams["Readiness"] = v.(string)
	}

	if v, ok := d.GetOk("nas_id"); ok {
		request.QueryParams["NasId"] = v.(string)
	}

	if v, ok := d.GetOk("mount_descs"); ok {
		request.QueryParams["MountDescs"] = v.(string)
	}

	if v, ok := d.GetOk("config_mount_descs"); ok {
		configmaps, err := edasService.GetK8sConfigMaps(v.([]interface{}))
		if err != nil {
			return errmsgs.WrapError(err)
		}
		request.QueryParams["ConfigMountDescs"] = configmaps
	}

	if v, ok := d.GetOk("local_volume"); ok {
		local_volumes, err := edasService.GetK8sLocalVolumes(v.([]interface{}))
		if err != nil {
			return errmsgs.WrapError(err)
		}
		request.QueryParams["LocalVolume"] = local_volumes
	}

	if v, ok := d.GetOk("pvc_mount_descs"); ok {
		pvc_mount_descs, err := edasService.GetK8sPvcMountDescs(v.([]interface{}))
		if err != nil {
			return errmsgs.WrapError(err)
		}
		request.QueryParams["PvcMountDescs"] = pvc_mount_descs
	}

	if v, ok := d.GetOk("namespace"); ok {
		request.QueryParams["Namespace"] = v.(string)
	}

	if v, ok := d.GetOk("logical_region_id"); ok {
		request.QueryParams["LogicalRegionId"] = v.(string)
	}

	if v, ok := d.GetOk("requests_m_cpu"); ok {
		request.QueryParams["RequestsmCpu"] = fmt.Sprintf("%d", v.(int))
	}

	if v, ok := d.GetOk("limit_m_cpu"); ok {
		request.QueryParams["LimitmCpu"] = fmt.Sprintf("%d", v.(int))
	}
	bresponse, err := client.ProcessCommonRequest(request)
	addDebug("InsertK8sApplication", bresponse, request.QueryParams, request)
	if err != nil {
		errmsg := ""
		if bresponse != nil {
			errmsg = errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse)
		}
		return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, "alibabacloudstack_edas_k8s_application", request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg)
	}
	var response map[string]interface{}
	err = json.Unmarshal(bresponse.GetHttpContentBytes(), &response)
	if response["Code"].(float64) != 200 {
		return errmsgs.WrapError(fmt.Errorf("Create k8s application failed for %s", response["Message"].(string)))
	}
	appId := response["ApplicationInfo"].(map[string]interface{})["AppId"].(string)
	changeOrderId := response["ApplicationInfo"].(map[string]interface{})["ChangeOrderId"].(string)
	d.SetId(appId)

	if len(changeOrderId) > 0 {
		stateConf := BuildStateConf([]string{"0", "1"}, []string{"2"}, d.Timeout(schema.TimeoutCreate), 5*time.Second, edasService.EdasChangeOrderStatusRefreshFunc(changeOrderId, []string{"3", "6", "10"}))
		if _, err := stateConf.WaitForState(); err != nil {
			return errmsgs.WrapErrorf(err, errmsgs.IdMsg, d.Id())
		}
	}
	bind_slb_err := K8sBindSlb(d, meta)
	if bind_slb_err != nil {
		return errmsgs.WrapError(bind_slb_err)
	}
	return nil
}