Skip to content

Commit 0a4e72c

Browse files
author
mikatong
committed
add resource
1 parent 47db7b1 commit 0a4e72c

10 files changed

+508
-18
lines changed

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
@@ -2251,6 +2251,7 @@ tencentcloud_cdwpg_nodes
22512251

22522252
Resource
22532253
tencentcloud_cdwpg_instance
2254+
tencentcloud_cdwpg_dbconfig
22542255

22552256
CSIP
22562257
Resource
Lines changed: 235 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,235 @@
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+
var (
63+
instanceId string
64+
)
65+
instanceId = d.Get("instance_id").(string)
66+
d.SetId(instanceId)
67+
68+
return resourceTencentCloudCdwpgDbconfigUpdate(d, meta)
69+
}
70+
71+
func resourceTencentCloudCdwpgDbconfigRead(d *schema.ResourceData, meta interface{}) error {
72+
defer tccommon.LogElapsed("resource.tencentcloud_cdwpg_dbconfig.read")()
73+
defer tccommon.InconsistentCheck(d, meta)()
74+
75+
logId := tccommon.GetLogId(tccommon.ContextNil)
76+
77+
ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta)
78+
79+
instanceId := d.Id()
80+
81+
var respData []*cdwpgv20201230.ParamItem
82+
paramMap := make(map[string]interface{})
83+
paramMap["InstanceId"] = helper.String(instanceId)
84+
paramMap["NodeTypes"] = helper.Strings([]string{"cn", "dn"})
85+
service := CdwpgService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
86+
err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError {
87+
result, e := service.DescribeCdwpgDbconfigByFilter(ctx, paramMap)
88+
if e != nil {
89+
return tccommon.RetryError(e)
90+
}
91+
respData = result
92+
return nil
93+
})
94+
if err != nil {
95+
return err
96+
}
97+
98+
nodeConfigParamKeyMap := make(map[string]struct{})
99+
if v, ok := d.GetOk("node_config_params"); ok {
100+
nodeConfigParams := v.(*schema.Set).List()
101+
for _, nodeConfigParam := range nodeConfigParams {
102+
nodeConfigParamMap := nodeConfigParam.(map[string]interface{})
103+
key := fmt.Sprintf("%s-%s", nodeConfigParamMap["node_type"], nodeConfigParamMap["parameter_name"])
104+
nodeConfigParamKeyMap[key] = struct{}{}
105+
}
106+
}
107+
nodeConfigParams := make([]interface{}, 0)
108+
for _, nodeConfigParam := range respData {
109+
nodeType := nodeConfigParam.NodeType
110+
for _, configParam := range nodeConfigParam.Details {
111+
if nodeType != nil && configParam != nil && configParam.ParamName != nil {
112+
key := fmt.Sprintf("%s-%s", *nodeType, *configParam.ParamName)
113+
if _, ok := nodeConfigParamKeyMap[key]; ok {
114+
nodeConfigParams = append(nodeConfigParams, map[string]interface{}{
115+
"node_type": nodeType,
116+
"parameter_name": configParam.ParamName,
117+
"parameter_value": configParam.RunningValue,
118+
})
119+
}
120+
}
121+
}
122+
}
123+
_ = d.Set("instance_id", instanceId)
124+
_ = d.Set("node_config_params", nodeConfigParams)
125+
_ = instanceId
126+
_ = ctx
127+
return nil
128+
}
129+
130+
func resourceTencentCloudCdwpgDbconfigUpdate(d *schema.ResourceData, meta interface{}) error {
131+
defer tccommon.LogElapsed("resource.tencentcloud_cdwpg_dbconfig.update")()
132+
defer tccommon.InconsistentCheck(d, meta)()
133+
134+
logId := tccommon.GetLogId(tccommon.ContextNil)
135+
ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta)
136+
instanceId := d.Id()
137+
138+
needChange := false
139+
mutableArgs := []string{"node_config_params"}
140+
for _, v := range mutableArgs {
141+
if d.HasChange(v) {
142+
needChange = true
143+
break
144+
}
145+
}
146+
147+
if needChange {
148+
var respData []*cdwpgv20201230.ParamItem
149+
paramMap := make(map[string]interface{})
150+
paramMap["InstanceId"] = helper.String(instanceId)
151+
paramMap["NodeTypes"] = helper.Strings([]string{"cn", "dn"})
152+
service := CdwpgService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
153+
err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError {
154+
result, e := service.DescribeCdwpgDbconfigByFilter(ctx, paramMap)
155+
if e != nil {
156+
return tccommon.RetryError(e)
157+
}
158+
respData = result
159+
return nil
160+
})
161+
if err != nil {
162+
return err
163+
}
164+
165+
nodeConfigParamMap := make(map[string]string)
166+
for _, item := range respData {
167+
nodeType := item.NodeType
168+
for _, param := range item.Details {
169+
key := fmt.Sprintf("%s-%s", *nodeType, *param.ParamName)
170+
nodeConfigParamMap[key] = *param.RunningValue
171+
}
172+
}
173+
174+
request := cdwpgv20201230.NewModifyDBParametersRequest()
175+
request.InstanceId = helper.String(instanceId)
176+
177+
if v, ok := d.GetOk("node_config_params"); ok {
178+
params := v.(*schema.Set).List()
179+
for _, item := range params {
180+
nodeConfigParamsMap := item.(map[string]interface{})
181+
nodeConfigParams := cdwpgv20201230.NodeConfigParams{}
182+
var nodeType, parameterName, parameterValue string
183+
if v, ok := nodeConfigParamsMap["node_type"]; ok {
184+
nodeType = v.(string)
185+
nodeConfigParams.NodeType = helper.String(v.(string))
186+
}
187+
if v, ok := nodeConfigParamsMap["parameter_name"]; ok {
188+
parameterName = v.(string)
189+
}
190+
if v, ok := nodeConfigParamsMap["parameter_value"]; ok {
191+
parameterValue = v.(string)
192+
}
193+
194+
key := fmt.Sprintf("%s-%s", nodeType, parameterName)
195+
196+
configParams := cdwpgv20201230.ConfigParams{}
197+
configParams.ParameterName = helper.String(parameterName)
198+
configParams.ParameterOldValue = helper.String(nodeConfigParamMap[key])
199+
configParams.ParameterValue = helper.String(parameterValue)
200+
nodeConfigParams.ConfigParams = append(nodeConfigParams.ConfigParams, &configParams)
201+
request.NodeConfigParams = append(request.NodeConfigParams, &nodeConfigParams)
202+
}
203+
}
204+
205+
err = resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
206+
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCdwpgV20201230Client().ModifyDBParametersWithContext(ctx, request)
207+
if e != nil {
208+
return tccommon.RetryError(e)
209+
} else {
210+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
211+
}
212+
return nil
213+
})
214+
if err != nil {
215+
log.Printf("[CRITAL]%s update cdwpg dbconfig failed, reason:%+v", logId, err)
216+
return err
217+
}
218+
219+
conf := tccommon.BuildStateChangeConf([]string{}, []string{"Serving"}, 10*tccommon.ReadRetryTimeout, time.Second, service.InstanceStateRefreshFunc(instanceId, []string{}))
220+
221+
if _, e := conf.WaitForState(); e != nil {
222+
return e
223+
}
224+
225+
}
226+
227+
return resourceTencentCloudCdwpgDbconfigRead(d, meta)
228+
}
229+
230+
func resourceTencentCloudCdwpgDbconfigDelete(d *schema.ResourceData, meta interface{}) error {
231+
defer tccommon.LogElapsed("resource.tencentcloud_cdwpg_dbconfig.delete")()
232+
defer tccommon.InconsistentCheck(d, meta)()
233+
234+
return nil
235+
}
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)