Skip to content

Commit c0667b7

Browse files
tongyimingmikatong
and
mikatong
authored
feat(cdwpg): [122485020]add resource (#3239)
* add resource * add changelog * update test case * update --------- Co-authored-by: mikatong <[email protected]>
1 parent bee82fc commit c0667b7

11 files changed

+515
-21
lines changed

.changelog/3239.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
```release-note:new-resource
2+
tencentcloud_cdwpg_dbconfig
3+
```
4+
5+
```release-note:enhancement
6+
resource/tencentcloud_cdwpg_instance: `count` update is supported
7+
```

tencentcloud/provider.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2223,6 +2223,7 @@ func Provider() *schema.Provider {
22232223
"tencentcloud_bi_embed_token_apply": bi.ResourceTencentCloudBiEmbedTokenApply(),
22242224
"tencentcloud_bi_embed_interval_apply": bi.ResourceTencentCloudBiEmbedIntervalApply(),
22252225
"tencentcloud_cdwpg_instance": cdwpg.ResourceTencentCloudCdwpgInstance(),
2226+
"tencentcloud_cdwpg_dbconfig": cdwpg.ResourceTencentCloudCdwpgDbconfig(),
22262227
"tencentcloud_clickhouse_keyval_config": cdwch.ResourceTencentCloudClickhouseKeyvalConfig(),
22272228
"tencentcloud_clickhouse_xml_config": cdwch.ResourceTencentCloudClickhouseXmlConfig(),
22282229
"tencentcloud_clb_target_group_attachments": clb.ResourceTencentCloudClbTargetGroupAttachments(),

tencentcloud/provider.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2252,6 +2252,7 @@ tencentcloud_cdwpg_nodes
22522252

22532253
Resource
22542254
tencentcloud_cdwpg_instance
2255+
tencentcloud_cdwpg_dbconfig
22552256

22562257
CSIP
22572258
Resource
Lines changed: 232 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,232 @@
1+
package cdwpg
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"log"
7+
"time"
8+
9+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
10+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
11+
cdwpgv20201230 "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdwpg/v20201230"
12+
13+
tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
14+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
15+
)
16+
17+
func ResourceTencentCloudCdwpgDbconfig() *schema.Resource {
18+
return &schema.Resource{
19+
Create: resourceTencentCloudCdwpgDbconfigCreate,
20+
Read: resourceTencentCloudCdwpgDbconfigRead,
21+
Update: resourceTencentCloudCdwpgDbconfigUpdate,
22+
Delete: resourceTencentCloudCdwpgDbconfigDelete,
23+
Schema: map[string]*schema.Schema{
24+
"instance_id": {
25+
Type: schema.TypeString,
26+
Required: true,
27+
ForceNew: true,
28+
Description: "Instance id.",
29+
},
30+
"node_config_params": {
31+
Type: schema.TypeSet,
32+
Optional: true,
33+
Description: "Node config parameters.",
34+
Elem: &schema.Resource{
35+
Schema: map[string]*schema.Schema{
36+
"node_type": {
37+
Type: schema.TypeString,
38+
Required: true,
39+
Description: "Node type.",
40+
},
41+
"parameter_name": {
42+
Type: schema.TypeString,
43+
Optional: true,
44+
Description: "Parameter name.",
45+
},
46+
"parameter_value": {
47+
Type: schema.TypeString,
48+
Optional: true,
49+
Description: "Parameter value.",
50+
},
51+
},
52+
},
53+
},
54+
},
55+
}
56+
}
57+
58+
func resourceTencentCloudCdwpgDbconfigCreate(d *schema.ResourceData, meta interface{}) error {
59+
defer tccommon.LogElapsed("resource.tencentcloud_cdwpg_dbconfig.create")()
60+
defer tccommon.InconsistentCheck(d, meta)()
61+
62+
instanceId := d.Get("instance_id").(string)
63+
d.SetId(instanceId)
64+
65+
return resourceTencentCloudCdwpgDbconfigUpdate(d, meta)
66+
}
67+
68+
func resourceTencentCloudCdwpgDbconfigRead(d *schema.ResourceData, meta interface{}) error {
69+
defer tccommon.LogElapsed("resource.tencentcloud_cdwpg_dbconfig.read")()
70+
defer tccommon.InconsistentCheck(d, meta)()
71+
72+
logId := tccommon.GetLogId(tccommon.ContextNil)
73+
74+
ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta)
75+
76+
instanceId := d.Id()
77+
78+
var respData []*cdwpgv20201230.ParamItem
79+
paramMap := make(map[string]interface{})
80+
paramMap["InstanceId"] = helper.String(instanceId)
81+
paramMap["NodeTypes"] = helper.Strings([]string{"cn", "dn"})
82+
service := CdwpgService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
83+
err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError {
84+
result, e := service.DescribeCdwpgDbconfigByFilter(ctx, paramMap)
85+
if e != nil {
86+
return tccommon.RetryError(e)
87+
}
88+
respData = result
89+
return nil
90+
})
91+
if err != nil {
92+
return err
93+
}
94+
95+
nodeConfigParamKeyMap := make(map[string]struct{})
96+
if v, ok := d.GetOk("node_config_params"); ok {
97+
nodeConfigParams := v.(*schema.Set).List()
98+
for _, nodeConfigParam := range nodeConfigParams {
99+
nodeConfigParamMap := nodeConfigParam.(map[string]interface{})
100+
key := fmt.Sprintf("%s-%s", nodeConfigParamMap["node_type"], nodeConfigParamMap["parameter_name"])
101+
nodeConfigParamKeyMap[key] = struct{}{}
102+
}
103+
}
104+
nodeConfigParams := make([]interface{}, 0)
105+
for _, nodeConfigParam := range respData {
106+
nodeType := nodeConfigParam.NodeType
107+
for _, configParam := range nodeConfigParam.Details {
108+
if nodeType != nil && configParam != nil && configParam.ParamName != nil {
109+
key := fmt.Sprintf("%s-%s", *nodeType, *configParam.ParamName)
110+
if _, ok := nodeConfigParamKeyMap[key]; ok {
111+
nodeConfigParams = append(nodeConfigParams, map[string]interface{}{
112+
"node_type": nodeType,
113+
"parameter_name": configParam.ParamName,
114+
"parameter_value": configParam.RunningValue,
115+
})
116+
}
117+
}
118+
}
119+
}
120+
_ = d.Set("instance_id", instanceId)
121+
_ = d.Set("node_config_params", nodeConfigParams)
122+
_ = instanceId
123+
_ = ctx
124+
return nil
125+
}
126+
127+
func resourceTencentCloudCdwpgDbconfigUpdate(d *schema.ResourceData, meta interface{}) error {
128+
defer tccommon.LogElapsed("resource.tencentcloud_cdwpg_dbconfig.update")()
129+
defer tccommon.InconsistentCheck(d, meta)()
130+
131+
logId := tccommon.GetLogId(tccommon.ContextNil)
132+
ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta)
133+
instanceId := d.Id()
134+
135+
needChange := false
136+
mutableArgs := []string{"node_config_params"}
137+
for _, v := range mutableArgs {
138+
if d.HasChange(v) {
139+
needChange = true
140+
break
141+
}
142+
}
143+
144+
if needChange {
145+
var respData []*cdwpgv20201230.ParamItem
146+
paramMap := make(map[string]interface{})
147+
paramMap["InstanceId"] = helper.String(instanceId)
148+
paramMap["NodeTypes"] = helper.Strings([]string{"cn", "dn"})
149+
service := CdwpgService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
150+
err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError {
151+
result, e := service.DescribeCdwpgDbconfigByFilter(ctx, paramMap)
152+
if e != nil {
153+
return tccommon.RetryError(e)
154+
}
155+
respData = result
156+
return nil
157+
})
158+
if err != nil {
159+
return err
160+
}
161+
162+
nodeConfigParamMap := make(map[string]string)
163+
for _, item := range respData {
164+
nodeType := item.NodeType
165+
for _, param := range item.Details {
166+
key := fmt.Sprintf("%s-%s", *nodeType, *param.ParamName)
167+
nodeConfigParamMap[key] = *param.RunningValue
168+
}
169+
}
170+
171+
request := cdwpgv20201230.NewModifyDBParametersRequest()
172+
request.InstanceId = helper.String(instanceId)
173+
174+
if v, ok := d.GetOk("node_config_params"); ok {
175+
params := v.(*schema.Set).List()
176+
for _, item := range params {
177+
nodeConfigParamsMap := item.(map[string]interface{})
178+
nodeConfigParams := cdwpgv20201230.NodeConfigParams{}
179+
var nodeType, parameterName, parameterValue string
180+
if v, ok := nodeConfigParamsMap["node_type"]; ok {
181+
nodeType = v.(string)
182+
nodeConfigParams.NodeType = helper.String(v.(string))
183+
}
184+
if v, ok := nodeConfigParamsMap["parameter_name"]; ok {
185+
parameterName = v.(string)
186+
}
187+
if v, ok := nodeConfigParamsMap["parameter_value"]; ok {
188+
parameterValue = v.(string)
189+
}
190+
191+
key := fmt.Sprintf("%s-%s", nodeType, parameterName)
192+
193+
configParams := cdwpgv20201230.ConfigParams{}
194+
configParams.ParameterName = helper.String(parameterName)
195+
configParams.ParameterOldValue = helper.String(nodeConfigParamMap[key])
196+
configParams.ParameterValue = helper.String(parameterValue)
197+
nodeConfigParams.ConfigParams = append(nodeConfigParams.ConfigParams, &configParams)
198+
request.NodeConfigParams = append(request.NodeConfigParams, &nodeConfigParams)
199+
}
200+
}
201+
202+
err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
203+
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCdwpgV20201230Client().ModifyDBParametersWithContext(ctx, request)
204+
if e != nil {
205+
return tccommon.RetryError(e)
206+
} else {
207+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
208+
}
209+
return nil
210+
})
211+
if err != nil {
212+
log.Printf("[CRITAL]%s update cdwpg dbconfig failed, reason:%+v", logId, err)
213+
return err
214+
}
215+
216+
conf := tccommon.BuildStateChangeConf([]string{}, []string{"Serving"}, 10*tccommon.ReadRetryTimeout, time.Second, service.InstanceStateRefreshFunc(instanceId, []string{}))
217+
218+
if _, e := conf.WaitForState(); e != nil {
219+
return e
220+
}
221+
222+
}
223+
224+
return resourceTencentCloudCdwpgDbconfigRead(d, meta)
225+
}
226+
227+
func resourceTencentCloudCdwpgDbconfigDelete(d *schema.ResourceData, meta interface{}) error {
228+
defer tccommon.LogElapsed("resource.tencentcloud_cdwpg_dbconfig.delete")()
229+
defer tccommon.InconsistentCheck(d, meta)()
230+
231+
return nil
232+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
Provides a resource to create a cdwpg cdwpg_dbconfig
2+
3+
Example Usage
4+
5+
```hcl
6+
resource "tencentcloud_cdwpg_dbconfig" "cdwpg_dbconfig" {
7+
instance_id = "cdwpg-ua8wkqrt"
8+
node_config_params {
9+
node_type = "cn"
10+
parameter_name = "log_min_duration_statement"
11+
parameter_value = "10001"
12+
}
13+
}
14+
```
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package cdwpg_test
2+
3+
import (
4+
"testing"
5+
6+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
7+
8+
tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest"
9+
)
10+
11+
func TestAccTencentCloudCdwpgDbconfigResource_basic(t *testing.T) {
12+
t.Parallel()
13+
resource.Test(t, resource.TestCase{
14+
PreCheck: func() {
15+
tcacctest.AccPreCheck(t)
16+
},
17+
Providers: tcacctest.AccProviders,
18+
Steps: []resource.TestStep{
19+
{
20+
Config: testAccCdwpgDbconfig,
21+
Check: resource.ComposeTestCheckFunc(resource.TestCheckResourceAttrSet("tencentcloud_cdwpg_dbconfig.cdwpg_dbconfig", "id")),
22+
},
23+
},
24+
})
25+
}
26+
27+
const testAccCdwpgDbconfig = `
28+
resource "tencentcloud_cdwpg_dbconfig" "cdwpg_dbconfig" {
29+
instance_id = "cdwpg-ua8wkqrt"
30+
node_config_params {
31+
node_type = "cn"
32+
parameter_name = "log_min_duration_statement"
33+
parameter_value = "10001"
34+
}
35+
}
36+
`

0 commit comments

Comments
 (0)