Skip to content

Commit 9f6c433

Browse files
authored
Feat/cynosdb resource (#1906)
* feat/cynosdb-resource * feat/cynosdb-resource * feat/cynosdb-resource
1 parent 195528d commit 9f6c433

7 files changed

+319
-0
lines changed

.changelog/1906.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:new-resource
2+
tencentcloud_cynosdb_cluster_resource_packages_attachment
3+
```

tencentcloud/provider.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -421,6 +421,7 @@ TDSQL-C MySQL(CynosDB)
421421
tencentcloud_cynosdb_zone
422422
423423
Resource
424+
tencentcloud_cynosdb_cluster_resource_packages_attachment
424425
tencentcloud_cynosdb_cluster
425426
tencentcloud_cynosdb_readonly_instance
426427
tencentcloud_cynosdb_security_group
@@ -2493,6 +2494,7 @@ func Provider() *schema.Provider {
24932494
"tencentcloud_audit": resourceTencentCloudAudit(),
24942495
"tencentcloud_audit_track": resourceTencentCloudAuditTrack(),
24952496
"tencentcloud_image": resourceTencentCloudImage(),
2497+
"tencentcloud_cynosdb_cluster_resource_packages_attachment": resourceTencentCloudCynosdbClusterResourcePackagesAttachment(),
24962498
"tencentcloud_cynosdb_cluster": resourceTencentCloudCynosdbCluster(),
24972499
"tencentcloud_cynosdb_readonly_instance": resourceTencentCloudCynosdbReadonlyInstance(),
24982500
"tencentcloud_cynosdb_cluster_password_complexity": resourceTencentCloudCynosdbClusterPasswordComplexity(),
Lines changed: 173 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,173 @@
1+
/*
2+
Provides a resource to create a cynosdb cluster_resource_packages_attachment
3+
4+
Example Usage
5+
6+
```hcl
7+
resource "tencentcloud_cynosdb_cluster_resource_packages_attachment" "cluster_resource_packages_attachment" {
8+
cluster_id = "cynosdbmysql-q1d8151n"
9+
package_ids = ["package-hy4d2ppl"]
10+
}
11+
```
12+
13+
Import
14+
15+
cynosdb cluster_resource_packages_attachment can be imported using the id, e.g.
16+
17+
```
18+
terraform import tencentcloud_cynosdb_cluster_resource_packages_attachment.cluster_resource_packages_attachment cluster_resource_packages_attachment_id
19+
```
20+
*/
21+
package tencentcloud
22+
23+
import (
24+
"context"
25+
"fmt"
26+
"log"
27+
28+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
29+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
30+
cynosdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb/v20190107"
31+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
32+
)
33+
34+
func resourceTencentCloudCynosdbClusterResourcePackagesAttachment() *schema.Resource {
35+
return &schema.Resource{
36+
Create: resourceTencentCloudCynosdbClusterResourcePackagesAttachmentCreate,
37+
Read: resourceTencentCloudCynosdbClusterResourcePackagesAttachmentRead,
38+
Delete: resourceTencentCloudCynosdbClusterResourcePackagesAttachmentDelete,
39+
Importer: &schema.ResourceImporter{
40+
State: schema.ImportStatePassthrough,
41+
},
42+
Schema: map[string]*schema.Schema{
43+
"cluster_id": {
44+
Required: true,
45+
ForceNew: true,
46+
Type: schema.TypeString,
47+
Description: "Cluster ID.",
48+
},
49+
"package_ids": {
50+
Required: true,
51+
ForceNew: true,
52+
Type: schema.TypeSet,
53+
Elem: &schema.Schema{Type: schema.TypeString},
54+
Description: "Resource Package Unique ID.",
55+
},
56+
},
57+
}
58+
}
59+
60+
func resourceTencentCloudCynosdbClusterResourcePackagesAttachmentCreate(d *schema.ResourceData, meta interface{}) error {
61+
defer logElapsed("resource.tencentcloud_cynosdb_cluster_resource_packages_attachment.create")()
62+
defer inconsistentCheck(d, meta)()
63+
64+
var (
65+
logId = getLogId(contextNil)
66+
request = cynosdb.NewBindClusterResourcePackagesRequest()
67+
clusterId string
68+
)
69+
70+
if v, ok := d.GetOk("cluster_id"); ok {
71+
request.ClusterId = helper.String(v.(string))
72+
clusterId = v.(string)
73+
}
74+
75+
if v, ok := d.GetOk("package_ids"); ok {
76+
packageIdsSet := v.(*schema.Set).List()
77+
for i := range packageIdsSet {
78+
packageIds := packageIdsSet[i].(string)
79+
request.PackageIds = append(request.PackageIds, &packageIds)
80+
}
81+
}
82+
83+
err := resource.Retry(writeRetryTimeout, func() *resource.RetryError {
84+
result, e := meta.(*TencentCloudClient).apiV3Conn.UseCynosdbClient().BindClusterResourcePackages(request)
85+
if e != nil {
86+
return retryError(e)
87+
} else {
88+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
89+
}
90+
91+
if result == nil {
92+
e = fmt.Errorf("cynosdb clusterResourcePackagesAttachment not exists")
93+
return resource.NonRetryableError(e)
94+
}
95+
96+
return nil
97+
})
98+
99+
if err != nil {
100+
log.Printf("[CRITAL]%s create cynosdb clusterResourcePackagesAttachment failed, reason:%+v", logId, err)
101+
return err
102+
}
103+
104+
d.SetId(clusterId)
105+
106+
return resourceTencentCloudCynosdbClusterResourcePackagesAttachmentRead(d, meta)
107+
}
108+
109+
func resourceTencentCloudCynosdbClusterResourcePackagesAttachmentRead(d *schema.ResourceData, meta interface{}) error {
110+
defer logElapsed("resource.tencentcloud_cynosdb_cluster_resource_packages_attachment.read")()
111+
defer inconsistentCheck(d, meta)()
112+
113+
var (
114+
logId = getLogId(contextNil)
115+
ctx = context.WithValue(context.TODO(), logIdKey, logId)
116+
service = CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn}
117+
clusterId = d.Id()
118+
)
119+
120+
clusterResourcePackagesAttachment, err := service.DescribeCynosdbClusterResourcePackagesAttachmentById(ctx, clusterId)
121+
if err != nil {
122+
return err
123+
}
124+
125+
if clusterResourcePackagesAttachment == nil {
126+
d.SetId("")
127+
log.Printf("[WARN]%s resource `CynosdbClusterResourcePackagesAttachment` [%s] not found, please check if it has been deleted.\n", logId, d.Id())
128+
return nil
129+
}
130+
131+
if clusterResourcePackagesAttachment.ClusterId != nil {
132+
_ = d.Set("cluster_id", clusterResourcePackagesAttachment.ClusterId)
133+
}
134+
135+
if clusterResourcePackagesAttachment.ResourcePackages != nil {
136+
tmpList := []interface{}{}
137+
for _, v := range clusterResourcePackagesAttachment.ResourcePackages {
138+
if v.PackageId != nil {
139+
tmpList = append(tmpList, v.PackageId)
140+
}
141+
}
142+
_ = d.Set("package_ids", tmpList)
143+
}
144+
145+
return nil
146+
}
147+
148+
func resourceTencentCloudCynosdbClusterResourcePackagesAttachmentDelete(d *schema.ResourceData, meta interface{}) error {
149+
defer logElapsed("resource.tencentcloud_cynosdb_cluster_resource_packages_attachment.delete")()
150+
defer inconsistentCheck(d, meta)()
151+
152+
var (
153+
logId = getLogId(contextNil)
154+
ctx = context.WithValue(context.TODO(), logIdKey, logId)
155+
service = CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn}
156+
clusterId = d.Id()
157+
packageIdsSet []*string
158+
)
159+
160+
if v, ok := d.GetOk("package_ids"); ok {
161+
idsSet := v.(*schema.Set).List()
162+
for i := range idsSet {
163+
ids := idsSet[i].(string)
164+
packageIdsSet = append(packageIdsSet, &ids)
165+
}
166+
167+
if err := service.DeleteCynosdbClusterResourcePackagesAttachmentById(ctx, clusterId, packageIdsSet); err != nil {
168+
return err
169+
}
170+
}
171+
172+
return nil
173+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package tencentcloud
2+
3+
import (
4+
"testing"
5+
6+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
7+
)
8+
9+
// go test -i; go test -test.run TestAccTencentCloudNeedFixCynosdbClusterResourcePackagesAttachmentResource_basic -v
10+
func TestAccTencentCloudNeedFixCynosdbClusterResourcePackagesAttachmentResource_basic(t *testing.T) {
11+
t.Parallel()
12+
resource.Test(t, resource.TestCase{
13+
PreCheck: func() {
14+
testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY)
15+
},
16+
Providers: testAccProviders,
17+
Steps: []resource.TestStep{
18+
{
19+
Config: testAccCynosdbClusterResourcePackagesAttachment,
20+
Check: resource.ComposeTestCheckFunc(
21+
resource.TestCheckResourceAttrSet("tencentcloud_cynosdb_cluster_resource_packages_attachment.cluster_resource_packages_attachment", "id"),
22+
),
23+
},
24+
{
25+
ResourceName: "tencentcloud_cynosdb_cluster_resource_packages_attachment.cluster_resource_packages_attachment",
26+
ImportState: true,
27+
ImportStateVerify: true,
28+
},
29+
},
30+
})
31+
}
32+
33+
const testAccCynosdbClusterResourcePackagesAttachment = `
34+
resource "tencentcloud_cynosdb_cluster_resource_packages_attachment" "cluster_resource_packages_attachment" {
35+
cluster_id = "cynosdbmysql-q1d8151n"
36+
package_ids = ["package-hy4d2ppl"]
37+
}
38+
`

tencentcloud/service_tencentcloud_cynosdb.go

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1745,6 +1745,61 @@ func (me *CynosdbService) DescribeCynosdbResourcePackageListByFilter(ctx context
17451745
return
17461746
}
17471747

1748+
func (me *CynosdbService) DescribeCynosdbClusterResourcePackagesAttachmentById(ctx context.Context, clusterId string) (clusterResourcePackagesAttachment *cynosdb.CynosdbClusterDetail, errRet error) {
1749+
logId := getLogId(ctx)
1750+
request := cynosdb.NewDescribeClusterDetailRequest()
1751+
request.ClusterId = &clusterId
1752+
1753+
defer func() {
1754+
if errRet != nil {
1755+
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error())
1756+
}
1757+
}()
1758+
1759+
ratelimit.Check(request.GetAction())
1760+
1761+
response, err := me.client.UseCynosdbClient().DescribeClusterDetail(request)
1762+
if err != nil {
1763+
errRet = err
1764+
return
1765+
}
1766+
1767+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
1768+
1769+
if response.Response.Detail == nil {
1770+
return
1771+
}
1772+
1773+
clusterResourcePackagesAttachment = response.Response.Detail
1774+
return
1775+
}
1776+
1777+
func (me *CynosdbService) DeleteCynosdbClusterResourcePackagesAttachmentById(ctx context.Context, clusterId string, packageIdsSet []*string) (errRet error) {
1778+
logId := getLogId(ctx)
1779+
1780+
request := cynosdb.NewUnbindClusterResourcePackagesRequest()
1781+
request.ClusterId = &clusterId
1782+
request.PackageIds = packageIdsSet
1783+
1784+
defer func() {
1785+
if errRet != nil {
1786+
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error())
1787+
}
1788+
}()
1789+
1790+
ratelimit.Check(request.GetAction())
1791+
1792+
response, err := me.client.UseCynosdbClient().UnbindClusterResourcePackages(request)
1793+
if err != nil {
1794+
errRet = err
1795+
return
1796+
}
1797+
1798+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
1799+
1800+
return
1801+
}
1802+
17481803
func (me *CynosdbService) CynosdbInstanceIsolateStateRefreshFunc(clusterId string, failStates []string) resource.StateRefreshFunc {
17491804
return func() (interface{}, string, error) {
17501805
ctx := contextNil
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
---
2+
subcategory: "TDSQL-C MySQL(CynosDB)"
3+
layout: "tencentcloud"
4+
page_title: "TencentCloud: tencentcloud_cynosdb_cluster_resource_packages_attachment"
5+
sidebar_current: "docs-tencentcloud-resource-cynosdb_cluster_resource_packages_attachment"
6+
description: |-
7+
Provides a resource to create a cynosdb cluster_resource_packages_attachment
8+
---
9+
10+
# tencentcloud_cynosdb_cluster_resource_packages_attachment
11+
12+
Provides a resource to create a cynosdb cluster_resource_packages_attachment
13+
14+
## Example Usage
15+
16+
```hcl
17+
resource "tencentcloud_cynosdb_cluster_resource_packages_attachment" "cluster_resource_packages_attachment" {
18+
cluster_id = "cynosdbmysql-q1d8151n"
19+
package_ids = ["package-hy4d2ppl"]
20+
}
21+
```
22+
23+
## Argument Reference
24+
25+
The following arguments are supported:
26+
27+
* `cluster_id` - (Required, String, ForceNew) Cluster ID.
28+
* `package_ids` - (Required, Set: [`String`], ForceNew) Resource Package Unique ID.
29+
30+
## Attributes Reference
31+
32+
In addition to all arguments above, the following attributes are exported:
33+
34+
* `id` - ID of the resource.
35+
36+
37+
38+
## Import
39+
40+
cynosdb cluster_resource_packages_attachment can be imported using the id, e.g.
41+
42+
```
43+
terraform import tencentcloud_cynosdb_cluster_resource_packages_attachment.cluster_resource_packages_attachment cluster_resource_packages_attachment_id
44+
```
45+

website/tencentcloud.erb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2679,6 +2679,9 @@
26792679
<li>
26802680
<a href="/docs/providers/tencentcloud/r/cynosdb_cluster_password_complexity.html">tencentcloud_cynosdb_cluster_password_complexity</a>
26812681
</li>
2682+
<li>
2683+
<a href="/docs/providers/tencentcloud/r/cynosdb_cluster_resource_packages_attachment.html">tencentcloud_cynosdb_cluster_resource_packages_attachment</a>
2684+
</li>
26822685
<li>
26832686
<a href="/docs/providers/tencentcloud/r/cynosdb_export_instance_error_logs.html">tencentcloud_cynosdb_export_instance_error_logs</a>
26842687
</li>

0 commit comments

Comments
 (0)