Skip to content

Commit ae5ffd7

Browse files
author
mikatong
committed
lite hbase support prepay
1 parent 1722c24 commit ae5ffd7

File tree

10 files changed

+1392
-188
lines changed

10 files changed

+1392
-188
lines changed

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ require (
4646
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb v1.0.1034
4747
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit v1.0.1033
4848
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls v1.0.1046
49-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1052
49+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1055
5050
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.1014
5151
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp v1.0.762
5252
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.692
@@ -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: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -934,6 +934,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1051 h1:3mg
934934
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1051/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
935935
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1052 h1:RCs8aH5Gy1sn4qc22KweqQE7usx1S2reyZcedo0ZXBI=
936936
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1052/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
937+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1055 h1:qDpGP5ee98ZW5m0192E/cvw18PGAjaqIqYuqaFME2iE=
938+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1055/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
937939
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/controlcenter v1.0.993 h1:WlPgXldQCxt7qi5Xrc6j6zTrsXWzN5BcOGs7Irq7fwQ=
938940
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/controlcenter v1.0.993/go.mod h1:Z9U8zNtyuyKhjS0698wqsrG/kLx1TQ5CEixXBwVe7xY=
939941
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/csip v1.0.860 h1:F3esKBIT3HW9+7Gt8cVgf8X06VdGIczpgLBUECzSEzU=
@@ -966,6 +968,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/eb v1.0.760 h1:IKP2LFgJ
966968
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/eb v1.0.760/go.mod h1:pSQXTeuC6BahiUIfssVqvL1/BoXccLkyD7nJ+tKgygw=
967969
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/emr v1.0.1004 h1:PbKCgIXZSwX0eraNZGG+AqVjgLZwW/C+up/6mL9FP3o=
968970
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/emr v1.0.1004/go.mod h1:6H1XZ2TIVV6VHdjkdQQl611NsIJkeTqugZ1jaUfPop4=
971+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/emr v1.0.1055 h1:CAxiWYRFmvpcDMkpoF7E0HZXgpM2BPYE+uyrS92LPQE=
972+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/emr v1.0.1055/go.mod h1:tmcOt09PyU+2nQgdbz0Lwe8aS8/Sb1spemL9kxusCPU=
969973
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/es v1.0.777 h1:G1eX/DkiznhSjNVF97BAQyycFXOiPHxeTxgOadp5J/o=
970974
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/es v1.0.777/go.mod h1:ehbc9eaNknF/VU/kPTFLZbIUmkL06vQ/JYydu6yeXp4=
971975
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"

vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http/request.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)