Skip to content

Commit 5f80783

Browse files
author
mikatong
committed
lite hbase support prepay
1 parent 91b8f2e commit 5f80783

File tree

9 files changed

+1387
-185
lines changed

9 files changed

+1387
-185
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ require (
5959
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/domain v1.0.414
6060
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dts v1.0.628
6161
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/eb v1.0.760
62-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/emr v1.0.1004
62+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/emr v1.0.1055
6363
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/es v1.0.777
6464
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/gaap v1.0.970
6565
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/kms v1.0.563

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -974,6 +974,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/eb v1.0.760 h1:IKP2LFgJ
974974
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/eb v1.0.760/go.mod h1:pSQXTeuC6BahiUIfssVqvL1/BoXccLkyD7nJ+tKgygw=
975975
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/emr v1.0.1004 h1:PbKCgIXZSwX0eraNZGG+AqVjgLZwW/C+up/6mL9FP3o=
976976
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/emr v1.0.1004/go.mod h1:6H1XZ2TIVV6VHdjkdQQl611NsIJkeTqugZ1jaUfPop4=
977+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/emr v1.0.1055 h1:CAxiWYRFmvpcDMkpoF7E0HZXgpM2BPYE+uyrS92LPQE=
978+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/emr v1.0.1055/go.mod h1:tmcOt09PyU+2nQgdbz0Lwe8aS8/Sb1spemL9kxusCPU=
977979
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/es v1.0.777 h1:G1eX/DkiznhSjNVF97BAQyycFXOiPHxeTxgOadp5J/o=
978980
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/es v1.0.777/go.mod h1:ehbc9eaNknF/VU/kPTFLZbIUmkL06vQ/JYydu6yeXp4=
979981
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/gaap v1.0.970 h1:Z82LbcEnE2m4CGvcOY024N7REhAN++xdEyE88HG2YBA=

tencentcloud/services/emr/resource_tc_lite_hbase_instance.go

Lines changed: 73 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,19 +34,19 @@ func ResourceTencentCloudLiteHbaseInstance() *schema.Resource {
3434
"pay_mode": {
3535
Type: schema.TypeInt,
3636
Required: true,
37-
Description: "Instance pay mode. Value range: 0: indicates post pay mode, that is, pay-as-you-go.",
37+
Description: "Instance pay mode. Value range: 0: indicates post-pay mode, that is, pay-as-you-go. 1: indicates pre-pay mode, that is, monthly subscription.",
3838
},
3939

4040
"disk_type": {
4141
Type: schema.TypeString,
4242
Required: true,
43-
Description: "Instance disk type, fill in CLOUD_HSSD to indicate performance cloud storage.",
43+
Description: "Instance disk type, Value range: CLOUD_HSSD: indicate performance cloud storage(ESSD). CLOUD_BSSD: indicate standard cloud storage(SSD).",
4444
},
4545

4646
"disk_size": {
4747
Type: schema.TypeInt,
4848
Required: true,
49-
Description: "Instance single-node disk capacity, in GB. The single-node disk capacity must be greater than or equal to 100 and less than or equal to 10000, with an adjustment step size of 20.",
49+
Description: "Instance single-node disk capacity, in GB. The single-node disk capacity must be greater than or equal to 100 and less than or equal to 250 times the number of CPU cores. The capacity adjustment step is 100.",
5050
},
5151

5252
"node_type": {
@@ -114,6 +114,23 @@ func ResourceTencentCloudLiteHbaseInstance() *schema.Resource {
114114
},
115115
},
116116
},
117+
118+
"time_span": {
119+
Type: schema.TypeInt,
120+
Optional: true,
121+
Description: "Time span.",
122+
},
123+
"time_unit": {
124+
Type: schema.TypeString,
125+
Optional: true,
126+
Description: "Time unit, fill in m which means month.",
127+
},
128+
"auto_renew_flag": {
129+
Type: schema.TypeInt,
130+
Optional: true,
131+
Computed: true,
132+
Description: "AutoRenewFlag, Value range: 0: indicates NOTIFY_AND_MANUAL_RENEW; 1: indicates NOTIFY_AND_AUTO_RENEW; 2: indicates DISABLE_NOTIFY_AND_MANUAL_RENEW.",
133+
},
117134
},
118135
}
119136
}
@@ -189,6 +206,31 @@ func resourceTencentCloudLiteHbaseInstanceCreate(d *schema.ResourceData, meta in
189206
}
190207
}
191208

