in alicloud/resource_alicloud_lindorm_instance.go [615:1054]
func resourceAliCloudLindormInstanceUpdate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AliyunClient)
hitsdbService := HitsdbService{client}
var response map[string]interface{}
var err error
d.Partial(true)
if d.HasChange("tags") {
if err := hitsdbService.SetResourceTags(d, "INSTANCE"); err != nil {
return WrapError(err)
}
d.SetPartial("tags")
}
update := false
request := map[string]interface{}{
"InstanceId": d.Id(),
}
if d.HasChange("ip_white_list") {
update = true
if v, ok := d.GetOk("ip_white_list"); ok && v != nil {
request["SecurityIpList"] = convertListToCommaSeparate(v.(*schema.Set).List())
}
}
if update {
action := "UpdateInstanceIpWhiteList"
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(client.GetRetryTimeout(d.Timeout(schema.TimeoutUpdate)), func() *resource.RetryError {
response, err = client.RpcPost("hitsdb", "2020-06-15", action, nil, request, false)
if err != nil {
if IsExpectedErrors(err, []string{"Instance.IsNotValid"}) || NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
return nil
})
addDebug(action, response, request)
if err != nil {
return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR)
}
d.SetPartial("ip_white_list")
}
update = false
updateLindormInstanceAttributeReq := map[string]interface{}{
"InstanceId": d.Id(),
}
if d.HasChange("instance_name") && !d.IsNewResource() {
update = true
if v, ok := d.GetOk("instance_name"); ok {
updateLindormInstanceAttributeReq["InstanceAlias"] = v
}
}
if d.HasChange("deletion_proection") {
update = true
if v, ok := d.GetOkExists("deletion_proection"); ok {
updateLindormInstanceAttributeReq["DeletionProtection"] = v
}
}
if update {
action := "UpdateLindormInstanceAttribute"
wait := incrementalWait(3*time.Second, 3*time.Second)
err = resource.Retry(client.GetRetryTimeout(d.Timeout(schema.TimeoutUpdate)), func() *resource.RetryError {
response, err = client.RpcPost("hitsdb", "2020-06-15", action, nil, updateLindormInstanceAttributeReq, false)
if err != nil {
if IsExpectedErrors(err, []string{"Instance.IsNotValid"}) || NeedRetry(err) {
wait()
return resource.RetryableError(err)
}
return resource.NonRetryableError(err)
}
return nil
})
addDebug(action, response, updateLindormInstanceAttributeReq)
if err != nil {
return WrapErrorf(err, DefaultErrorMsg, d.Id(), action, AlibabaCloudSdkGoERROR)
}
d.SetPartial("instance_name")
d.SetPartial("deletion_proection")
}
update = false
upgradeLindormLogReq := map[string]interface{}{}
if !d.IsNewResource() && d.HasChange("log_single_storage") {
update = true
upgradeLindormLogReq["UpgradeType"] = "upgrade-disk-size"
upgradeLindormLogReq["LogSingleStorage"] = d.Get("log_single_storage")
}
if !d.IsNewResource() && d.HasChange("log_spec") {
update = true
upgradeLindormLogReq["UpgradeType"] = "upgrade-lindorm-engine"
upgradeLindormLogReq["LogSpec"] = d.Get("log_spec")
}
if !d.IsNewResource() && d.HasChange("core_single_storage") {
update = true
upgradeLindormLogReq["UpgradeType"] = "upgrade-disk-size"
upgradeLindormLogReq["CoreSingleStorage"] = d.Get("core_single_storage")
}
if update {
err := UpgradeLindormInstance(d, meta, upgradeLindormLogReq)
if err != nil {
return WrapError(err)
}
d.SetPartial("log_single_storage")
d.SetPartial("core_single_storage")
d.SetPartial("log_spec")
}
update = false
upgradeLindormInstanceColdStorageReq := map[string]interface{}{
"UpgradeType": "upgrade-cold-storage",
}
if d.HasChange("cold_storage") && !d.IsNewResource() {
update = true
if v, ok := d.GetOk("cold_storage"); ok {
upgradeLindormInstanceColdStorageReq["ColdStorage"] = v
}
d.SetPartial("cold_storage")
}
if update {
err := UpgradeLindormInstance(d, meta, upgradeLindormInstanceColdStorageReq)
if err != nil {
return WrapError(err)
}
}
update = false
upgradeLindormInstanceFilestoreNumReq := map[string]interface{}{
"UpgradeType": "upgrade-file-core-num",
}
if d.HasChange("file_engine_node_count") && !d.IsNewResource() {
update = true
if v, ok := d.GetOk("file_engine_node_count"); ok {
upgradeLindormInstanceFilestoreNumReq["FilestoreNum"] = v
}
}
if update {
if v, ok := d.GetOk("instance_storage"); ok {
upgradeLindormInstanceFilestoreNumReq["ClusterStorage"] = v
}
err := UpgradeLindormInstance(d, meta, upgradeLindormInstanceFilestoreNumReq)
if err != nil {
return WrapError(err)
}
d.SetPartial("file_engine_node_count")
}
update = false
upgradeLindormInstanceFilestoreSpecReq := map[string]interface{}{
"UpgradeType": "upgrade-file-engine",
}
if d.HasChange("file_engine_specification") && !d.IsNewResource() {
update = true
if v, ok := d.GetOk("file_engine_specification"); ok {
upgradeLindormInstanceFilestoreSpecReq["FilestoreSpec"] = v
}
}
if update {
if v, ok := d.GetOk("instance_storage"); ok {
upgradeLindormInstanceFilestoreNumReq["ClusterStorage"] = v
}
err := UpgradeLindormInstance(d, meta, upgradeLindormInstanceFilestoreSpecReq)
if err != nil {
return WrapError(err)
}
d.SetPartial("file_engine_specification")
}
if (d.HasChange("search_engine_node_count") || d.HasChange("search_engine_specification")) && !d.IsNewResource() {
newSolrSpec := d.Get("search_engine_specification")
newSolrNum := d.Get("search_engine_node_count")
enabled := d.Get("enabled_search_engine").(bool)
currentInstanceStorage := formatInt(d.Get("instance_storage"))
if !enabled {
upgradeLindormInstanceSearchReq := map[string]interface{}{}
upgradeLindormInstanceSearchReq["UpgradeType"] = "open-search-engine"
upgradeLindormInstanceSearchReq["SolrSpec"] = newSolrSpec
upgradeLindormInstanceSearchReq["SolrNum"] = newSolrNum
upgradeLindormInstanceSearchReq["ClusterStorage"] = currentInstanceStorage
err := UpgradeLindormInstance(d, meta, upgradeLindormInstanceSearchReq)
if err != nil {
return WrapError(err)
}
}
if enabled && d.HasChange("search_engine_specification") {
upgradeLindormInstanceSearchReq := map[string]interface{}{}
upgradeLindormInstanceSearchReq["UpgradeType"] = "upgrade-search-engine"
upgradeLindormInstanceSearchReq["SolrSpec"] = newSolrSpec
upgradeLindormInstanceSearchReq["ClusterStorage"] = currentInstanceStorage
err := UpgradeLindormInstance(d, meta, upgradeLindormInstanceSearchReq)
if err != nil {
return WrapError(err)
}
}
if enabled && d.HasChange("search_engine_node_count") {
upgradeLindormInstanceSearchNumReq := map[string]interface{}{}
upgradeLindormInstanceSearchNumReq["UpgradeType"] = "upgrade-search-core-num"
upgradeLindormInstanceSearchNumReq["SolrNum"] = newSolrNum
upgradeLindormInstanceSearchNumReq["ClusterStorage"] = currentInstanceStorage
err := UpgradeLindormInstance(d, meta, upgradeLindormInstanceSearchNumReq)
if err != nil {
return WrapError(err)
}
}
d.SetPartial("search_engine_specification")
d.SetPartial("search_engine_node_count")
}
if (d.HasChange("table_engine_node_count") || d.HasChange("table_engine_specification")) && !d.IsNewResource() {
newLindormSpec := d.Get("table_engine_specification")
newLindormNum := d.Get("table_engine_node_count")
enabled := d.Get("enabled_table_engine").(bool)
currentInstanceStorage := formatInt(d.Get("instance_storage"))
if !enabled {
upgradeLindormInstanceTableReq := map[string]interface{}{}
upgradeLindormInstanceTableReq["UpgradeType"] = "open-lindorm-engine"
upgradeLindormInstanceTableReq["LindormSpec"] = newLindormSpec
upgradeLindormInstanceTableReq["LindormNum"] = newLindormNum
upgradeLindormInstanceTableReq["ClusterStorage"] = currentInstanceStorage
err := UpgradeLindormInstance(d, meta, upgradeLindormInstanceTableReq)
if err != nil {
return WrapError(err)
}
}
if enabled && d.HasChange("table_engine_specification") {
upgradeLindormInstanceTableReq := map[string]interface{}{}
upgradeLindormInstanceTableReq["UpgradeType"] = "upgrade-lindorm-engine"
upgradeLindormInstanceTableReq["LindormSpec"] = newLindormSpec
upgradeLindormInstanceTableReq["ClusterStorage"] = currentInstanceStorage
err := UpgradeLindormInstance(d, meta, upgradeLindormInstanceTableReq)
if err != nil {
return WrapError(err)
}
}
if enabled && d.HasChange("table_engine_node_count") {
if !d.IsNewResource() && d.HasChange("log_num") && d.HasChange("table_engine_node_count") {
upgradeLindormLogNumReq := map[string]interface{}{}
upgradeLindormLogNumReq["UpgradeType"] = "upgrade-lindorm-core-num"
upgradeLindormLogNumReq["LogNum"] = d.Get("log_num")
upgradeLindormLogNumReq["LindormNum"] = d.Get("table_engine_node_count")
err := UpgradeLindormInstance(d, meta, upgradeLindormLogNumReq)
if err != nil {
return WrapError(err)
}
} else {
upgradeLindormInstanceTableNumReq := map[string]interface{}{}
upgradeLindormInstanceTableNumReq["UpgradeType"] = "upgrade-lindorm-core-num"
upgradeLindormInstanceTableNumReq["LindormNum"] = newLindormNum
upgradeLindormInstanceTableNumReq["ClusterStorage"] = currentInstanceStorage
err := UpgradeLindormInstance(d, meta, upgradeLindormInstanceTableNumReq)
if err != nil {
return WrapError(err)
}
}
}
d.SetPartial("table_engine_specification")
d.SetPartial("table_engine_node_count")
}
if (d.HasChange("time_series_engine_node_count") || d.HasChange("time_serires_engine_specification") || d.HasChange("time_series_engine_specification")) && !d.IsNewResource() {
var newTsdbSpec interface{}
if d.HasChange("time_serires_engine_specification") {
newTsdbSpec = d.Get("time_serires_engine_specification")
}
if d.HasChange("time_series_engine_specification") {
newTsdbSpec = d.Get("time_series_engine_specification")
}
newTsdbNum := d.Get("time_series_engine_node_count")
enabled := d.Get("enabled_time_serires_engine").(bool)
currentInstanceStorage := formatInt(d.Get("instance_storage"))
if !enabled {
upgradeLindormInstanceSearchReq := map[string]interface{}{}
upgradeLindormInstanceSearchReq["UpgradeType"] = "open-tsdb-engine"
upgradeLindormInstanceSearchReq["TsdbSpec"] = newTsdbSpec
upgradeLindormInstanceSearchReq["TsdbNum"] = newTsdbNum
upgradeLindormInstanceSearchReq["ClusterStorage"] = currentInstanceStorage
err := UpgradeLindormInstance(d, meta, upgradeLindormInstanceSearchReq)
if err != nil {
return WrapError(err)
}
}
if enabled && (d.HasChange("time_serires_engine_specification") || d.HasChange("time_series_engine_specification")) {
upgradeLindormInstanceSearchReq := map[string]interface{}{}
upgradeLindormInstanceSearchReq["UpgradeType"] = "upgrade-tsdb-engine"
upgradeLindormInstanceSearchReq["TsdbSpec"] = newTsdbSpec
upgradeLindormInstanceSearchReq["ClusterStorage"] = currentInstanceStorage
err := UpgradeLindormInstance(d, meta, upgradeLindormInstanceSearchReq)
if err != nil {
return WrapError(err)
}
}
if enabled && d.HasChange("time_series_engine_node_count") {
upgradeLindormInstanceSearchNumReq := map[string]interface{}{}
upgradeLindormInstanceSearchNumReq["UpgradeType"] = "upgrade-tsdb-core-num"
upgradeLindormInstanceSearchNumReq["TsdbNum"] = newTsdbNum
upgradeLindormInstanceSearchNumReq["ClusterStorage"] = currentInstanceStorage
err := UpgradeLindormInstance(d, meta, upgradeLindormInstanceSearchNumReq)
if err != nil {
return WrapError(err)
}
}
d.SetPartial("time_serires_engine_specification")
d.SetPartial("time_series_engine_specification")
d.SetPartial("time_series_engine_node_count")
}
if d.HasChange("lts_node_count") || d.HasChange("lts_node_specification") {
newLtsCoreSpec := d.Get("lts_node_specification")
newLtsCoreNum := d.Get("lts_node_count")
enabled := d.Get("enabled_lts_engine").(bool)
currentInstanceStorage := formatInt(d.Get("instance_storage"))
if !enabled {
upgradeLindormInstanceLtsReq := map[string]interface{}{}
upgradeLindormInstanceLtsReq["UpgradeType"] = "open-bds-transfer-only"
upgradeLindormInstanceLtsReq["LtsCoreSpec"] = newLtsCoreSpec
upgradeLindormInstanceLtsReq["LtsCoreNum"] = newLtsCoreNum
upgradeLindormInstanceLtsReq["ClusterStorage"] = currentInstanceStorage
err := UpgradeLindormInstance(d, meta, upgradeLindormInstanceLtsReq)
if err != nil {
return WrapError(err)
}
}
if enabled && d.HasChange("lts_node_specification") {
upgradeLindormInstanceLtsReq := map[string]interface{}{}
upgradeLindormInstanceLtsReq["UpgradeType"] = "upgrade-bds-transfer"
upgradeLindormInstanceLtsReq["LtsCoreSpec"] = newLtsCoreSpec
upgradeLindormInstanceLtsReq["ClusterStorage"] = currentInstanceStorage
err := UpgradeLindormInstance(d, meta, upgradeLindormInstanceLtsReq)
if err != nil {
return WrapError(err)
}
}
if enabled && d.HasChange("lts_node_count") {
upgradeLindormInstanceLtsNumReq := map[string]interface{}{}
upgradeLindormInstanceLtsNumReq["UpgradeType"] = "upgrade-bds-core-num"
upgradeLindormInstanceLtsNumReq["LtsCoreNum"] = newLtsCoreNum
upgradeLindormInstanceLtsNumReq["ClusterStorage"] = currentInstanceStorage
err := UpgradeLindormInstance(d, meta, upgradeLindormInstanceLtsNumReq)
if err != nil {
return WrapError(err)
}
}
d.SetPartial("lts_node_specification")
d.SetPartial("lts_node_count")
}
if (d.HasChange("stream_engine_node_count") || d.HasChange("stream_engine_specification")) && !d.IsNewResource() {
newStreamCoreNum := d.Get("stream_engine_node_count")
newStreamCoreSpec := d.Get("stream_engine_specification")
enabled := d.Get("enabled_stream_engine").(bool)
currentInstanceStorage := formatInt(d.Get("instance_storage"))
if !enabled {
openStreamEngineReq := map[string]interface{}{}
openStreamEngineReq["UpgradeType"] = "open-stream-engine"
openStreamEngineReq["StreamNum"] = newStreamCoreNum
openStreamEngineReq["StreamSpec"] = newStreamCoreSpec
openStreamEngineReq["ClusterStorage"] = currentInstanceStorage
err := UpgradeLindormInstance(d, meta, openStreamEngineReq)
if err != nil {
return WrapError(err)
}
}
if enabled && d.HasChange("stream_engine_node_count") {
upgradeStreamCoreNumReq := map[string]interface{}{}
upgradeStreamCoreNumReq["UpgradeType"] = "upgrade-stream-core-num"
upgradeStreamCoreNumReq["StreamNum"] = newStreamCoreNum
upgradeStreamCoreNumReq["ClusterStorage"] = currentInstanceStorage
err := UpgradeLindormInstance(d, meta, upgradeStreamCoreNumReq)
if err != nil {
return WrapError(err)
}
}
if enabled && d.HasChange("stream_engine_specification") {
upgradeStreamEngineReq := map[string]interface{}{}
upgradeStreamEngineReq["UpgradeType"] = "upgrade-stream-engine"
upgradeStreamEngineReq["StreamSpec"] = newStreamCoreSpec
err := UpgradeLindormInstance(d, meta, upgradeStreamEngineReq)
if err != nil {
return WrapError(err)
}
}
d.SetPartial("stream_engine_node_count")
d.SetPartial("stream_engine_specification")
}
update = false
upgradeLindormInstanceClusterStorageReq := map[string]interface{}{
"UpgradeType": "upgrade-disk-size",
}
if d.HasChange("instance_storage") && !d.IsNewResource() {
object, err := hitsdbService.DescribeLindormInstance(d.Id())
if err != nil {
return WrapError(err)
}
currentInstanceStorage := fmt.Sprint(object["InstanceStorage"])
chanageInstanceStorage := fmt.Sprint(d.Get("instance_storage"))
if currentInstanceStorage != chanageInstanceStorage {
update = true
upgradeLindormInstanceClusterStorageReq["ClusterStorage"] = chanageInstanceStorage
}
}
if update {
err := UpgradeLindormInstance(d, meta, upgradeLindormInstanceClusterStorageReq)
if err != nil {
return WrapError(err)
}
d.SetPartial("instance_storage")
}
d.Partial(false)
return resourceAliCloudLindormInstanceRead(d, meta)
}