Skip to content

Commit ca93653

Browse files
author
mikatong
committed
add resource
1 parent f97d97f commit ca93653

20 files changed

+1083
-0
lines changed

tencentcloud/provider.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2223,6 +2223,10 @@ 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_account": cdwpg.ResourceTencentCloudCdwpgAccount(),
2227+
"tencentcloud_cdwpg_restart_instance": cdwpg.ResourceTencentCloudCdwpgRestartInstance(),
2228+
"tencentcloud_cdwpg_upgrade_instance": cdwpg.ResourceTencentCloudCdwpgUpgradeInstance(),
2229+
"tencentcloud_cdwpg_userhba": cdwpg.ResourceTencentCloudCdwpgUserhba(),
22262230
"tencentcloud_clickhouse_keyval_config": cdwch.ResourceTencentCloudClickhouseKeyvalConfig(),
22272231
"tencentcloud_clickhouse_xml_config": cdwch.ResourceTencentCloudClickhouseXmlConfig(),
22282232
"tencentcloud_clb_target_group_attachments": clb.ResourceTencentCloudClbTargetGroupAttachments(),

tencentcloud/provider.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2251,6 +2251,10 @@ tencentcloud_cdwpg_nodes
22512251

22522252
Resource
22532253
tencentcloud_cdwpg_instance
2254+
tencentcloud_cdwpg_account
2255+
tencentcloud_cdwpg_restart_instance
2256+
tencentcloud_cdwpg_upgrade_instance
2257+
tencentcloud_cdwpg_userhba
22542258

