Skip to content

Commit f810f6a

Browse files
tongyimingmikatong
and
mikatong
authored
fix(emr): [121046444] lite hbase support prepay (#3002)
* lite hbase support prepay * add changelog * add tencentcloud_serverless_hbase_instance * update changelog * update test case * update node_type * update changelog --------- Co-authored-by: mikatong <[email protected]>
1 parent 6464501 commit f810f6a

17 files changed

+2276
-191
lines changed

.changelog/3002.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
```release-note:deprecation
2+
resource/tencentcloud_lite_hbase_instance
3+
```
4+
5+
```release-note:new-resource
6+
tencentcloud_serverless_hbase_instance
7+
```

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
@@ -972,6 +972,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/eb v1.0.760 h1:IKP2LFgJ
972972
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/eb v1.0.760/go.mod h1:pSQXTeuC6BahiUIfssVqvL1/BoXccLkyD7nJ+tKgygw=
973973
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/emr v1.0.1004 h1:PbKCgIXZSwX0eraNZGG+AqVjgLZwW/C+up/6mL9FP3o=
974974
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/emr v1.0.1004/go.mod h1:6H1XZ2TIVV6VHdjkdQQl611NsIJkeTqugZ1jaUfPop4=
975+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/emr v1.0.1055 h1:CAxiWYRFmvpcDMkpoF7E0HZXgpM2BPYE+uyrS92LPQE=
976+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/emr v1.0.1055/go.mod h1:tmcOt09PyU+2nQgdbz0Lwe8aS8/Sb1spemL9kxusCPU=
975977
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/es v1.0.777 h1:G1eX/DkiznhSjNVF97BAQyycFXOiPHxeTxgOadp5J/o=
976978
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/es v1.0.777/go.mod h1:ehbc9eaNknF/VU/kPTFLZbIUmkL06vQ/JYydu6yeXp4=
977979
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/gaap v1.0.970 h1:Z82LbcEnE2m4CGvcOY024N7REhAN++xdEyE88HG2YBA=

tencentcloud/provider.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2190,6 +2190,7 @@ func Provider() *schema.Provider {
21902190
"tencentcloud_thpc_workspaces": thpc.ResourceTencentCloudThpcWorkspaces(),
21912191
"tencentcloud_kubernetes_health_check_policy": tke.ResourceTencentCloudKubernetesHealthCheckPolicy(),
21922192
"tencentcloud_lite_hbase_instance": emr.ResourceTencentCloudLiteHbaseInstance(),
2193+
"tencentcloud_serverless_hbase_instance": emr.ResourceTencentCloudServerlessHbaseInstance(),
21932194
"tencentcloud_kubernetes_log_config": tke.ResourceTencentCloudKubernetesLogConfig(),
21942195
"tencentcloud_tcss_image_registry": tcss.ResourceTencentCloudTcssImageRegistry(),
21952196
},

tencentcloud/provider.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1330,6 +1330,7 @@ MapReduce(EMR)
13301330
tencentcloud_emr_cluster
13311331
tencentcloud_emr_user_manager
13321332
tencentcloud_lite_hbase_instance
1333+
tencentcloud_serverless_hbase_instance
13331334

13341335
DNSPOD
13351336
Resource

tencentcloud/services/emr/resource_tc_lite_hbase_instance.go

Lines changed: 79 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,11 @@ import (
1717

1818
func ResourceTencentCloudLiteHbaseInstance() *schema.Resource {
1919
return &schema.Resource{
20-
Create: resourceTencentCloudLiteHbaseInstanceCreate,
21-
Read: resourceTencentCloudLiteHbaseInstanceRead,
22-
Update: resourceTencentCloudLiteHbaseInstanceUpdate,
23-
Delete: resourceTencentCloudLiteHbaseInstanceDelete,
20+
DeprecationMessage: "This resource will been deprecated in Terraform TencentCloud provider later version. Please use `tencentcloud_serverless_hbase_instance` instead.",
21+
Create: resourceTencentCloudLiteHbaseInstanceCreate,
22+
Read: resourceTencentCloudLiteHbaseInstanceRead,
23+
Update: resourceTencentCloudLiteHbaseInstanceUpdate,
24+
Delete: resourceTencentCloudLiteHbaseInstanceDelete,
2425
Importer: &schema.ResourceImporter{
2526
State: schema.ImportStatePassthrough,
2627
},
@@ -34,24 +35,24 @@ func ResourceTencentCloudLiteHbaseInstance() *schema.Resource {
3435
"pay_mode": {
3536
Type: schema.TypeInt,
3637
Required: true,
37-
Description: "Instance pay mode. Value range: 0: indicates post pay mode, that is, pay-as-you-go.",
38+
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.",
3839
},
3940

4041
"disk_type": {
4142
Type: schema.TypeString,
4243
Required: true,
43-
Description: "Instance disk type, fill in CLOUD_HSSD to indicate performance cloud storage.",
44+
Description: "Instance disk type, Value range: CLOUD_HSSD: indicate performance cloud storage(ESSD). CLOUD_BSSD: indicate standard cloud storage(SSD).",
4445
},
4546

4647
"disk_size": {
4748
Type: schema.TypeInt,
4849
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.",
50+
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.",
5051
},
5152

5253
"node_type": {
5354
Type: schema.TypeString,
54-
Required: true,
55+
Optional: true,
5556
Description: "Instance node type, can be filled in as 4C16G, 8C32G, 16C64G, 32C128G, case insensitive.",
5657
},
5758

@@ -114,6 +115,23 @@ func ResourceTencentCloudLiteHbaseInstance() *schema.Resource {
114115
},
115116
},
116117
},
118+
119+
"time_span": {
120+
Type: schema.TypeInt,
121+
Optional: true,
122+
Description: "Time span.",
123+
},
124+
"time_unit": {
125+
Type: schema.TypeString,
126+
Optional: true,
127+
Description: "Time unit, fill in m which means month.",
128+
},
129+
"auto_renew_flag": {
130+
Type: schema.TypeInt,
131+
Optional: true,
132+
Computed: true,
133+
Description: "AutoRenewFlag, Value range: 0: indicates NOTIFY_AND_MANUAL_RENEW; 1: indicates NOTIFY_AND_AUTO_RENEW; 2: indicates DISABLE_NOTIFY_AND_MANUAL_RENEW.",
134+
},
117135
},
118136
}
119137
}
@@ -189,6 +207,31 @@ func resourceTencentCloudLiteHbaseInstanceCreate(d *schema.ResourceData, meta in
189207
}
190208
}
191209

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

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