209+
var prePaySetting *emr.PrePaySetting
210+
if v, ok := d.GetOk("time_span"); ok {
211+
prePaySetting = &emr.PrePaySetting{}
212+
prePaySetting.Period = &emr.Period{}
213+
prePaySetting.Period.TimeSpan = helper.IntInt64(v.(int))
214+
}
215+
if v, ok := d.GetOk("time_unit"); ok {
216+
if prePaySetting == nil {
217+
prePaySetting = &emr.PrePaySetting{}
218+
}
219+
if prePaySetting.Period == nil {
220+
prePaySetting.Period = &emr.Period{}
221+
}
222+
prePaySetting.Period.TimeUnit = helper.String(v.(string))
223+
}
224+
if v, ok := d.GetOk("auto_renew_flag"); ok {
225+
if prePaySetting == nil {
226+
prePaySetting = &emr.PrePaySetting{}
227+
}
228+
prePaySetting.AutoRenewFlag = helper.IntInt64(v.(int))
229+
}
230+
if prePaySetting != nil {
231+
request.PrePaySetting = prePaySetting
232+
}
233+
192234
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
193235
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseEmrClient().CreateSLInstanceWithContext(ctx, request)
194236
if e != nil {
@@ -267,10 +309,6 @@ func resourceTencentCloudLiteHbaseInstanceRead(d *schema.ResourceData, meta inte
267309
_ = d.Set("disk_size", respData.DiskSize)
268310
}
269311

270-
if respData.NodeType != nil {
271-
_ = d.Set("node_type", respData.NodeType)
272-
}
273-
274312
zoneSettingsList := make([]map[string]interface{}, 0, len(respData.ZoneSettings))
275313
if respData.ZoneSettings != nil {
276314
for _, zoneSettings := range respData.ZoneSettings {
@@ -322,6 +360,9 @@ func resourceTencentCloudLiteHbaseInstanceRead(d *schema.ResourceData, meta inte
322360

323361
_ = d.Set("tags", tagsList)
324362
}
363+
if respData.AutoRenewFlag != nil {
364+
_ = d.Set("auto_renew_flag", respData.AutoRenewFlag)
365+
}
325366

326367
_ = instanceId
327368
return nil
@@ -335,7 +376,7 @@ func resourceTencentCloudLiteHbaseInstanceUpdate(d *schema.ResourceData, meta in
335376

336377
ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta)
337378

338-
immutableArgs := []string{"instance_name", "pay_mode", "disk_type", "disk_size", "node_type", "tags"}
379+
immutableArgs := []string{"instance_name", "pay_mode", "disk_type", "disk_size", "node_type", "tags", "time_span", "time_unit", "auto_renew_flag"}
339380
for _, v := range immutableArgs {
340381
if d.HasChange(v) {
341382
return fmt.Errorf("argument `%s` cannot be changed", v)
@@ -434,9 +475,33 @@ func resourceTencentCloudLiteHbaseInstanceDelete(d *schema.ResourceData, meta in
434475
log.Printf("[CRITAL]%s delete lite hbase instance failed, reason:%+v", logId, err)
435476
return err
436477
}
478+
437479
emrService := EMRService{
438480
client: meta.(tccommon.ProviderMeta).GetAPIV3Conn(),
439481
}
482+
483+
if d.Get("pay_mode").(int) == 1 {
484+
conf := tccommon.BuildStateChangeConf([]string{}, []string{"201"}, 10*tccommon.ReadRetryTimeout, time.Second, emrService.SLInstanceStateRefreshFunc(instanceId, []string{}))
485+
if _, e := conf.WaitForState(); e != nil {
486+
return e
487+
}
488+
489+
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
490+
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseEmrClient().TerminateSLInstanceWithContext(ctx, request)
491+
if e != nil {
492+
return tccommon.RetryError(e)
493+
} else {
494+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
495+
}
496+
response = result
497+
return nil
498+
})
499+
if err != nil {
500+
log.Printf("[CRITAL]%s delete lite hbase instance failed, reason:%+v", logId, err)
501+
return err
502+
}
503+
}
504+
440505
conf := tccommon.BuildStateChangeConf([]string{}, []string{"-2"}, 10*tccommon.ReadRetryTimeout, time.Second, emrService.SLInstanceStateRefreshFunc(instanceId, []string{}))
441506
if _, e := conf.WaitForState(); e != nil {
442507
return e

tencentcloud/services/emr/resource_tc_lite_hbase_instance_test.go

Lines changed: 58 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,39 @@ func TestAccTencentCloudLiteHbaseInstanceResource_basic(t *testing.T) {
5151
),
5252
},
5353
{
54-
ResourceName: "tencentcloud_lite_hbase_instance.lite_hbase_instance",
55-
ImportState: true,
56-
ImportStateVerify: true,
54+
ResourceName: "tencentcloud_lite_hbase_instance.lite_hbase_instance",
55+
ImportState: true,
56+
ImportStateVerify: true,
57+
ImportStateVerifyIgnore: []string{"node_type", "time_span", "time_unit"},
58+
},
59+
},
60+
})
61+
}
62+
63+
func TestAccTencentCloudLiteHbaseInstanceResource_prepay(t *testing.T) {
64+
t.Parallel()
65+
resource.Test(t, resource.TestCase{
66+
PreCheck: func() {
67+
tcacctest.AccPreCheck(t)
68+
},
69+
Providers: tcacctest.AccProviders,
70+
Steps: []resource.TestStep{
71+
{
72+
Config: testAccLiteHbaseInstancePrePay,
73+
Check: resource.ComposeTestCheckFunc(
74+
resource.TestCheckResourceAttrSet("tencentcloud_lite_hbase_instance.lite_hbase_instance_prepay", "id"),
75+
resource.TestCheckResourceAttr("tencentcloud_lite_hbase_instance.lite_hbase_instance_prepay", "instance_name", "tf-test-prepay"),
76+
resource.TestCheckResourceAttr("tencentcloud_lite_hbase_instance.lite_hbase_instance_prepay", "pay_mode", "1"),
77+
resource.TestCheckResourceAttr("tencentcloud_lite_hbase_instance.lite_hbase_instance_prepay", "time_span", "1"),
78+
resource.TestCheckResourceAttr("tencentcloud_lite_hbase_instance.lite_hbase_instance_prepay", "time_unit", "m"),
79+
resource.TestCheckResourceAttr("tencentcloud_lite_hbase_instance.lite_hbase_instance_prepay", "auto_renew_flag", "1"),
80+
),
81+
},
82+
{
83+
ResourceName: "tencentcloud_lite_hbase_instance.lite_hbase_instance_prepay",
84+
ImportState: true,
85+
ImportStateVerify: true,
86+
ImportStateVerifyIgnore: []string{"node_type", "time_span", "time_unit"},
5787
},
5888
},
5989
})
@@ -140,6 +170,31 @@ resource "tencentcloud_lite_hbase_instance" "lite_hbase_instance" {
140170
}
141171
`
142172

173+
const testAccLiteHbaseInstancePrePay = `
174+
resource "tencentcloud_lite_hbase_instance" "lite_hbase_instance_prepay" {
175+
instance_name = "tf-test-prepay"
176+
pay_mode = 1
177+
disk_type = "CLOUD_HSSD"
178+
disk_size = 100
179+
node_type = "4C16G"
180+
zone_settings {
181+
zone = "ap-guangzhou-6"
182+
vpc_settings {
183+
vpc_id = "vpc-a5pph3hr"
184+
subnet_id = "subnet-bpr2mo2g"
185+
}
186+
node_num = 3
187+
}
188+
tags {
189+
tag_key = "test"
190+
tag_value = "test"
191+
}
192+
time_span = 1
193+
time_unit = "m"
194+
auto_renew_flag = 1
195+
}
196+
`
197+
143198
const testAccLiteHbaseInstanceMultiZone = `
144199
resource "tencentcloud_lite_hbase_instance" "lite_hbase_instance_multi_zone" {
145200
instance_name = "tf-test-multi-zone"

0 commit comments

Comments
 (0)