in alibabacloudstack/resource_apsarastack_elasticsearch_instance.go [341:529]
func resourceAlibabacloudStackElasticsearchUpdate(d *schema.ResourceData, meta interface{}) 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.ElasticsearchStateRefreshFunc(d.Id(), []string{"inactive"}))
stateConf.PollInterval = 5 * time.Second
if d.HasChange("description") {
if err := updateDescription(d, meta); err != nil {
return errmsgs.WrapError(err)
}
}
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)
}
}
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)
}
}
if d.Get("enable_public").(bool) == true && 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)
}
}
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)
}
}
if d.Get("enable_kibana_public_network").(bool) == true && 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)
}
}
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)
}
}
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)
}
}
if d.HasChange("tags") {
if err := updateInstanceTags(d, meta); err != nil {
return errmsgs.WrapError(err)
}
}
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)
}
}
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)
}
}
}
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", "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.ElasticsearchStateRefreshFunc(d.Id(), []string{"inactive"}))
stateConf.PollInterval = 5 * time.Second
if _, err := stateConf.WaitForState(); err != nil {
return errmsgs.WrapErrorf(err, errmsgs.IdMsg, d.Id())
}
}
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)
}
} else if d.Get("instance_charge_type").(string) == string(PrePaid) && d.HasChange("period") {
if err := renewInstance(d, meta); err != nil {
return errmsgs.WrapError(err)
}
}
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)
}
}
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)
}
}
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)
}
}
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.Partial(false)
return nil
}