Skip to content

Commit f11180d

Browse files
tongyimingmikatong
andauthored
support group_quota, vnc_url and reboot (#1663)
* support group_quota, vnc_url and reboot * add changelog --------- Co-authored-by: mikatong <mikatong@tencent.com>
1 parent 9c47c74 commit f11180d

14 files changed

+594
-0
lines changed

.changelog/1663.txt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
```release-note:new-data-source
2+
tencentcloud_cvm_instance_vnc_url
3+
```
4+
5+
```release-note:new-data-source
6+
tencentcloud_cvm_disaster_recover_group_quota
7+
```
8+
9+
```release-note:new-resource
10+
tencentcloud_cvm_reboot_instance
11+
```

tencentcloud/basic_test.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,14 @@ variable "cvm_id" {
153153
}
154154
`
155155

156+
// cvm-reboot
157+
const defaultRebootCvmId = "ins-f9jr4bd2"
158+
const defaultRebootCvmVariable = `
159+
variable "cvm_id" {
160+
default = "` + defaultRebootCvmId + `"
161+
}
162+
`
163+
156164
// AS
157165
const defaultAsVariable = `
158166
variable "availability_zone" {
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
/*
2+
Use this data source to query detailed information of cvm disaster_recover_group_quota
3+
4+
Example Usage
5+
6+
```hcl
7+
data "tencentcloud_cvm_disaster_recover_group_quota" "disaster_recover_group_quota" {
8+
}
9+
```
10+
*/
11+
package tencentcloud
12+
13+
import (
14+
"fmt"
15+
16+
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
17+
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
18+
cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312"
19+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
20+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/ratelimit"
21+
)
22+
23+
func dataSourceTencentCloudCvmDisasterRecoverGroupQuota() *schema.Resource {
24+
return &schema.Resource{
25+
Read: dataSourceTencentCloudCvmDisasterRecoverGroupQuotaRead,
26+
Schema: map[string]*schema.Schema{
27+
"group_quota": {
28+
Computed: true,
29+
Type: schema.TypeInt,
30+
Description: "The maximum number of placement groups that can be created.",
31+
},
32+
33+
"current_num": {
34+
Computed: true,
35+
Type: schema.TypeInt,
36+
Description: "The number of placement groups that have been created by the current user.",
37+
},
38+
39+
"cvm_in_host_group_quota": {
40+
Computed: true,
41+
Type: schema.TypeInt,
42+
Description: "Quota on instances in a physical-machine-type disaster recovery group.",
43+
},
44+
45+
"cvm_in_sw_group_quota": {
46+
Computed: true,
47+
Type: schema.TypeInt,
48+
Description: "Quota on instances in a switch-type disaster recovery group.",
49+
},
50+
51+
"cvm_in_rack_group_quota": {
52+
Computed: true,
53+
Type: schema.TypeInt,
54+
Description: "Quota on instances in a rack-type disaster recovery group.",
55+
},
56+
57+
"result_output_file": {
58+
Type: schema.TypeString,
59+
Optional: true,
60+
Description: "Used to save results.",
61+
},
62+
},
63+
}
64+
}
65+
66+
func dataSourceTencentCloudCvmDisasterRecoverGroupQuotaRead(d *schema.ResourceData, meta interface{}) error {
67+
defer logElapsed("data_source.tencentcloud_cvm_disaster_recover_group_quota.read")()
68+
defer inconsistentCheck(d, meta)()
69+
70+
var response *cvm.DescribeDisasterRecoverGroupQuotaResponse
71+
72+
request := cvm.NewDescribeDisasterRecoverGroupQuotaRequest()
73+
err := resource.Retry(readRetryTimeout, func() *resource.RetryError {
74+
ratelimit.Check(request.GetAction())
75+
result, e := meta.(*TencentCloudClient).apiV3Conn.UseCvmClient().DescribeDisasterRecoverGroupQuota(request)
76+
if e != nil {
77+
return retryError(e)
78+
}
79+
response = result
80+
return nil
81+
})
82+
if err != nil {
83+
return err
84+
}
85+
if response == nil || response.Response == nil {
86+
d.SetId("")
87+
return fmt.Errorf("Response is nil")
88+
}
89+
_ = d.Set("group_quota", response.Response.GroupQuota)
90+
_ = d.Set("current_num", response.Response.CurrentNum)
91+
_ = d.Set("cvm_in_host_group_quota", response.Response.CvmInHostGroupQuota)
92+
_ = d.Set("cvm_in_sw_group_quota", response.Response.CvmInSwGroupQuota)
93+
_ = d.Set("cvm_in_rack_group_quota", response.Response.CvmInRackGroupQuota)
94+
95+
d.SetId(helper.BuildToken())
96+
output, ok := d.GetOk("result_output_file")
97+
if ok && output.(string) != "" {
98+
if e := writeToFile(output.(string), map[string]interface{}{
99+
"group_quota": response.Response.GroupQuota,
100+
"current_num": response.Response.CurrentNum,
101+
"cvm_in_host_group_quota": response.Response.CvmInHostGroupQuota,
102+
"cvm_in_sw_group_quota": response.Response.CvmInSwGroupQuota,
103+
"cvm_in_rack_group_quota": response.Response.CvmInRackGroupQuota,
104+
}); e != nil {
105+
return e
106+
}
107+
}
108+
return nil
109+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package tencentcloud
2+
3+
import (
4+
"testing"
5+
6+
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
7+
)
8+
9+
func TestAccTencentCloudCvmDisasterRecoverGroupQuotaDataSource_basic(t *testing.T) {
10+
t.Parallel()
11+
resource.Test(t, resource.TestCase{
12+
PreCheck: func() {
13+
testAccPreCheck(t)
14+
},
15+
Providers: testAccProviders,
16+
Steps: []resource.TestStep{
17+
{
18+
Config: testAccCvmDisasterRecoverGroupQuotaDataSource,
19+
Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_cvm_disaster_recover_group_quota.disaster_recover_group_quota")),
20+
},
21+
},
22+
})
23+
}
24+
25+
const testAccCvmDisasterRecoverGroupQuotaDataSource = `
26+
27+
data "tencentcloud_cvm_disaster_recover_group_quota" "disaster_recover_group_quota" {
28+
}
29+
30+
`
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
/*
2+
Use this data source to query detailed information of cvm instance_vnc_url
3+
4+
Example Usage
5+
6+
```hcl
7+
data "tencentcloud_cvm_instance_vnc_url" "instance_vnc_url" {
8+
instance_id = "ins-xxxxxxxx"
9+
}
10+
```
11+
*/
12+
package tencentcloud
13+
14+
import (
15+
"fmt"
16+
17+
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
18+
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
19+
cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312"
20+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
21+
)
22+
23+
func dataSourceTencentCloudCvmInstanceVncUrl() *schema.Resource {
24+
return &schema.Resource{
25+
Read: dataSourceTencentCloudCvmInstanceVncUrlRead,
26+
Schema: map[string]*schema.Schema{
27+
"instance_id": {
28+
Required: true,
29+
Type: schema.TypeString,
30+
Description: "Instance ID. To obtain the instance IDs, you can call `DescribeInstances` and look for `InstanceId` in the response.",
31+
},
32+
33+
"instance_vnc_url": {
34+
Computed: true,
35+
Type: schema.TypeString,
36+
Description: "Instance VNC URL.",
37+
},
38+
39+
"result_output_file": {
40+
Type: schema.TypeString,
41+
Optional: true,
42+
Description: "Used to save results.",
43+
},
44+
},
45+
}
46+
}
47+
48+
func dataSourceTencentCloudCvmInstanceVncUrlRead(d *schema.ResourceData, meta interface{}) error {
49+
defer logElapsed("data_source.tencentcloud_cvm_instance_vnc_url.read")()
50+
defer inconsistentCheck(d, meta)()
51+
52+
var response *cvm.DescribeInstanceVncUrlResponse
53+
request := cvm.NewDescribeInstanceVncUrlRequest()
54+
instanceId := d.Get("instance_id").(string)
55+
request.InstanceId = helper.String(instanceId)
56+
err := resource.Retry(readRetryTimeout, func() *resource.RetryError {
57+
58+
result, e := meta.(*TencentCloudClient).apiV3Conn.UseCvmClient().DescribeInstanceVncUrl(request)
59+
if e != nil {
60+
return retryError(e)
61+
}
62+
response = result
63+
return nil
64+
})
65+
if err != nil {
66+
return err
67+
}
68+
69+
if response == nil || response.Response == nil {
70+
d.SetId("")
71+
return fmt.Errorf("Response is nil")
72+
73+
}
74+
d.SetId(instanceId)
75+
d.Set("instance_vnc_url", *response.Response.InstanceVncUrl)
76+
77+
output, ok := d.GetOk("result_output_file")
78+
if ok && output.(string) != "" {
79+
if e := writeToFile(output.(string), map[string]interface{}{
80+
"instance_vnc_url": *response.Response.InstanceVncUrl,
81+
}); e != nil {
82+
return e
83+
}
84+
}
85+
return nil
86+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package tencentcloud
2+
3+
import (
4+
"testing"
5+
6+
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
7+
)
8+
9+
func TestAccTencentCloudCvmInstanceVncUrlDataSource_basic(t *testing.T) {
10+
t.Parallel()
11+
resource.Test(t, resource.TestCase{
12+
PreCheck: func() {
13+
testAccPreCheck(t)
14+
},
15+
Providers: testAccProviders,
16+
Steps: []resource.TestStep{
17+
{
18+
Config: testAccCvmInstanceVncUrlDataSource,
19+
Check: resource.ComposeTestCheckFunc(testAccCheckTencentCloudDataSourceID("data.tencentcloud_cvm_instance_vnc_url.instance_vnc_url")),
20+
},
21+
},
22+
})
23+
}
24+
25+
const testAccCvmInstanceVncUrlDataSource = defaultCvmModificationVariable + `
26+
27+
data "tencentcloud_cvm_instance_vnc_url" "instance_vnc_url" {
28+
instance_id = var.cvm_id
29+
}
30+
`

tencentcloud/provider.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,8 @@ Cloud Virtual Machine(CVM)
303303
tencentcloud_reserved_instance_configs
304304
tencentcloud_reserved_instances
305305
tencentcloud_cvm_instances_modification
306+
tencentcloud_cvm_instance_vnc_url
307+
tencentcloud_cvm_disaster_recover_group_quota
306308
307309
Resource
308310
tencentcloud_instance
@@ -318,6 +320,7 @@ Cloud Virtual Machine(CVM)
318320
tencentcloud_cvm_launch_template_version
319321
tencentcloud_cvm_launch_template_default_version
320322
tencentcloud_cvm_security_group_attachment
323+
tencentcloud_cvm_reboot_instance
321324
322325
TDSQL-C MySQL(CynosDB)
323326
Data Source
@@ -1402,6 +1405,8 @@ func Provider() terraform.ResourceProvider {
14021405
"tencentcloud_chdfs_mount_points": dataSourceTencentCloudChdfsMountPoints(),
14031406
"tencentcloud_tcm_mesh": dataSourceTencentCloudTcmMesh(),
14041407
"tencentcloud_lighthouse_firewall_rules_template": dataSourceTencentCloudLighthouseFirewallRulesTemplate(),
1408+
"tencentcloud_cvm_instance_vnc_url": dataSourceTencentCloudCvmInstanceVncUrl(),
1409+
"tencentcloud_cvm_disaster_recover_group_quota": dataSourceTencentCloudCvmDisasterRecoverGroupQuota(),
14051410
},
14061411

14071412
ResourcesMap: map[string]*schema.Resource{
@@ -1849,6 +1854,7 @@ func Provider() terraform.ResourceProvider {
18491854
"tencentcloud_cvm_launch_template_default_version": resourceTencentCloudCvmLaunchTemplateDefaultVersion(),
18501855
"tencentcloud_lighthouse_firewall_rule": resourceTencentCloudLighthouseFirewallRule(),
18511856
"tencentcloud_cvm_security_group_attachment": resourceTencentCloudCvmSecurityGroupAttachment(),
1857+
"tencentcloud_cvm_reboot_instance": resourceTencentCloudCvmRebootInstance(),
18521858
},
18531859

18541860
ConfigureFunc: providerConfigure,

0 commit comments

Comments
 (0)