Skip to content

Commit 8cbd1c4

Browse files
committed
add
1 parent 9b3ba2b commit 8cbd1c4

11 files changed

+638
-311
lines changed

tencentcloud/provider.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1669,6 +1669,7 @@ func Provider() *schema.Provider {
16691669
"tencentcloud_sqlserver_database_tde": sqlserver.ResourceTencentCloudSqlserverDatabaseTDE(),
16701670
"tencentcloud_sqlserver_general_cloud_ro_instance": sqlserver.ResourceTencentCloudSqlserverGeneralCloudRoInstance(),
16711671
"tencentcloud_sqlserver_instance_ssl": sqlserver.ResourceTencentCloudSqlserverInstanceSsl(),
1672+
"tencentcloud_sqlserver_wan_ip_config": sqlserver.ResourceTencentCloudSqlserverWanIpConfig(),
16721673
"tencentcloud_tcr_instance": tcr.ResourceTencentCloudTcrInstance(),
16731674
"tencentcloud_tcr_namespace": tcr.ResourceTencentCloudTcrNamespace(),
16741675
"tencentcloud_tcr_repository": tcr.ResourceTencentCloudTcrRepository(),

tencentcloud/services/sqlserver/resource_tc_sqlserver_basic_instance.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,16 @@ func ResourceTencentCloudSqlserverBasicInstance() *schema.Resource {
177177
Optional: true,
178178
Description: "The tags of the SQL Server basic instance.",
179179
},
180+
"dns_pod_domain": {
181+
Type: schema.TypeString,
182+
Computed: true,
183+
Description: "Internet address domain name.",
184+
},
185+
"tgw_wan_vport": {
186+
Type: schema.TypeInt,
187+
Computed: true,
188+
Description: "External port number.",
189+
},
180190
},
181191
}
182192
}
@@ -333,6 +343,13 @@ func resourceTencentCloudSqlserverBasicInstanceRead(d *schema.ResourceData, meta
333343
_ = d.Set("storage", instance.Storage)
334344
_ = d.Set("vip", instance.Vip)
335345
_ = d.Set("vport", instance.Vport)
346+
if instance.DnsPodDomain != nil {
347+
_ = d.Set("dns_pod_domain", instance.DnsPodDomain)
348+
}
349+
350+
if instance.TgwWanVPort != nil {
351+
_ = d.Set("tgw_wan_vport", instance.TgwWanVPort)
352+
}
336353

337354
//maintanence
338355
var weekSet []int

tencentcloud/services/sqlserver/resource_tc_sqlserver_general_cloud_instance.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,16 @@ func ResourceTencentCloudSqlserverGeneralCloudInstance() *schema.Resource {
150150
Deprecated: "It has been deprecated from version 1.81.2.",
151151
Description: "Upgrade the high-availability architecture of sqlserver, upgrade from mirror disaster recovery to always on cluster disaster recovery, only support 2017 and above and support always on high-availability instances, do not support downgrading to mirror disaster recovery, CLUSTER-upgrade to always on capacity Disaster, if not filled, the high-availability architecture will not be modified.",
152152
},
153+
"dns_pod_domain": {
154+
Type: schema.TypeString,
155+
Computed: true,
156+
Description: "Internet address domain name.",
157+
},
158+
"tgw_wan_vport": {
159+
Type: schema.TypeInt,
160+
Computed: true,
161+
Description: "External port number.",
162+
},
153163
},
154164
}
155165
}
@@ -412,6 +422,14 @@ func resourceTencentCloudSqlserverGeneralCloudInstanceRead(d *schema.ResourceDat
412422
_ = d.Set("time_zone", generalCloudInstance.TimeZone)
413423
}
414424

