Skip to content

Commit 93af89f

Browse files
committed
update cvm hpc
1 parent d0e5bcb commit 93af89f

File tree

11 files changed

+1402
-77
lines changed

11 files changed

+1402
-77
lines changed

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@ require (
3535
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb v1.0.445
3636
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit v1.0.544
3737
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls v1.0.412
38-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.549
39-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.445
38+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.553
39+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.553
4040
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.488
4141
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dayu v1.0.335
4242
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dbbrain v1.0.542

go.sum

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -527,8 +527,12 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.547/go.mod
527527
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.548/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
528528
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.549 h1:j/bk6BVbnhiCU9jIbIQlEwWmLn4FUzEbNPZUC/wKnVo=
529529
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.549/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
530+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.553 h1:RB8GWKSifv5QdBQUUWfzCo06FU4mmqH1VG7dTWMm5nQ=
531+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.553/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
530532
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.445 h1:Bh7XD0ypNMHYyBOM8hhKsSu+y0VVKUnJVS+YKKhfpGg=
531533
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.445/go.mod h1:jMDD351efCFpT1+KVFbcpu6SbmP4TYmp4qkoCfr63nQ=
534+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.553 h1:Pl1kYgFhJp0QSoVFSzRsiGk+HfEAkBTQg7+O60tytNA=
535+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.553/go.mod h1:dnnqPxXYK+kax3e1MKo/PI3iWJtytm6ogWKQHJS7SGE=
532536
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.488 h1:A1seXWtMf2atBjSNYvcwxyDoFzCMgqyVnsxnWzhqJEA=
533537
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.488/go.mod h1:T8mL4dQLkPTL6VtVMeBYol3asSUS53ycP9PJf5Qp1GE=
534538
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dayu v1.0.335 h1:D8qrelkK5udv8RzJJIABMzItGIyaZoYnxEVeIsYqiNw=

tencentcloud/provider.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1498,6 +1498,7 @@ func Provider() terraform.ResourceProvider {
14981498
"tencentcloud_tdmq_rocketmq_environment_role": resourceTencentCloudTdmqRocketmqEnvironmentRole(),
14991499
"tencentcloud_dts_migrate_job": resourceTencentCloudDtsMigrateJob(),
15001500
"tencentcloud_dts_compare_task": resourceTencentCloudDtsCompareTask(),
1501+
"tencentcloud_cvm_hpc_cluster": resourceTencentCloudCvmHpcCluster(),
15011502
},
15021503

15031504
ConfigureFunc: providerConfigure,
Lines changed: 202 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,202 @@
1+
/*
2+
Provides a resource to create a cvm hpc_cluster
3+
4+
Example Usage
5+
6+
```hcl
7+
resource "tencentcloud_cvm_hpc_cluster" "hpc_cluster" {
8+
zone = "ap-beijing-6"
9+
name = "terraform-test"
10+
remark = "create for test"
11+
}
12+
```
13+
14+
Import
15+
16+
cvm hpc_cluster can be imported using the id, e.g.
17+
18+
```
19+
terraform import tencentcloud_cvm_hpc_cluster.hpc_cluster hpc_cluster_id
20+
```
21+
*/
22+
package tencentcloud
23+
24+
import (
25+
"context"
26+
"fmt"
27+
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
28+
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
29+
cvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312"
30+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
31+
"log"
32+
)
33+
34+
func resourceTencentCloudCvmHpcCluster() *schema.Resource {
35+
return &schema.Resource{
36+
Create: resourceTencentCloudCvmHpcClusterCreate,
37+
Read: resourceTencentCloudCvmHpcClusterRead,
38+
Update: resourceTencentCloudCvmHpcClusterUpdate,
39+
Delete: resourceTencentCloudCvmHpcClusterDelete,
40+
Importer: &schema.ResourceImporter{
41+
State: schema.ImportStatePassthrough,
42+
},
43+
Schema: map[string]*schema.Schema{
44+
"zone": {
45+
Required: true,
46+
Type: schema.TypeString,
47+
Description: "Available zone.",
48+
},
49+
50+
"name": {
51+
Required: true,
52+
Type: schema.TypeString,
53+
Description: "Name of Hpc Cluster.",
54+
},
55+
56+
"remark": {
57+
Optional: true,
58+
Type: schema.TypeString,
59+
Description: "Remark of Hpc Cluster.",
60+
},
61+
},
62+
}
63+
}
64+
65+
func resourceTencentCloudCvmHpcClusterCreate(d *schema.ResourceData, meta interface{}) error {
66+
defer logElapsed("resource.tencentcloud_cvm_hpc_cluster.create")()
67+
defer inconsistentCheck(d, meta)()
68+
69+
logId := getLogId(contextNil)
70+
71+
var (
72+
request = cvm.NewCreateHpcClusterRequest()
73+
response = cvm.NewCreateHpcClusterResponse()
74+
hpcClusterId string
75+
)
76+
if v, ok := d.GetOk("zone"); ok {
77+
request.Zone = helper.String(v.(string))
78+
}
79+
80+
if v, ok := d.GetOk("name"); ok {
81+
request.Name = helper.String(v.(string))
82+
}
83+
84+
if v, ok := d.GetOk("remark"); ok {
85+
request.Remark = helper.String(v.(string))
86+
}
87+
88+
err := resource.Retry(writeRetryTimeout, func() *resource.RetryError {
89+
result, e := meta.(*TencentCloudClient).apiV3Conn.UseCvmClient().CreateHpcCluster(request)
90+
if e != nil {
91+
return retryError(e)
92+
} else {
93+
log.Println("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
94+
}
95+
response = result
96+
return nil
97+
})
98+
if err != nil {
99+
log.Println("[CRITAL]%s create cvm hpcCluster failed, reason:%+v", logId, err)
100+
return nil
101+
}
102+
103+
hpcClusterId = *response.Response.HpcClusterSet[0].HpcClusterId
104+
d.SetId(hpcClusterId)
105+
106+
return resourceTencentCloudCvmHpcClusterRead(d, meta)
107+
}
108+
109+
func resourceTencentCloudCvmHpcClusterRead(d *schema.ResourceData, meta interface{}) error {
110+
defer logElapsed("resource.tencentcloud_cvm_hpc_cluster.read")()
111+
defer inconsistentCheck(d, meta)()
112+
113+
logId := getLogId(contextNil)
114+
115+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
116+
117+
service := CvmService{client: meta.(*TencentCloudClient).apiV3Conn}
118+
119+
hpcClusterId := d.Id()
120+
121+
hpcCluster, err := service.DescribeCvmHpcClusterById(ctx, hpcClusterId)
122+
if err != nil {
123+
return err
124+
}
125+
126+
if hpcCluster == nil {
127+
d.SetId("")
128+
return fmt.Errorf("resource `track` %s does not exist", d.Id())
129+
}
130+
131+
if hpcCluster.Zone != nil {
132+
_ = d.Set("zone", hpcCluster.Zone)
133+
}
134+
135+
if hpcCluster.Name != nil {
136+
_ = d.Set("name", hpcCluster.Name)
137+
}
138+
139+
if hpcCluster.Remark != nil {
140+
_ = d.Set("remark", hpcCluster.Remark)
141+
}
142+
143+
return nil
144+
}
145+
146+
func resourceTencentCloudCvmHpcClusterUpdate(d *schema.ResourceData, meta interface{}) error {
147+
defer logElapsed("resource.tencentcloud_cvm_hpc_cluster.update")()
148+
defer inconsistentCheck(d, meta)()
149+
150+
logId := getLogId(contextNil)
151+
152+
request := cvm.NewModifyHpcClusterAttributeRequest()
153+
154+
hpcClusterId := d.Id()
155+
156+
request.HpcClusterId = &hpcClusterId
157+
158+
if d.HasChange("name") {
159+
if v, ok := d.GetOk("name"); ok {
160+
request.Name = helper.String(v.(string))
161+
}
162+
}
163+
164+
if d.HasChange("remark") {
165+
if v, ok := d.GetOk("remark"); ok {
166+
request.Remark = helper.String(v.(string))
167+
}
168+
}
169+
170+
err := resource.Retry(writeRetryTimeout, func() *resource.RetryError {
171+
result, e := meta.(*TencentCloudClient).apiV3Conn.UseCvmClient().ModifyHpcClusterAttribute(request)
172+
if e != nil {
173+
return retryError(e)
174+
} else {
175+
log.Println("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
176+
}
177+
return nil
178+
})
179+
if err != nil {
180+
log.Println("[CRITAL]%s create cvm hpcCluster failed, reason:%+v", logId, err)
181+
return nil
182+
}
183+
184+
return resourceTencentCloudCvmHpcClusterRead(d, meta)
185+
}
186+
187+
func resourceTencentCloudCvmHpcClusterDelete(d *schema.ResourceData, meta interface{}) error {
188+
defer logElapsed("resource.tencentcloud_cvm_hpc_cluster.delete")()
189+
defer inconsistentCheck(d, meta)()
190+
191+
logId := getLogId(contextNil)
192+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
193+
194+
service := CvmService{client: meta.(*TencentCloudClient).apiV3Conn}
195+
hpcClusterId := d.Id()
196+
197+
if err := service.DeleteCvmHpcClusterById(ctx, hpcClusterId); err != nil {
198+
return nil
199+
}
200+
201+
return nil
202+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package tencentcloud
2+
3+
import (
4+
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
5+
"testing"
6+
)
7+
8+
func TestTencentCloudCvmHpcClusterResource_basic(t *testing.T) {
9+
t.Parallel()
10+
resource.Test(t, resource.TestCase{
11+
PreCheck: func() {
12+
testAccPreCheck(t)
13+
},
14+
Providers: testAccProviders,
15+
Steps: []resource.TestStep{
16+
{
17+
Config: testAccCvmHpcCluster,
18+
Check: resource.ComposeTestCheckFunc(resource.TestCheckResourceAttrSet("tencentcloud_cvm_hpc_cluster.hpc_cluster", "id")),
19+
},
20+
{
21+
ResourceName: "tencentcloud_cvm_hpc_cluster.hpc_cluster",
22+
ImportState: true,
23+
ImportStateVerify: true,
24+
},
25+
},
26+
})
27+
}
28+
29+
const testAccCvmHpcCluster = `
30+
31+
resource "tencentcloud_cvm_hpc_cluster" "hpc_cluster" {
32+
zone = "ap-beijing-6"
33+
name = "terraform-test"
34+
remark = "create for test"
35+
}
36+
37+
`

tencentcloud/service_tencentcloud_cvm.go

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1253,3 +1253,74 @@ func (me *CvmService) ResizeInstanceDisks(ctx context.Context, request *cvm.Resi
12531253

12541254
return
12551255
}
1256+
1257+
func (me *CvmService) DescribeCvmHpcClusterById(ctx context.Context, hpcClusterId string) (hpcCluster *cvm.HpcClusterInfo, errRet error) {
1258+
logId := getLogId(ctx)
1259+
1260+
request := cvm.NewDescribeHpcClustersRequest()
1261+
request. = []
1262+
1263+
defer func() {
1264+
if errRet != nil {
1265+
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error())
1266+
}
1267+
}()
1268+
1269+
ratelimit.Check(request.GetAction())
1270+
1271+
var (
1272+
offset uint64 = 0
1273+
limit uint64 = 20
1274+
)
1275+
instances := make([]*cvm.HpcClusterInfo, 0)
1276+
for {
1277+
request.Offset = &offset
1278+
request.Limit = &limit
1279+
response, err := me.client.UseCvmClient().DescribeHpcClusters(request)
1280+
if err != nil {
1281+
errRet = err
1282+
return
1283+
}
1284+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
1285+
1286+
if response == nil || len(response.Response.HpcClusterSet) < 1 {
1287+
break
1288+
}
1289+
instances = append(instances, response.Response.HpcClusterSet...)
1290+
if len(response.Response.HpcClusterSet) < int(limit) {
1291+
break
1292+
}
1293+
1294+
offset += limit
1295+
}
1296+
1297+
if len(instances) < 1 {
1298+
return
1299+
}
1300+
hpcCluster = instances[0]
1301+
return
1302+
}
1303+
1304+
func (me *CvmService) DeleteCvmHpcClusterById(ctx context.Context, hpcClusterId string) (errRet error) {
1305+
logId := getLogId(ctx)
1306+
1307+
request := cvm.NewDeleteHpcClustersRequest()
1308+
request.HpcClusterId = &hpcClusterId
1309+
1310+
defer func() {
1311+
if errRet != nil {
1312+
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error())
1313+
}
1314+
}()
1315+
1316+
ratelimit.Check(request.GetAction())
1317+
1318+
response, err := me.client.UseCvmClient().DeleteHpcClusters(request)
1319+
if err != nil {
1320+
errRet = err
1321+
return
1322+
}
1323+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
1324+
1325+
return
1326+
}

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)