func resourceAlibabacloudStackElasticsearchOnk8sUpdate()

in alibabacloudstack/resource_apsarastack_elasticsearch_on_k8s_instance.go [366:606]


func resourceAlibabacloudStackElasticsearchOnk8sUpdate(d *schema.ResourceData, meta interface{}) (err error) {
	client := meta.(*connectivity.AlibabacloudStackClient)
	elasticsearchService := ElasticsearchService{client}
	d.Partial(true)
	stateConf := BuildStateConf([]string{"activating"}, []string{"active"}, d.Timeout(schema.TimeoutUpdate), 5*time.Minute, elasticsearchService.ElasticsearchOnK8sStateRefreshFunc(d.Id(), []string{"inactive"}))
	stateConf.PollInterval = 5 * time.Second

	if d.HasChange("description") {
		if err := updateDescription(d, meta); err != nil {
			return errmsgs.WrapError(err)
		}

		//d.SetPartial("description")
	}

	if d.HasChange("private_whitelist") {
		content := make(map[string]interface{})
		content["networkType"] = string(PRIVATE)
		content["nodeType"] = string(WORKER)
		content["whiteIpList"] = d.Get("private_whitelist").(*schema.Set).List()
		if err := elasticsearchService.ModifyWhiteIps(d, content, meta); err != nil {
			return errmsgs.WrapError(err)
		}

		//d.SetPartial("private_whitelist")
	}

	// if d.HasChange("enable_public") {
	// 	content := make(map[string]interface{})
	// 	content["networkType"] = string(PUBLIC)
	// 	content["nodeType"] = string(WORKER)
	// 	content["actionType"] = elasticsearchService.getActionType(d.Get("enable_public").(bool))
	// 	if err := elasticsearchService.TriggerNetwork(d, content, meta); err != nil {
	// 		return errmsgs.WrapError(err)
	// 	}

	// 	//d.SetPartial("enable_public")
	// }

	if d.Get("enable_public").(bool) && d.HasChange("public_whitelist") {
		content := make(map[string]interface{})
		content["networkType"] = string(PUBLIC)
		content["nodeType"] = string(WORKER)
		content["whiteIpList"] = d.Get("public_whitelist").(*schema.Set).List()
		if err := elasticsearchService.ModifyWhiteIps(d, content, meta); err != nil {
			return errmsgs.WrapError(err)
		}

		//d.SetPartial("public_whitelist")
	}

	// if d.HasChange("enable_kibana_public_network") || d.IsNewResource() {
	// 	content := make(map[string]interface{})
	// 	content["networkType"] = string(PUBLIC)
	// 	content["nodeType"] = string(KIBANA)
	// 	content["actionType"] = elasticsearchService.getActionType(d.Get("enable_kibana_public_network").(bool))
	// 	if err := elasticsearchService.TriggerNetwork(d, content, meta); err != nil {
	// 		return errmsgs.WrapError(err)
	// 	}

	// 	//d.SetPartial("enable_kibana_public_network")
	// }

	if d.Get("enable_kibana_public_network").(bool) && d.HasChange("kibana_whitelist") {
		content := make(map[string]interface{})
		content["networkType"] = string(PUBLIC)
		content["nodeType"] = string(KIBANA)
		content["whiteIpList"] = d.Get("kibana_whitelist").(*schema.Set).List()
		if err := elasticsearchService.ModifyWhiteIps(d, content, meta); err != nil {
			return errmsgs.WrapError(err)
		}

		//d.SetPartial("kibana_whitelist")
	}

	// if d.HasChange("enable_kibana_private_network") {
	// 	content := make(map[string]interface{})
	// 	content["networkType"] = string(PRIVATE)
	// 	content["nodeType"] = string(KIBANA)
	// 	content["actionType"] = elasticsearchService.getActionType(d.Get("enable_kibana_private_network").(bool))
	// 	if err := elasticsearchService.TriggerNetwork(d, content, meta); err != nil {
	// 		return errmsgs.WrapError(err)
	// 	}

	// 	//d.SetPartial("enable_kibana_private_network")
	// }

	if d.Get("enable_kibana_private_network").(bool) == true && d.HasChange("kibana_private_whitelist") {
		content := make(map[string]interface{})
		content["networkType"] = string(PRIVATE)
		content["nodeType"] = string(KIBANA)
		content["whiteIpList"] = d.Get("kibana_private_whitelist").(*schema.Set).List()
		if err := elasticsearchService.ModifyWhiteIps(d, content, meta); err != nil {
			return errmsgs.WrapError(err)
		}

		//d.SetPartial("kibana_private_whitelist")
	}

	if d.HasChange("tags") {
		if err := updateInstanceTags(d, meta); err != nil {
			return errmsgs.WrapError(err)
		}

		//d.SetPartial("tags")
	}

	if d.HasChanges("client_node_spec", "client_node_amount") {

		if _, err := stateConf.WaitForState(); err != nil {
			return errmsgs.WrapErrorf(err, errmsgs.IdMsg, d.Id())
		}

		if err := updateClientNode(d, meta); err != nil {
			return errmsgs.WrapError(err)
		}

		//d.SetPartial("client_node_spec")
		//d.SetPartial("client_node_amount")
	}

	// if d.HasChange("protocol") {

	// 	if _, err := stateConf.WaitForState(); err != nil {
	// 		return errmsgs.WrapErrorf(err, errmsgs.IdMsg, d.Id())
	// 	}

	// 	var https func(*schema.ResourceData, interface{}) error

	// 	if d.Get("protocol") == "HTTPS" {
	// 		https = openHttps
	// 	} else if d.Get("protocol") == "HTTP" {
	// 		https = closeHttps
	// 	}

	// 	if nil != https {
	// 		if err := https(d, meta); err != nil {
	// 			return errmsgs.WrapError(err)
	// 		}
	// 	}

	// 	//d.SetPartial("protocol")
	// }
	if d.HasChange("setting_config") {
		action := "UpdateInstanceSettings"
		content := map[string]interface{}{
			"RegionId":    client.RegionId,
			"clientToken": StringPointer(buildClientToken(action)),
		}
		config := d.Get("setting_config").(map[string]interface{})
		content["esConfig"] = config
		_, err = client.DoTeaRequest("POST", "elasticsearch-k8s", "2017-06-13", action, "", nil, nil, content)
		if err != nil && !errmsgs.IsExpectedErrors(err, []string{"MustChangeOneResource", "CssCheckUpdowngradeError"}) {
			return err
		}
		stateConf := BuildStateConf([]string{"activating"}, []string{"active"}, d.Timeout(schema.TimeoutUpdate), 5*time.Minute, elasticsearchService.ElasticsearchOnK8sStateRefreshFunc(d.Id(), []string{"inactive"}))
		stateConf.PollInterval = 5 * time.Second
		if _, err := stateConf.WaitForState(); err != nil {
			return errmsgs.WrapErrorf(err, errmsgs.IdMsg, d.Id())
		}
		//d.SetPartial("setting_config")
	}

	if d.IsNewResource() {
		d.Partial(false)
		return nil
	}

	if d.HasChange("instance_charge_type") {
		if err := updateInstanceChargeType(d, meta); err != nil {
			return errmsgs.WrapError(err)
		}

		//d.SetPartial("instance_charge_type")
		//d.SetPartial("period")
	} else if d.Get("instance_charge_type").(string) == string(PrePaid) && d.HasChange("period") {
		if err := renewInstance(d, meta); err != nil {
			return errmsgs.WrapError(err)
		}

		//d.SetPartial("period")
	}

	if d.HasChange("data_node_amount") {

		if _, err := stateConf.WaitForState(); err != nil {
			return errmsgs.WrapErrorf(err, errmsgs.IdMsg, d.Id())
		}

		if err := updateDataNodeAmount(d, meta); err != nil {
			return errmsgs.WrapError(err)
		}

		//d.SetPartial("data_node_amount")
	}

	if d.HasChanges("data_node_spec", "data_node_disk_size", "data_node_disk_type") {

		if _, err := stateConf.WaitForState(); err != nil {
			return errmsgs.WrapErrorf(err, errmsgs.IdMsg, d.Id())
		}

		if err := updateDataNodeSpec(d, meta); err != nil {
			return errmsgs.WrapError(err)
		}

		//d.SetPartial("data_node_spec")
		//d.SetPartial("data_node_disk_size")
		//d.SetPartial("data_node_disk_type")
		//d.SetPartial("data_node_disk_encrypted")
	}

	if d.HasChange("master_node_spec") {

		if _, err := stateConf.WaitForState(); err != nil {
			return errmsgs.WrapErrorf(err, errmsgs.IdMsg, d.Id())
		}

		if err := updateMasterNode(d, meta); err != nil {
			return errmsgs.WrapError(err)
		}

		//d.SetPartial("master_node_spec")
	}

	if d.HasChanges("password", "kms_encrypted_password") {

		if _, err := stateConf.WaitForState(); err != nil {
			return errmsgs.WrapErrorf(err, errmsgs.IdMsg, d.Id())
		}

		if err := updatePassword(d, meta); err != nil {
			return errmsgs.WrapError(err)
		}

		//d.SetPartial("password")
	}

	d.Partial(false)
	return nil
}