425+
if generalCloudInstance.DnsPodDomain != nil {
426+
_ = d.Set("dns_pod_domain", generalCloudInstance.DnsPodDomain)
427+
}
428+
429+
if generalCloudInstance.TgwWanVPort != nil {
430+
_ = d.Set("tgw_wan_vport", generalCloudInstance.TgwWanVPort)
431+
}
432+
415433
maintenanceSpan, err := service.DescribeMaintenanceSpanById(ctx, instanceId)
416434
if err != nil {
417435
return err
Lines changed: 208 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,208 @@
1+
package sqlserver
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+
sqlserver "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sqlserver/v20180328"
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 ResourceTencentCloudSqlserverWanIpConfig() *schema.Resource {
18+
return &schema.Resource{
19+
Create: resourceTencentCloudSqlserverWanIpConfigCreate,
20+
Read: resourceTencentCloudSqlserverWanIpConfigRead,
21+
Update: resourceTencentCloudSqlserverWanIpConfigUpdate,
22+
Delete: resourceTencentCloudSqlserverWanIpConfigDelete,
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+
31+
"ro_group_id": {
32+
Type: schema.TypeString,
33+
Optional: true,
34+
ForceNew: true,
35+
Description: "Read only group ID.",
36+
},
37+
38+
"enable_wan_ip": {
39+
Type: schema.TypeBool,
40+
Required: true,
41+
Description: "Whether to open wan ip, true: enable; false: disable.",
42+
},
43+
},
44+
}
45+
}
46+
47+
func resourceTencentCloudSqlserverWanIpConfigCreate(d *schema.ResourceData, meta interface{}) error {
48+
defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_wan_ip_config.create")()
49+
defer tccommon.InconsistentCheck(d, meta)()
50+
51+
var (
52+
instanceId string
53+
roGroupId string
54+
)
55+
56+
if v, ok := d.GetOk("instance_id"); ok {
57+
instanceId = v.(string)
58+
}
59+
60+
if v, ok := d.GetOk("ro_group_id"); ok {
61+
roGroupId = v.(string)
62+
}
63+
64+
if roGroupId != "" {
65+
d.SetId(strings.Join([]string{instanceId, roGroupId}, tccommon.FILED_SP))
66+
} else {
67+
d.SetId(instanceId)
68+
}
69+
70+
return resourceTencentCloudSqlserverWanIpConfigUpdate(d, meta)
71+
}
72+
73+
func resourceTencentCloudSqlserverWanIpConfigRead(d *schema.ResourceData, meta interface{}) error {
74+
defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_wan_ip_config.read")()
75+
defer tccommon.InconsistentCheck(d, meta)()
76+
77+
return nil
78+
}
79+
80+
func resourceTencentCloudSqlserverWanIpConfigUpdate(d *schema.ResourceData, meta interface{}) error {
81+
defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_wan_ip_config.update")()
82+
defer tccommon.InconsistentCheck(d, meta)()
83+
84+
var (
85+
logId = tccommon.GetLogId(tccommon.ContextNil)
86+
ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta)
87+
instanceId string
88+
roGroupId string
89+
enableWanIp bool
90+
flowId uint64
91+
)
92+
93+
idSplit := strings.Split(d.Id(), tccommon.FILED_SP)
94+
if len(idSplit) == 1 {
95+
instanceId = idSplit[0]
96+
} else if len(idSplit) == 2 {
97+
instanceId = idSplit[0]
98+
roGroupId = idSplit[1]
99+
} else {
100+
return fmt.Errorf("tencentcloud_sqlserver_wan_ip_config id is broken, id is %s", d.Id())
101+
}
102+
103+
if v, ok := d.GetOkExists("enable_wan_ip"); ok {
104+
enableWanIp = v.(bool)
105+
}
106+
107+
if enableWanIp {
108+
request := sqlserver.NewModifyOpenWanIpRequest()
109+
response := sqlserver.NewModifyOpenWanIpResponse()
110+
request.InstanceId = &instanceId
111+
if roGroupId != "" {
112+
request.RoGroupId = &roGroupId
113+
}
114+
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
115+
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSqlserverClient().ModifyOpenWanIpWithContext(ctx, request)
116+
if e != nil {
117+
return tccommon.RetryError(e)
118+
} else {
119+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
120+
}
121+
122+
if result == nil || result.Response == nil {
123+
return resource.NonRetryableError(fmt.Errorf("Open sqlserver wan ip failed, Response is nil."))
124+
}
125+
126+
response = result
127+
return nil
128+
})
129+
130+
if err != nil {
131+
log.Printf("[CRITAL]%s open sqlserver wan ip failed, reason:%+v", logId, err)
132+
return err
133+
}
134+
135+
if response.Response.FlowId == nil {
136+
return fmt.Errorf("FlowId is nil.")
137+
}
138+
139+
flowId = *response.Response.FlowId
140+
} else {
141+
request := sqlserver.NewModifyCloseWanIpRequest()
142+
response := sqlserver.NewModifyCloseWanIpResponse()
143+
request.InstanceId = &instanceId
144+
if roGroupId != "" {
145+
request.RoGroupId = &roGroupId
146+
}
147+
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
148+
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSqlserverClient().ModifyCloseWanIpWithContext(ctx, request)
149+
if e != nil {
150+
return tccommon.RetryError(e)
151+
} else {
152+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
153+
}
154+
155+
if result == nil || result.Response == nil {
156+
return resource.NonRetryableError(fmt.Errorf("Close sqlserver wan ip failed, Response is nil."))
157+
}
158+
159+
response = result
160+
return nil
161+
})
162+
163+
if err != nil {
164+
log.Printf("[CRITAL]%s close sqlserver wan ip failed, reason:%+v", logId, err)
165+
return err
166+
}
167+
168+
if response.Response.FlowId == nil {
169+
return fmt.Errorf("FlowId is nil.")
170+
}
171+
172+
flowId = *response.Response.FlowId
173+
}
174+
175+
// wait
176+
flowRequest := sqlserver.NewDescribeFlowStatusRequest()
177+
flowRequest.FlowId = helper.UInt64Int64(flowId)
178+
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
179+
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseSqlserverClient().DescribeFlowStatus(flowRequest)
180+
if e != nil {
181+
return tccommon.RetryError(e)
182+
}
183+
184+
if result == nil || result.Response == nil || result.Response.Status == nil {
185+
return resource.NonRetryableError(fmt.Errorf("Describe FlowStatus failed, Response is nil."))
186+
}
187+
188+
if *result.Response.Status == SQLSERVER_TASK_SUCCESS {
189+
return nil
190+
}
191+
192+
return resource.RetryableError(fmt.Errorf("Operate sqlserver wan ip status is %d.", *result.Response.Status))
193+
})
194+
195+
if err != nil {
196+
log.Printf("[CRITAL]%s operate sqlserver wan ip failed, reason:%+v", logId, err)
197+
return err
198+
}
199+
200+
return resourceTencentCloudSqlserverWanIpConfigRead(d, meta)
201+
}
202+
203+
func resourceTencentCloudSqlserverWanIpConfigDelete(d *schema.ResourceData, meta interface{}) error {
204+
defer tccommon.LogElapsed("resource.tencentcloud_sqlserver_wan_ip_config.delete")()
205+
defer tccommon.InconsistentCheck(d, meta)()
206+
207+
return nil
208+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
Provides a resource to create a sqlserver wan ip config
2+
3+
Example Usage
4+
5+
Open/Close wan ip for SQL instance
6+
7+
```hcl
8+
# open
9+
resource "tencentcloud_sqlserver_wan_ip_config" "example" {
10+
instance_id = "mssql-gy1lc54f"
11+
enable_wan_ip = true
12+
}
13+
14+
# close
15+
resource "tencentcloud_sqlserver_wan_ip_config" "example" {
16+
instance_id = "mssql-gy1lc54f"
17+
enable_wan_ip = false
18+
}
19+
```
20+
21+
Open/Close wan ip for SQL read only group
22+
23+
```hcl
24+
# open
25+
resource "tencentcloud_sqlserver_wan_ip_config" "example" {
26+
instance_id = "mssql-gy1lc54f"
27+
ro_group_id = "mssqlrg-hyxotm31"
28+
enable_wan_ip = true
29+
}
30+
31+
# close
32+
resource "tencentcloud_sqlserver_wan_ip_config" "example" {
33+
instance_id = "mssql-gy1lc54f"
34+
ro_group_id = "mssqlrg-hyxotm31"
35+
enable_wan_ip = false
36+
}
37+
```
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package sqlserver_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 TestAccTencentCloudSqlserverWanIpConfigResource_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: testAccSqlserverWanIpConfig,
20+
Check: resource.ComposeTestCheckFunc(resource.TestCheckResourceAttrSet("tencentcloud_sqlserver_wan_ip_config.sqlserver_wan_ip_config", "id")),
21+
}, {
22+
ResourceName: "tencentcloud_sqlserver_wan_ip_config.sqlserver_wan_ip_config",
23+
ImportState: true,
24+
ImportStateVerify: true,
25+
}},
26+
})
27+
}
28+
29+
const testAccSqlserverWanIpConfig = `
30+
31+
resource "tencentcloud_sqlserver_wan_ip_config" "sqlserver_wan_ip_config" {
32+
}
33+
`

0 commit comments

Comments
 (0)