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
}