in alibabacloudstack/resource_apsarastack_edas_k8s_application.go [626:849]
func resourceAlibabacloudStackEdasK8sApplicationUpdate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AlibabacloudStackClient)
edasService := EdasService{client}
var partialKeys []string
request := client.NewCommonRequest("POST", "Edas", "2017-08-01", "DeployK8sApplication", "/pop/v5/k8s/acs/k8s_apps")
request.QueryParams["RegionId"] = client.RegionId
request.QueryParams["AppId"] = d.Id()
d.Partial(true)
packageType, err := edasService.QueryK8sAppPackageType(d.Id())
if err != nil {
return errmsgs.WrapError(err)
}
if strings.ToLower(packageType) == "image" {
if d.HasChange("image_url") {
partialKeys = append(partialKeys, "image_url")
}
request.QueryParams["Image"] = d.Get("image_url").(string)
if len(request.QueryParams["Image"]) == 0 {
return errmsgs.WrapError(errmsgs.Error("image_url is needed for creating image k8s application"))
}
} else {
if d.HasChange("package_url") {
partialKeys = append(partialKeys, "package_url")
}
request.QueryParams["PackageUrl"] = d.Get("package_url").(string)
if len(request.QueryParams["PackageUrl"]) == 0 {
return errmsgs.WrapError(errmsgs.Error("package_url is needed for creating fatjar k8s application"))
}
if d.HasChange("package_version") {
partialKeys = append(partialKeys, "package_version")
}
request.QueryParams["PackageVersion"] = d.Get("package_version").(string)
if d.HasChange("jdk") {
partialKeys = append(partialKeys, "jdk")
}
request.QueryParams["JDK"] = d.Get("jdk").(string)
if len(request.QueryParams["JDK"]) == 0 {
return errmsgs.WrapError(errmsgs.Error("jdk is needed for creating non-image k8s application"))
}
if strings.ToLower(packageType) == "war" {
var webContainer string
var edasContainer string
if d.HasChange("web_container") {
partialKeys = append(partialKeys, "web_container")
}
webContainer = d.Get("web_container").(string)
if d.HasChange("edas_container_version") {
partialKeys = append(partialKeys, "edas_container_version")
}
edasContainer = d.Get("edas_container_version").(string)
if len(webContainer) == 0 && len(edasContainer) == 0 {
return errmsgs.WrapError(errmsgs.Error("web_container or edas_container_version is needed for updating war k8s application"))
}
request.QueryParams["WebContainer"] = webContainer
request.QueryParams["EdasContainerVersion"] = edasContainer
}
}
if d.HasChange("replicas") {
partialKeys = append(partialKeys, "replicas")
}
replicas := d.Get("replicas").(int)
request.QueryParams["Replicas"] = fmt.Sprintf("%d", replicas)
if d.HasChange("limit_mem") {
partialKeys = append(partialKeys, "limit_mem")
request.QueryParams["MemoryLimit"] = fmt.Sprintf("%d", d.Get("limit_mem").(int))
}
if d.HasChange("requests_mem") {
partialKeys = append(partialKeys, "requests_mem")
request.QueryParams["MemoryRequest"] = fmt.Sprintf("%d", d.Get("requests_mem").(int))
}
if d.HasChange("command") {
partialKeys = append(partialKeys, "command")
request.QueryParams["Command"] = d.Get("command").(string)
}
if d.HasChange("command_args") {
partialKeys = append(partialKeys, "command_args")
commands, err := edasService.GetK8sCommandArgsForDeploy(d.Get("command_args").([]interface{}))
if err != nil {
return errmsgs.WrapError(err)
}
request.QueryParams["Args"] = commands
}
if d.HasChange("envs") {
partialKeys = append(partialKeys, "envs")
envs, err := edasService.GetK8sEnvs(d.Get("envs").(map[string]interface{}))
if err != nil {
return errmsgs.WrapError(err)
}
request.QueryParams["Envs"] = envs
}
if d.HasChange("pre_stop") {
if !edasService.PreStopEqual(d.GetChange("pre_stop")) {
partialKeys = append(partialKeys, "pre_stop")
request.QueryParams["PreStop"] = d.Get("pre_stop").(string)
}
}
if d.HasChange("post_start") {
if !edasService.PostStartEqual(d.GetChange("post_start")) {
partialKeys = append(partialKeys, "post_start")
request.QueryParams["PostStart"] = d.Get("post_start").(string)
}
}
if d.HasChange("liveness") {
if !edasService.LivenessEqual(d.GetChange("liveness")) {
partialKeys = append(partialKeys, "liveness")
request.QueryParams["Liveness"] = d.Get("liveness").(string)
}
}
if d.HasChange("readiness") {
if !edasService.ReadinessEqual(d.GetChange("readiness")) {
partialKeys = append(partialKeys, "readiness")
request.QueryParams["Readiness"] = d.Get("readiness").(string)
}
}
if d.HasChange("nas_id") {
partialKeys = append(partialKeys, "nas_id")
request.QueryParams["NasId"] = d.Get("nas_id").(string)
}
if d.HasChange("mount_descs") {
partialKeys = append(partialKeys, "mount_descs")
request.QueryParams["MountDescs"] = d.Get("mount_descs").(string)
}
if d.HasChange("config_mount_descs") {
configmaps, err := edasService.GetK8sConfigMaps(d.Get("config_mount_descs").([]interface{}))
if err != nil {
return errmsgs.WrapError(err)
}
request.QueryParams["ConfigMountDescs"] = configmaps
}
if d.HasChange("local_volume") {
local_volumes, err := edasService.GetK8sLocalVolumes(d.Get("local_volume").([]interface{}))
if err != nil {
return errmsgs.WrapError(err)
}
request.QueryParams["LocalVolume"] = local_volumes
}
if d.HasChange("pvc_mount_descs") {
pvc_mount_descs, err := edasService.GetK8sPvcMountDescs(d.Get("pvc_mount_descs").([]interface{}))
if err != nil {
return errmsgs.WrapError(err)
}
request.QueryParams["PvcMountDescs"] = pvc_mount_descs
}
if d.HasChange("requests_m_cpu") {
partialKeys = append(partialKeys, "requests_m_cpu")
request.QueryParams["McpuRequest"] = fmt.Sprintf("%d", d.Get("requests_m_cpu").(int))
}
if d.HasChange("limit_m_cpu") {
partialKeys = append(partialKeys, "limit_m_cpu")
request.QueryParams["McpuLimit"] = fmt.Sprintf("%d", d.Get("limit_m_cpu").(int))
}
if len(partialKeys) > 0 && !d.IsNewResource() {
if v, ok := d.GetOk("update_type"); ok && v.(string) != "" && replicas > 1 {
partialKeys = append(partialKeys, "update_type")
update_type := d.Get("update_type").(string)
update_batch := d.Get("update_batch").(int)
if update_batch < 2 {
return errmsgs.WrapError(errmsgs.Error("`update_batch` must be greater than 2"))
}
update_release_type := d.Get("update_release_type").(string)
gray_update_strategy := ""
if v, ok := d.GetOk("update_gray"); ok {
update_gray := v.(int)
gray_update_strategy = fmt.Sprintf(",\"grayUpdate\":{\"gray\":%d}", update_gray)
}
if update_release_type == "auto" {
update_batch_wait_time := d.Get("update_batch_wait_time").(int)
request.QueryParams["UpdateStrategy"] = fmt.Sprintf("{\"type\":\"%s\",\"batchUpdate\":{\"batch\":%d,\"releaseType\":\"%s\",\"batchWaitTime\":%d}%s}", update_type, update_batch, update_release_type, update_batch_wait_time, gray_update_strategy)
} else {
request.QueryParams["UpdateStrategy"] = fmt.Sprintf("{\"type\":\"%s\",\"batchUpdate\":{\"batch\":%d,\"releaseType\":\"%s\"}%s}", update_type, update_batch, update_release_type, gray_update_strategy)
}
}
bresponse, err := client.ProcessCommonRequest(request)
addDebug(request.GetActionName(), bresponse, request)
if err != nil {
errmsg := ""
if bresponse != nil {
errmsg = errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse)
}
return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, d.Id(), request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg)
}
response := make(map[string]interface{})
_ = json.Unmarshal(bresponse.GetHttpContentBytes(), &response)
changeOrderId := response["ChangeOrderId"].(string)
if response["Code"].(float64) != 200 {
return errmsgs.WrapError(errmsgs.Error("deploy k8s application failed for " + response["Message"].(string)))
}
if changeOrderId != "" {
stateConf := BuildStateConf([]string{"0", "1", "9"}, []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())
}
}
//for _, key := range partialKeys {
// d.SetPartial(key)
//}
}
d.Partial(false)
return nil
}