22552259
CSIP
22562260
Resource
Lines changed: 160 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
1+
package cdwpg
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"log"
7+
"strings"
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 ResourceTencentCloudCdwpgAccount() *schema.Resource {
18+
return &schema.Resource{
19+
Create: resourceTencentCloudCdwpgAccountCreate,
20+
Read: resourceTencentCloudCdwpgAccountRead,
21+
Update: resourceTencentCloudCdwpgAccountUpdate,
22+
Delete: resourceTencentCloudCdwpgAccountDelete,
23+
Importer: &schema.ResourceImporter{
24+
State: schema.ImportStatePassthrough,
25+
},
26+
Schema: map[string]*schema.Schema{
27+
"instance_id": {
28+
Type: schema.TypeString,
29+
Required: true,
30+
ForceNew: true,
31+
Description: "Instance id.",
32+
},
33+
34+
"user_name": {
35+
Type: schema.TypeString,
36+
Required: true,
37+
ForceNew: true,
38+
Description: "Username.",
39+
},
40+
41+
"new_password": {
42+
Type: schema.TypeString,
43+
Required: true,
44+
Sensitive: true,
45+
Description: "New password.",
46+
},
47+
},
48+
}
49+
}
50+
51+
func resourceTencentCloudCdwpgAccountCreate(d *schema.ResourceData, meta interface{}) error {
52+
defer tccommon.LogElapsed("resource.tencentcloud_cdwpg_account.create")()
53+
defer tccommon.InconsistentCheck(d, meta)()
54+
55+
instanceId := d.Get("instance_id").(string)
56+
userName := d.Get("user_name").(string)
57+
58+
d.SetId(strings.Join([]string{instanceId, userName}, tccommon.FILED_SP))
59+
60+
return resourceTencentCloudCdwpgAccountUpdate(d, meta)
61+
}
62+
63+
func resourceTencentCloudCdwpgAccountRead(d *schema.ResourceData, meta interface{}) error {
64+
defer tccommon.LogElapsed("resource.tencentcloud_cdwpg_account.read")()
65+
defer tccommon.InconsistentCheck(d, meta)()
66+
67+
logId := tccommon.GetLogId(tccommon.ContextNil)
68+
69+
ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta)
70+
71+
service := CdwpgService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
72+
73+
idSplit := strings.Split(d.Id(), tccommon.FILED_SP)
74+
if len(idSplit) != 2 {
75+
return fmt.Errorf("id is broken,%s", d.Id())
76+
}
77+
instanceId := idSplit[0]
78+
userName := idSplit[1]
79+
80+
respData, err := service.DescribeCdwpgAccountById(ctx, instanceId)
81+
if err != nil {
82+
return err
83+
}
84+
85+
if respData == nil {
86+
d.SetId("")
87+
log.Printf("[WARN]%s resource `cdwpg_account` [%s] not found, please check if it has been deleted.\n", logId, d.Id())
88+
return nil
89+
}
90+
if respData.InstanceId != nil {
91+
_ = d.Set("instance_id", respData.InstanceId)
92+
}
93+
94+
if respData.UserName != nil {
95+
_ = d.Set("user_name", respData.UserName)
96+
}
97+
98+
_ = userName
99+
return nil
100+
}
101+
102+
func resourceTencentCloudCdwpgAccountUpdate(d *schema.ResourceData, meta interface{}) error {
103+
defer tccommon.LogElapsed("resource.tencentcloud_cdwpg_account.update")()
104+
defer tccommon.InconsistentCheck(d, meta)()
105+
106+
logId := tccommon.GetLogId(tccommon.ContextNil)
107+
108+
ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta)
109+
110+
idSplit := strings.Split(d.Id(), tccommon.FILED_SP)
111+
if len(idSplit) != 2 {
112+
return fmt.Errorf("id is broken,%s", d.Id())
113+
}
114+
instanceId := idSplit[0]
115+
userName := idSplit[1]
116+
117+
needChange := false
118+
mutableArgs := []string{"new_password"}
119+
for _, v := range mutableArgs {
120+
if d.HasChange(v) {
121+
needChange = true
122+
break
123+
}
124+
}
125+
126+
if needChange {
127+
request := cdwpgv20201230.NewResetAccountPasswordRequest()
128+
129+
request.InstanceId = helper.String(instanceId)
130+
131+
request.UserName = helper.String(userName)
132+
133+
if v, ok := d.GetOk("new_password"); ok {
134+
request.NewPassword = helper.String(v.(string))
135+
}
136+
137+
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
138+
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCdwpgV20201230Client().ResetAccountPasswordWithContext(ctx, request)
139+
if e != nil {
140+
return tccommon.RetryError(e)
141+
} else {
142+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
143+
}
144+
return nil
145+
})
146+
if err != nil {
147+
log.Printf("[CRITAL]%s update cdwpg account failed, reason:%+v", logId, err)
148+
return err
149+
}
150+
}
151+
152+
return resourceTencentCloudCdwpgAccountRead(d, meta)
153+
}
154+
155+
func resourceTencentCloudCdwpgAccountDelete(d *schema.ResourceData, meta interface{}) error {
156+
defer tccommon.LogElapsed("resource.tencentcloud_cdwpg_account.delete")()
157+
defer tccommon.InconsistentCheck(d, meta)()
158+
159+
return nil
160+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
Provides a resource to create a cdwpg cdwpg_account
2+
3+
Example Usage
4+
5+
```hcl
6+
resource "tencentcloud_cdwpg_account" "cdwpg_account" {
7+
instance_id = "cdwpg-zpiemnyd"
8+
user_name = "dbadmin"
9+
new_password = "testpassword"
10+
}
11+
```
12+
13+
Import
14+
15+
cdwpg cdwpg_account can be imported using the id, e.g.
16+
17+
```
18+
terraform import tencentcloud_cdwpg_account.cdwpg_account cdwpg_account_id
19+
```
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 TestAccTencentCloudCdwpgAccountResource_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+
Config: testAccCdwpgAccount,
20+
Check: resource.ComposeTestCheckFunc(resource.TestCheckResourceAttrSet("tencentcloud_cdwpg_account.cdwpg_account", "id")),
21+
}, {
22+
ResourceName: "tencentcloud_cdwpg_account.cdwpg_account",
23+
ImportState: true,
24+
ImportStateVerify: true,
25+
ImportStateVerifyIgnore: []string{"new_password"},
26+
}},
27+
})
28+
}
29+
30+
const testAccCdwpgAccount = `
31+
resource "tencentcloud_cdwpg_account" "cdwpg_account" {
32+
instance_id = "cdwpg-zpiemnyd"
33+
user_name = "dbadmin"
34+
new_password = "testpassword"
35+
}
36+
`
Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
package cdwpg
2+
3+
import (
4+
"context"
5+
"log"
6+
"time"
7+
8+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
9+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
10+
cdwpgv20201230 "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdwpg/v20201230"
11+
12+
tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
13+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
14+
)
15+
16+
func ResourceTencentCloudCdwpgRestartInstance() *schema.Resource {
17+
return &schema.Resource{
18+
Create: resourceTencentCloudCdwpgRestartInstanceCreate,
19+
Read: resourceTencentCloudCdwpgRestartInstanceRead,
20+
Delete: resourceTencentCloudCdwpgRestartInstanceDelete,
21+
Schema: map[string]*schema.Schema{
22+
"instance_id": {
23+
Type: schema.TypeString,
24+
Required: true,
25+
ForceNew: true,
26+
Description: "Instance id (e.g., \"cdwpg-xxxx\").",
27+
},
28+
29+
"node_types": {
30+
Type: schema.TypeSet,
31+
Optional: true,
32+
ForceNew: true,
33+
Description: "Node types to restart (gtm/cn/dn).",
34+
Elem: &schema.Schema{
35+
Type: schema.TypeString,
36+
},
37+
},
38+
39+
"node_ids": {
40+
Type: schema.TypeSet,
41+
Optional: true,
42+
ForceNew: true,
43+
Description: "Node ids to restart (specify nodes to reboot).",
44+
Elem: &schema.Schema{
45+
Type: schema.TypeString,
46+
},
47+
},
48+
},
49+
}
50+
}
51+
52+
func resourceTencentCloudCdwpgRestartInstanceCreate(d *schema.ResourceData, meta interface{}) error {
53+
defer tccommon.LogElapsed("resource.tencentcloud_cdwpg_restart_instance.create")()
54+
defer tccommon.InconsistentCheck(d, meta)()
55+
56+
logId := tccommon.GetLogId(tccommon.ContextNil)
57+
58+
ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta)
59+
60+
var (
61+
instanceId string
62+
)
63+
var (
64+
request = cdwpgv20201230.NewRestartInstanceRequest()
65+
response = cdwpgv20201230.NewRestartInstanceResponse()
66+
)
67+
68+
if v, ok := d.GetOk("instance_id"); ok {
69+
instanceId = v.(string)
70+
request.InstanceId = helper.String(instanceId)
71+
}
72+
73+
if v, ok := d.GetOk("node_types"); ok {
74+
nodeTypesSet := v.(*schema.Set).List()
75+
for i := range nodeTypesSet {
76+
nodeTypes := nodeTypesSet[i].(string)
77+
request.NodeTypes = append(request.NodeTypes, helper.String(nodeTypes))
78+
}
79+
}
80+
81+
if v, ok := d.GetOk("node_ids"); ok {
82+
nodeIdsSet := v.(*schema.Set).List()
83+
for i := range nodeIdsSet {
84+
nodeIds := nodeIdsSet[i].(string)
85+
request.NodeIds = append(request.NodeIds, helper.String(nodeIds))
86+
}
87+
}
88+
89+
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
90+
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCdwpgV20201230Client().RestartInstanceWithContext(ctx, request)
91+
if e != nil {
92+
return tccommon.RetryError(e)
93+
} else {
94+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
95+
}
96+
response = result
97+
return nil
98+
})
99+
if err != nil {
100+
log.Printf("[CRITAL]%s create cdwpg restart instance failed, reason:%+v", logId, err)
101+
return err
102+
}
103+
104+
_ = response
105+
106+
service := CdwpgService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
107+
conf := tccommon.BuildStateChangeConf([]string{}, []string{"Serving"}, 10*tccommon.ReadRetryTimeout, time.Second, service.InstanceStateRefreshFunc(instanceId, []string{}))
108+
109+
if _, e := conf.WaitForState(); e != nil {
110+
return e
111+
}
112+
d.SetId(instanceId)
113+
114+
return resourceTencentCloudCdwpgRestartInstanceRead(d, meta)
115+
}
116+
117+
func resourceTencentCloudCdwpgRestartInstanceRead(d *schema.ResourceData, meta interface{}) error {
118+
defer tccommon.LogElapsed("resource.tencentcloud_cdwpg_restart_instance.read")()
119+
defer tccommon.InconsistentCheck(d, meta)()
120+
121+
return nil
122+
}
123+
124+
func resourceTencentCloudCdwpgRestartInstanceDelete(d *schema.ResourceData, meta interface{}) error {
125+
defer tccommon.LogElapsed("resource.tencentcloud_cdwpg_restart_instance.delete")()
126+
defer tccommon.InconsistentCheck(d, meta)()
127+
128+
return nil
129+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
Provides a resource to create a cdwpg cdwpg_restart_instance
2+
3+
Example Usage
4+
5+
```hcl
6+
resource "tencentcloud_cdwpg_restart_instance" "cdwpg_restart_instance" {
7+
instance_id = "cdwpg-zpiemnyd"
8+
node_types = ["gtm"]
9+
}
10+
```

0 commit comments

Comments
 (0)