Skip to content

Commit 1b74ffa

Browse files
authored
feat/cynosdb-support (#1936)
* feat/cynosdb-support * feat/cynosdb-support * feat/cynosdb-support * feat/cynosdb-support * feat/cynosdb-support * feat/cynosdb-support * feat/cynosdb-support
1 parent f827057 commit 1b74ffa

File tree

7 files changed

+309
-0
lines changed

7 files changed

+309
-0
lines changed

.changelog/1936.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_upgrade_proxy_version
3+
```

tencentcloud/provider.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -463,6 +463,7 @@ TDSQL-C MySQL(CynosDB)
463463
tencentcloud_cynosdb_cluster_slave_zone
464464
tencentcloud_cynosdb_read_only_instance_exclusive_access
465465
tencentcloud_cynosdb_proxy_end_point
466+
tencentcloud_cynosdb_upgrade_proxy_version
466467
467468
Direct Connect(DC)
468469
Data Source
@@ -2586,6 +2587,7 @@ func Provider() *schema.Provider {
25862587
"tencentcloud_cynosdb_cluster_slave_zone": resourceTencentCloudCynosdbClusterSlaveZone(),
25872588
"tencentcloud_cynosdb_read_only_instance_exclusive_access": resourceTencentCloudCynosdbReadOnlyInstanceExclusiveAccess(),
25882589
"tencentcloud_cynosdb_proxy_end_point": resourceTencentCloudCynosdbProxyEndPoint(),
2590+
"tencentcloud_cynosdb_upgrade_proxy_version": resourceTencentCloudCynosdbUpgradeProxyVersion(),
25892591
"tencentcloud_vod_adaptive_dynamic_streaming_template": resourceTencentCloudVodAdaptiveDynamicStreamingTemplate(),
25902592
"tencentcloud_vod_image_sprite_template": resourceTencentCloudVodImageSpriteTemplate(),
25912593
"tencentcloud_vod_procedure_template": resourceTencentCloudVodProcedureTemplate(),
Lines changed: 198 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,198 @@
1+
/*
2+
Provides a resource to create a cynosdb upgrade_proxy_version
3+
4+
Example Usage
5+
6+
```hcl
7+
resource "tencentcloud_cynosdb_upgrade_proxy_version" "upgrade_proxy_version" {
8+
cluster_id = "cynosdbmysql-bws8h88b"
9+
dst_proxy_version = "1.3.7"
10+
}
11+
```
12+
*/
13+
package tencentcloud
14+
15+
import (
16+
"context"
17+
"fmt"
18+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
19+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
20+
sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors"
21+
cynosdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb/v20190107"
22+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
23+
"log"
24+
"strings"
25+
)
26+
27+
func resourceTencentCloudCynosdbUpgradeProxyVersion() *schema.Resource {
28+
return &schema.Resource{
29+
Create: resourceTencentCloudCynosdbUpgradeProxyVersionCreate,
30+
Read: resourceTencentCloudCynosdbUpgradeProxyVersionRead,
31+
Update: resourceTencentCloudCynosdbUpgradeProxyVersionUpdate,
32+
Delete: resourceTencentCloudCynosdbUpgradeProxyVersionDelete,
33+
34+
Schema: map[string]*schema.Schema{
35+
"cluster_id": {
36+
Required: true,
37+
ForceNew: true,
38+
Type: schema.TypeString,
39+
Description: "Cluster ID.",
40+
},
41+
"dst_proxy_version": {
42+
Required: true,
43+
Type: schema.TypeString,
44+
Description: "Database Agent Upgrade Version.",
45+
},
46+
},
47+
}
48+
}
49+
50+
func resourceTencentCloudCynosdbUpgradeProxyVersionCreate(d *schema.ResourceData, meta interface{}) error {
51+
defer logElapsed("resource.tencentcloud_cynosdb_upgrade_proxy_version.create")()
52+
defer inconsistentCheck(d, meta)()
53+
54+
var (
55+
logId = getLogId(contextNil)
56+
ctx = context.WithValue(context.TODO(), logIdKey, logId)
57+
service = CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn}
58+
srcProxyVersion string
59+
clusterId string
60+
)
61+
62+
if v, ok := d.GetOk("cluster_id"); ok {
63+
clusterId = v.(string)
64+
}
65+
66+
upgradeProxyGroup, err := service.DescribeCynosdbUpgradeProxyVersionById(ctx, clusterId)
67+
if err != nil {
68+
return err
69+
}
70+
71+
if upgradeProxyGroup == nil {
72+
d.SetId("")
73+
log.Printf("[WARN]%s resource `CynosdbUpgradeProxyVersion` [%s] not found, please check if it has been deleted.\n", logId, d.Id())
74+
return nil
75+
}
76+
77+
srcProxyVersion = *upgradeProxyGroup.CurrentProxyVersion
78+
79+
d.SetId(strings.Join([]string{clusterId, srcProxyVersion}, FILED_SP))
80+
81+
return resourceTencentCloudCynosdbUpgradeProxyVersionUpdate(d, meta)
82+
}
83+
84+
func resourceTencentCloudCynosdbUpgradeProxyVersionRead(d *schema.ResourceData, meta interface{}) error {
85+
defer logElapsed("resource.tencentcloud_cynosdb_upgrade_proxy_version.read")()
86+
defer inconsistentCheck(d, meta)()
87+
88+
var (
89+
logId = getLogId(contextNil)
90+
ctx = context.WithValue(context.TODO(), logIdKey, logId)
91+
service = CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn}
92+
)
93+
94+
idSplit := strings.Split(d.Id(), FILED_SP)
95+
if len(idSplit) != 2 {
96+
return fmt.Errorf("id is broken,%s", idSplit)
97+
}
98+
clusterId := idSplit[0]
99+
100+
upgradeProxyGroup, err := service.DescribeCynosdbUpgradeProxyVersionById(ctx, clusterId)
101+
if err != nil {
102+
return err
103+
}
104+
105+
if upgradeProxyGroup == nil {
106+
d.SetId("")
107+
log.Printf("[WARN]%s resource `CynosdbUpgradeProxyVersion` [%s] not found, please check if it has been deleted.\n", logId, d.Id())
108+
return nil
109+
}
110+
111+
if upgradeProxyGroup.ClusterId != nil {
112+
_ = d.Set("cluster_id", upgradeProxyGroup.ClusterId)
113+
}
114+
115+
if upgradeProxyGroup.CurrentProxyVersion != nil {
116+
_ = d.Set("dst_proxy_version", upgradeProxyGroup.CurrentProxyVersion)
117+
}
118+
119+
return nil
120+
}
121+
122+
func resourceTencentCloudCynosdbUpgradeProxyVersionUpdate(d *schema.ResourceData, meta interface{}) error {
123+
defer logElapsed("resource.tencentcloud_cynosdb_upgrade_proxy_version.update")()
124+
defer inconsistentCheck(d, meta)()
125+
126+
var (
127+
logId = getLogId(contextNil)
128+
ctx = context.WithValue(context.TODO(), logIdKey, logId)
129+
service = CynosdbService{client: meta.(*TencentCloudClient).apiV3Conn}
130+
request = cynosdb.NewUpgradeProxyVersionRequest()
131+
flowId int64
132+
)
133+
134+
if d.HasChange("dst_proxy_version") {
135+
idSplit := strings.Split(d.Id(), FILED_SP)
136+
if len(idSplit) != 2 {
137+
return fmt.Errorf("id is broken,%s", idSplit)
138+
}
139+
clusterId := idSplit[0]
140+
srcProxyVersion := idSplit[1]
141+
142+
request.ClusterId = &clusterId
143+
request.SrcProxyVersion = &srcProxyVersion
144+
request.IsInMaintainPeriod = helper.String("no")
145+
146+
if v, ok := d.GetOk("dst_proxy_version"); ok {
147+
request.DstProxyVersion = helper.String(v.(string))
148+
}
149+
150+
err := resource.Retry(writeRetryTimeout, func() *resource.RetryError {
151+
result, e := meta.(*TencentCloudClient).apiV3Conn.UseCynosdbClient().UpgradeProxyVersion(request)
152+
if e != nil {
153+
return retryError(e)
154+
} else {
155+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
156+
}
157+
158+
flowId = *result.Response.FlowId
159+
return nil
160+
})
161+
162+
if err != nil {
163+
log.Printf("[CRITAL]%s update cynosdb upgradeProxyVersion failed, reason:%+v", logId, err)
164+
return err
165+
}
166+
167+
err = resource.Retry(6*readRetryTimeout, func() *resource.RetryError {
168+
ok, err := service.DescribeFlow(ctx, flowId)
169+
if err != nil {
170+
if _, ok := err.(*sdkErrors.TencentCloudSDKError); !ok {
171+
return resource.RetryableError(err)
172+
} else {
173+
return resource.NonRetryableError(err)
174+
}
175+
}
176+
177+
if ok {
178+
return nil
179+
} else {
180+
return resource.RetryableError(fmt.Errorf("update cynosdb upgradeProxyVersion is processing"))
181+
}
182+
})
183+
184+
if err != nil {
185+
log.Printf("[CRITAL]%s update cynosdb upgradeProxyVersion fail, reason:%s\n", logId, err.Error())
186+
return err
187+
}
188+
}
189+
190+
return resourceTencentCloudCynosdbUpgradeProxyVersionRead(d, meta)
191+
}
192+
193+
func resourceTencentCloudCynosdbUpgradeProxyVersionDelete(d *schema.ResourceData, meta interface{}) error {
194+
defer logElapsed("resource.tencentcloud_cynosdb_upgrade_proxy_version.delete")()
195+
defer inconsistentCheck(d, meta)()
196+
197+
return nil
198+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
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 TestAccTencentCloudNeedFixCynosdbUpgradeProxyVersionResource_basic -v
10+
func TestAccTencentCloudNeedFixCynosdbUpgradeProxyVersionResource_basic(t *testing.T) {
11+
t.Parallel()
12+
resource.Test(t, resource.TestCase{
13+
PreCheck: func() {
14+
testAccPreCheck(t)
15+
},
16+
Providers: testAccProviders,
17+
Steps: []resource.TestStep{
18+
{
19+
Config: testAccCynosdbUpgradeProxyVersion,
20+
Check: resource.ComposeTestCheckFunc(
21+
resource.TestCheckResourceAttrSet("tencentcloud_cynosdb_upgrade_proxy_version.upgrade_proxy_version", "id"),
22+
resource.TestCheckResourceAttrSet("tencentcloud_cynosdb_upgrade_proxy_version.upgrade_proxy_version", "cluster_id"),
23+
resource.TestCheckResourceAttrSet("tencentcloud_cynosdb_upgrade_proxy_version.upgrade_proxy_version", "dst_proxy_version"),
24+
),
25+
},
26+
},
27+
})
28+
}
29+
30+
const testAccCynosdbUpgradeProxyVersion = `
31+
resource "tencentcloud_cynosdb_upgrade_proxy_version" "upgrade_proxy_version" {
32+
cluster_id = "cynosdbmysql-bws8h88b"
33+
dst_proxy_version = "1.3.7"
34+
}
35+
`

tencentcloud/service_tencentcloud_cynosdb.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2850,3 +2850,34 @@ func (me *CynosdbService) DeleteCynosdbProxyEndPointById(ctx context.Context, cl
28502850

28512851
return
28522852
}
2853+
2854+
func (me *CynosdbService) DescribeCynosdbUpgradeProxyVersionById(ctx context.Context, clusterId string) (upgradeProxyGroup *cynosdb.ProxyGroup, errRet error) {
2855+
logId := getLogId(ctx)
2856+
2857+
request := cynosdb.NewDescribeProxiesRequest()
2858+
request.ClusterId = &clusterId
2859+
2860+
defer func() {
2861+
if errRet != nil {
2862+
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error())
2863+
}
2864+
}()
2865+
2866+
ratelimit.Check(request.GetAction())
2867+
2868+
response, err := me.client.UseCynosdbClient().DescribeProxies(request)
2869+
if err != nil {
2870+
errRet = err
2871+
return
2872+
}
2873+
2874+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
2875+
2876+
if *response.Response.TotalCount == 0 {
2877+
return
2878+
}
2879+
2880+
upgradeProxyGroup = response.Response.ProxyGroupInfos[0].ProxyGroup
2881+
2882+
return
2883+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
---
2+
subcategory: "TDSQL-C MySQL(CynosDB)"
3+
layout: "tencentcloud"
4+
page_title: "TencentCloud: tencentcloud_cynosdb_upgrade_proxy_version"
5+
sidebar_current: "docs-tencentcloud-resource-cynosdb_upgrade_proxy_version"
6+
description: |-
7+
Provides a resource to create a cynosdb upgrade_proxy_version
8+
---
9+
10+
# tencentcloud_cynosdb_upgrade_proxy_version
11+
12+
Provides a resource to create a cynosdb upgrade_proxy_version
13+
14+
## Example Usage
15+
16+
```hcl
17+
resource "tencentcloud_cynosdb_upgrade_proxy_version" "upgrade_proxy_version" {
18+
cluster_id = "cynosdbmysql-bws8h88b"
19+
dst_proxy_version = "1.3.7"
20+
}
21+
```
22+
23+
## Argument Reference
24+
25+
The following arguments are supported:
26+
27+
* `cluster_id` - (Required, String, ForceNew) Cluster ID.
28+
* `dst_proxy_version` - (Required, String) Database Agent Upgrade Version.
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+

website/tencentcloud.erb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2824,6 +2824,9 @@
28242824
<li>
28252825
<a href="/docs/providers/tencentcloud/r/cynosdb_security_group.html">tencentcloud_cynosdb_security_group</a>
28262826
</li>
2827+
<li>
2828+
<a href="/docs/providers/tencentcloud/r/cynosdb_upgrade_proxy_version.html">tencentcloud_cynosdb_upgrade_proxy_version</a>
2829+
</li>
28272830
<li>
28282831
<a href="/docs/providers/tencentcloud/r/cynosdb_wan.html">tencentcloud_cynosdb_wan</a>
28292832
</li>

0 commit comments

Comments
 (0)