in alibabacloudstack/resource_apsarastack_hbase_cluster.go [424:732]
func resourceAlibabacloudStackHBaseInstanceUpdate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*connectivity.AlibabacloudStackClient)
hBaseService := HBaseService{client}
d.Partial(true)
if d.HasChange("pay_type") {
object, err := hBaseService.DescribeHBaseInstance(d.Id())
if err != nil {
return errmsgs.WrapError(err)
}
target := strings.ToLower(d.Get("pay_type").(string))
if strings.ToLower(object["PayType"].(string)) != target {
request := hbase.CreateConvertInstanceRequest()
client.InitRpcRequest(*request.RpcRequest)
request.ClusterId = d.Id()
request.PayType = string(Postpaid)
if target == "prepaid" {
request.PayType = string(Prepaid)
}
if d.Get("duration").(int) > 9 {
request.PricingCycle = "year"
request.Duration = requests.NewInteger(d.Get("duration").(int) / 12)
} else {
request.PricingCycle = "month"
request.Duration = requests.NewInteger(d.Get("duration").(int))
}
raw, err := client.WithHbaseClient(func(hbaseClient *hbase.Client) (interface{}, error) {
return hbaseClient.ConvertInstance(request)
})
bresponse, ok := raw.(*hbase.ConvertInstanceResponse)
addDebug(request.GetActionName(), raw)
if err != nil {
errmsg := ""
if ok {
errmsg = errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse)
}
return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, d.Id(), request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg)
}
stateConf := BuildStateConf([]string{}, []string{Hb_ACTIVATION}, d.Timeout(schema.TimeoutUpdate),
2*time.Minute, hBaseService.HBaseClusterStateRefreshFunc(d.Id(), []string{}))
if _, err := stateConf.WaitForState(); err != nil {
return errmsgs.WrapErrorf(err, errmsgs.IdMsg, d.Id())
}
// d.SetPartial("pay_type")
}
}
if d.HasChange("ip_white") {
request := hbase.CreateModifyIpWhitelistRequest()
client.InitRpcRequest(*request.RpcRequest)
request.ClusterId = d.Id()
request.IpList = d.Get("ip_white").(string)
request.GroupName = "default"
request.IpVersion = "4"
raw, err := client.WithHbaseClient(func(hbaseClient *hbase.Client) (interface{}, error) {
return hbaseClient.ModifyIpWhitelist(request)
})
bresponse, ok := raw.(*hbase.ModifyIpWhitelistResponse)
addDebug(request.GetActionName(), raw, request.RpcRequest, request)
if err != nil {
errmsg := ""
if ok {
errmsg = errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse)
}
return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, d.Id(), request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg)
}
//d.SetPartial("ip_white")
}
if d.HasChange("security_groups") {
request := hbase.CreateModifySecurityGroupsRequest()
client.InitRpcRequest(*request.RpcRequest)
request.ClusterId = d.Id()
securityGroups := d.Get("security_groups").(*schema.Set).List()
if securityGroups != nil && len(securityGroups) > 0 {
request.SecurityGroupIds = strings.Join(expandStringList(securityGroups), ",")
} else {
request.SecurityGroupIds = " "
}
raw, err := client.WithHbaseClient(func(hbaseClient *hbase.Client) (interface{}, error) {
return hbaseClient.ModifySecurityGroups(request)
})
bresponse, ok := raw.(*hbase.ModifySecurityGroupsResponse)
addDebug(request.GetActionName(), raw, request.RpcRequest, request)
if err != nil {
errmsg := ""
if ok {
errmsg = errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse)
}
return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, d.Id(), request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg)
}
stateConf := BuildStateConf([]string{}, []string{Hb_ACTIVATION}, d.Timeout(schema.TimeoutUpdate),
5*time.Second, hBaseService.HBaseClusterStateRefreshFunc(d.Id(), []string{}))
if _, err := stateConf.WaitForState(); err != nil {
return errmsgs.WrapErrorf(err, errmsgs.IdMsg, d.Id())
}
//d.SetPartial("security_groups")
}
if d.HasChanges("maintain_start_time", "maintain_end_time") {
request := hbase.CreateModifyInstanceMaintainTimeRequest()
client.InitRpcRequest(*request.RpcRequest)
request.ClusterId = d.Id()
request.MaintainStartTime = d.Get("maintain_start_time").(string)
request.MaintainEndTime = d.Get("maintain_end_time").(string)
raw, err := client.WithHbaseClient(func(client *hbase.Client) (interface{}, error) {
return client.ModifyInstanceMaintainTime(request)
})
bresponse, ok := raw.(*hbase.ModifyInstanceMaintainTimeResponse)
if err != nil {
errmsg := ""
if ok {
errmsg = errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse)
}
return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, d.Id(), request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg)
}
addDebug(request.GetActionName(), raw, request.RpcRequest, request)
// d.SetPartial("maintain_start_time")
// d.SetPartial("maintain_end_time")
}
if d.HasChange("deletion_protection") {
if err := hBaseService.ModifyClusterDeletionProtection(d.Id(), d.Get("deletion_protection").(bool)); err != nil {
return errmsgs.WrapError(err)
}
//d.SetPartial("deletion_protection")
}
if err := hBaseService.setInstanceTags(d); err != nil {
return errmsgs.WrapError(err)
}
if d.HasChanges("account", "password") {
request := hbase.CreateModifyUIAccountPasswordRequest()
client.InitRpcRequest(*request.RpcRequest)
request.ClusterId = d.Id()
request.AccountName = d.Get("account").(string)
request.AccountPassword = d.Get("password").(string)
raw, err := client.WithHbaseClient(func(client *hbase.Client) (interface{}, error) {
return client.ModifyUIAccountPassword(request)
})
bresponse, ok := raw.(*hbase.ModifyUIAccountPasswordResponse)
if err != nil {
errmsg := ""
if ok {
errmsg = errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse)
}
return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, d.Id(), request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg)
}
addDebug(request.GetActionName(), raw, request.RpcRequest, request)
// d.SetPartial("account")
// d.SetPartial("password")
}
if d.IsNewResource() {
d.Partial(false)
return nil
}
if d.HasChange("name") {
request := hbase.CreateModifyInstanceNameRequest()
client.InitRpcRequest(*request.RpcRequest)
request.ClusterId = d.Id()
request.ClusterName = d.Get("name").(string)
raw, err := client.WithHbaseClient(func(client *hbase.Client) (interface{}, error) {
return client.ModifyInstanceName(request)
})
bresponse, ok := raw.(*hbase.ModifyInstanceNameResponse)
if err != nil {
errmsg := ""
if ok {
errmsg = errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse)
}
return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, d.Id(), request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg)
}
addDebug(request.GetActionName(), raw, request.RpcRequest, request)
//d.SetPartial("name")
}
if d.HasChange("core_instance_quantity") {
request := hbase.CreateResizeNodeCountRequest()
client.InitRpcRequest(*request.RpcRequest)
request.ClusterId = d.Id()
request.NodeCount = requests.NewInteger(d.Get("core_instance_quantity").(int))
raw, err := client.WithHbaseClient(func(client *hbase.Client) (interface{}, error) {
return client.ResizeNodeCount(request)
})
bresponse, ok := raw.(*hbase.ResizeNodeCountResponse)
if err != nil {
errmsg := ""
if ok {
errmsg = errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse)
}
return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, d.Id(), request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg)
}
// Cumbersome operation,async call, wait for state change
// wait instance status is running after modifying
stateConf := BuildStateConf([]string{Hb_NODE_RESIZING}, []string{Hb_ACTIVATION}, d.Timeout(schema.TimeoutUpdate),
5*time.Minute, hBaseService.HBaseClusterStateRefreshFunc(d.Id(), []string{Hb_NODE_RESIZING_FAILED}))
if _, err := stateConf.WaitForState(); err != nil {
return errmsgs.WrapError(err)
}
addDebug(request.GetActionName(), raw, request.RpcRequest, request)
//d.SetPartial("core_instance_quantity")
}
if d.HasChanges("master_instance_type", "core_instance_type") {
request := hbase.CreateModifyInstanceTypeRequest()
client.InitRpcRequest(*request.RpcRequest)
request.ClusterId = d.Id()
typeChange := false
if d.HasChange("master_instance_type") &&
d.Get("engine") != "bds" && d.Get("core_instance_quantity").(int) > 1 {
request.MasterInstanceType = d.Get("master_instance_type").(string)
typeChange = true
}
if d.HasChange("core_instance_type") {
request.CoreInstanceType = d.Get("core_instance_type").(string)
typeChange = true
}
if typeChange {
raw, err := client.WithHbaseClient(func(client *hbase.Client) (interface{}, error) {
return client.ModifyInstanceType(request)
})
bresponse, ok := raw.(*hbase.ModifyInstanceTypeResponse)
if err != nil {
errmsg := ""
if ok {
errmsg = errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse)
}
return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, d.Id(), request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg)
}
// Cumbersome operation,async call, wait for state change
// wait instance status is running after modifying
stateConf := BuildStateConf([]string{Hb_LEVEL_MODIFY}, []string{Hb_ACTIVATION}, d.Timeout(schema.TimeoutUpdate),
5*time.Minute, hBaseService.HBaseClusterStateRefreshFunc(d.Id(), []string{Hb_LEVEL_MODIFY_FAILED}))
if _, err := stateConf.WaitForState(); err != nil {
return errmsgs.WrapError(err)
}
addDebug(request.GetActionName(), raw, request.RpcRequest, request)
// d.SetPartial("master_instance_type")
// d.SetPartial("core_instance_type")
}
}
if d.HasChange("core_disk_size") && d.Get("engine") != "bds" {
request := hbase.CreateResizeDiskSizeRequest()
client.InitRpcRequest(*request.RpcRequest)
request.ClusterId = d.Id()
request.NodeDiskSize = requests.NewInteger(d.Get("core_disk_size").(int))
raw, err := client.WithHbaseClient(func(client *hbase.Client) (interface{}, error) {
return client.ResizeDiskSize(request)
})
bresponse, ok := raw.(*hbase.ResizeDiskSizeResponse)
if err != nil {
errmsg := ""
if ok {
errmsg = errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse)
}
return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, d.Id(), request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg)
}
// Cumbersome operation,async call, wait for state change
// wait instance status is running after modifying
stateConf := BuildStateConf([]string{Hb_DISK_RESIZING}, []string{Hb_ACTIVATION}, d.Timeout(schema.TimeoutUpdate),
2*time.Minute, hBaseService.HBaseClusterStateRefreshFunc(d.Id(), []string{Hb_DISK_RESIZE_FAILED}))
if _, err := stateConf.WaitForState(); err != nil {
return errmsgs.WrapError(err)
}
addDebug(request.GetActionName(), raw, request.RpcRequest, request)
//d.SetPartial("core_disk_size")
}
if d.HasChange("cold_storage_size") {
request := hbase.CreateResizeColdStorageSizeRequest()
client.InitRpcRequest(*request.RpcRequest)
request.ClusterId = d.Id()
request.ColdStorageSize = requests.NewInteger(d.Get("cold_storage_size").(int))
raw, err := client.WithHbaseClient(func(client *hbase.Client) (interface{}, error) {
return client.ResizeColdStorageSize(request)
})
bresponse, ok := raw.(*hbase.ResizeColdStorageSizeResponse)
if err != nil {
errmsg := ""
if ok {
errmsg = errmsgs.GetBaseResponseErrorMessage(bresponse.BaseResponse)
}
return errmsgs.WrapErrorf(err, errmsgs.RequestV1ErrorMsg, d.Id(), request.GetActionName(), errmsgs.AlibabacloudStackSdkGoERROR, errmsg)
}
// Cumbersome operation,async call, wait for state change
// wait instance status is running after modifying
stateConf := BuildStateConf([]string{Hb_HBASE_COLD_EXPANDING}, []string{Hb_ACTIVATION}, d.Timeout(schema.TimeoutUpdate),
10*time.Second, hBaseService.HBaseClusterStateRefreshFunc(d.Id(), []string{Hb_DISK_RESIZE_FAILED}))
if _, err := stateConf.WaitForState(); err != nil {
return errmsgs.WrapError(err)
}
addDebug(request.GetActionName(), raw, request.RpcRequest, request)
//d.SetPartial("cold_storage_size")
}
d.Partial(false)
return nil
}