323362
_ = d.Set("tags", tagsList)
324363
}
364+
if respData.AutoRenewFlag != nil {
365+
_ = d.Set("auto_renew_flag", respData.AutoRenewFlag)
366+
}
325367

326368
_ = instanceId
327369
return nil
@@ -335,7 +377,7 @@ func resourceTencentCloudLiteHbaseInstanceUpdate(d *schema.ResourceData, meta in
335377

336378
ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta)
337379

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

tencentcloud/services/emr/resource_tc_lite_hbase_instance_test.go

Lines changed: 61 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ func TestAccTencentCloudLiteHbaseInstanceResource_basic(t *testing.T) {
1212
t.Parallel()
1313
resource.Test(t, resource.TestCase{
1414
PreCheck: func() {
15+
tcacctest.AccStepSetRegion(t, "ap-shanghai")
1516
tcacctest.AccPreCheck(t)
1617
},
1718
Providers: tcacctest.AccProviders,
@@ -51,9 +52,40 @@ func TestAccTencentCloudLiteHbaseInstanceResource_basic(t *testing.T) {
5152
),
5253
},
5354
{
54-
ResourceName: "tencentcloud_lite_hbase_instance.lite_hbase_instance",
55-
ImportState: true,
56-
ImportStateVerify: true,
55+
ResourceName: "tencentcloud_lite_hbase_instance.lite_hbase_instance",
56+
ImportState: true,
57+
ImportStateVerify: true,
58+
ImportStateVerifyIgnore: []string{"node_type", "time_span", "time_unit"},
59+
},
60+
},
61+
})
62+
}
63+
64+
func TestAccTencentCloudLiteHbaseInstanceResource_prepay(t *testing.T) {
65+
t.Parallel()
66+
resource.Test(t, resource.TestCase{
67+
PreCheck: func() {
68+
tcacctest.AccStepSetRegion(t, "ap-shanghai")
69+
tcacctest.AccPreCheck(t)
70+
},
71+
Providers: tcacctest.AccProviders,
72+
Steps: []resource.TestStep{
73+
{
74+
Config: testAccLiteHbaseInstancePrePay,
75+
Check: resource.ComposeTestCheckFunc(
76+
resource.TestCheckResourceAttrSet("tencentcloud_lite_hbase_instance.lite_hbase_instance_prepay", "id"),
77+
resource.TestCheckResourceAttr("tencentcloud_lite_hbase_instance.lite_hbase_instance_prepay", "instance_name", "tf-test-prepay"),
78+
resource.TestCheckResourceAttr("tencentcloud_lite_hbase_instance.lite_hbase_instance_prepay", "pay_mode", "1"),
79+
resource.TestCheckResourceAttr("tencentcloud_lite_hbase_instance.lite_hbase_instance_prepay", "time_span", "1"),
80+
resource.TestCheckResourceAttr("tencentcloud_lite_hbase_instance.lite_hbase_instance_prepay", "time_unit", "m"),
81+
resource.TestCheckResourceAttr("tencentcloud_lite_hbase_instance.lite_hbase_instance_prepay", "auto_renew_flag", "1"),
82+
),
83+
},
84+
{
85+
ResourceName: "tencentcloud_lite_hbase_instance.lite_hbase_instance_prepay",
86+
ImportState: true,
87+
ImportStateVerify: true,
88+
ImportStateVerifyIgnore: []string{"node_type", "time_span", "time_unit"},
5789
},
5890
},
5991
})
@@ -63,6 +95,7 @@ func TestAccTencentCloudLiteHbaseInstanceResource_multiZone(t *testing.T) {
6395
t.Parallel()
6496
resource.Test(t, resource.TestCase{
6597
PreCheck: func() {
98+
tcacctest.AccStepSetRegion(t, "ap-shanghai")
6699
tcacctest.AccPreCheck(t)
67100
},
68101
Providers: tcacctest.AccProviders,
@@ -140,6 +173,31 @@ resource "tencentcloud_lite_hbase_instance" "lite_hbase_instance" {
140173
}
141174
`
142175

176+
const testAccLiteHbaseInstancePrePay = `
177+
resource "tencentcloud_lite_hbase_instance" "lite_hbase_instance_prepay" {
178+
instance_name = "tf-test-prepay"
179+
pay_mode = 1
180+
disk_type = "CLOUD_HSSD"
181+
disk_size = 100
182+
node_type = "4C16G"
183+
zone_settings {
184+
zone = "ap-shanghai-2"
185+
vpc_settings {
186+
vpc_id = "vpc-muytmxhk"
187+
subnet_id = "subnet-9ye3xm5v"
188+
}
189+
node_num = 3
190+
}
191+
tags {
192+
tag_key = "test"
193+
tag_value = "test"
194+
}
195+
time_span = 1
196+
time_unit = "m"
197+
auto_renew_flag = 1
198+
}
199+
`
200+
143201
const testAccLiteHbaseInstanceMultiZone = `
144202
resource "tencentcloud_lite_hbase_instance" "lite_hbase_instance_multi_zone" {
145203
instance_name = "tf-test-multi-zone"

0 commit comments

Comments
 (0)