Skip to content

Commit d0eeff1

Browse files
add sqlserver publish and subscribe file
1 parent dbbcad0 commit d0eeff1

13 files changed

+1055
-4
lines changed

CHANGELOG.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
1-
## 1.44.1 (Unreleased)
1+
## 1.45.0 (Unreleased)
2+
3+
FEATURES:
4+
5+
* **New Resource**: `tencentcloud_sqlserver_publish_subscribe`
6+
* **New Data Source**: `tencentcloud_sqlserver_publish_subscribes`
7+
28
## 1.44.0 (September 25, 2020)
39

410
FEATURES:

examples/tencentcloud-sqlserver/main.tf

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,16 @@ resource "tencentcloud_sqlserver_readonly_instance" "example" {
6060
force_upgrade = true
6161
}
6262

63+
resource "tencentcloud_sqlserver_publish_subscribe" "example" {
64+
publish_instance_id = tencentcloud_sqlserver_instance.example.id
65+
subscribe_instance_id = tencentcloud_sqlserver_instance.example_other.id
66+
publish_subscribe_name = "example"
67+
database_tuples {
68+
publish_database = tencentcloud_sqlserver_db.example.id
69+
subscribe_database = tencentcloud_sqlserver_db.example.id
70+
}
71+
}
72+
6373

6474
data "tencentcloud_sqlserver_instances" "id_example" {
6575
id = tencentcloud_sqlserver_instance.example.id
@@ -97,3 +107,9 @@ data "tencentcloud_sqlserver_readonly_groups" "example" {
97107
master_instance_id = tencentcloud_sqlserver_instance.example.id
98108
}
99109

110+
data "tencentcloud_sqlserver_publish_subscribes" "publish_subscribes" {
111+
instance_id = tencentcloud_sqlserver_publish_subscribe.example.publish_instance_id
112+
pub_or_sub_instance_id = tencentcloud_sqlserver_publish_subscribe.example.subscribe_instance_id
113+
publish_subscribe_name = tencentcloud_sqlserver_publish_subscribe.example.publish_subscribe_name
114+
}
115+
Lines changed: 239 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,239 @@
1+
/*
2+
Use this data source to query Publish Subscribe resources for the specific SQL Server instance.
3+
4+
Example Usage
5+
6+
```hcl
7+
resource "tencentcloud_sqlserver_publish_subscribe" "example" {
8+
publish_instance_id = "mssql-ahgcanf3"
9+
subscribe_instance_id = "mssql-cc1kh85p"
10+
publish_subscribe_name = "example"
11+
database_tuples {
12+
publish_database = "db_test_name"
13+
subscribe_database = "db_test_name"
14+
}
15+
}
16+
```
17+
*/
18+
package tencentcloud
19+
20+
import (
21+
"context"
22+
"log"
23+
24+
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
25+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
26+
)
27+
28+
func dataSourceTencentSqlserverPublishSubscribes() *schema.Resource {
29+
return &schema.Resource{
30+
Read: dataSourceTencentSqlserverPublishSubscribesRead,
31+
Schema: map[string]*schema.Schema{
32+
"result_output_file": {
33+
Type: schema.TypeString,
34+
Optional: true,
35+
Description: "Used to store results.",
36+
},
37+
"instance_id": {
38+
Type: schema.TypeString,
39+
Required: true,
40+
Description: "ID of the SQL Server instance.",
41+
},
42+
"pub_or_sub_instance_id": {
43+
Type: schema.TypeString,
44+
Optional: true,
45+
Description: "The subscribe/publish instance ID is related to whether the `instance_id` is a publish instance or a subscribe instance, when `instance_id` is a publish instance, this field is filtered according to the subscribe instance ID, when `instance_id` is a subscribe instance, this field is filtering according to the publish instance ID.",
46+
},
47+
"pub_or_sub_instance_ip": {
48+
Type: schema.TypeString,
49+
Optional: true,
50+
Description: "The intranet IP of the subscribe/publish instance is related to whether the `instance_id` is a publish instance or a subscribe instance, when `instance_id` is a publish instance, this field is filtered according to the intranet IP of the subscribe instance; when `instance_id` is a subscribe instance, this field is based on the publish instance intranet IP filter.",
51+
},
52+
"publish_subscribe_id": {
53+
Type: schema.TypeInt,
54+
Optional: true,
55+
Description: "The id of the Publish and Subscribe in the SQLServer instance.",
56+
},
57+
"publish_subscribe_name": {
58+
Type: schema.TypeString,
59+
Optional: true,
60+
Description: "The name of the Publish and Subscribe in the SQLServer instance.",
61+
},
62+
"publish_database": {
63+
Type: schema.TypeString,
64+
Optional: true,
65+
Description: "Publish the database.",
66+
},
67+
"subscribe_database": {
68+
Type: schema.TypeString,
69+
Optional: true,
70+
Description: "Subscribe to the database.",
71+
},
72+
"publish_subscribe_list": {
73+
Type: schema.TypeList,
74+
Computed: true,
75+
Description: "Publish and subscribe list, Each element contains the following attributes.",
76+
Elem: &schema.Resource{
77+
Schema: map[string]*schema.Schema{
78+
"publish_subscribe_id": {
79+
Type: schema.TypeInt,
80+
Computed: true,
81+
Description: "The id of the Publish and Subscribe in the SQLServer instance.",
82+
},
83+
"publish_subscribe_name": {
84+
Type: schema.TypeString,
85+
Computed: true,
86+
Description: "The name of the Publish and Subscribe in the SQLServer instance.",
87+
},
88+
"publish_instance_id": {
89+
Type: schema.TypeString,
90+
Computed: true,
91+
Description: "Publish the instance ID in the SQLServer instance.",
92+
},
93+
"publish_instance_name": {
94+
Type: schema.TypeString,
95+
Computed: true,
96+
Description: "Publish the instance name in the SQLServer instance.",
97+
},
98+
"publish_instance_ip": {
99+
Type: schema.TypeString,
100+
Computed: true,
101+
Description: "Publish the instance IP in the SQLServer instance.",
102+
},
103+
"subscribe_instance_id": {
104+
Type: schema.TypeString,
105+
Computed: true,
106+
Description: "Subscribe the instance ID in the SQLServer instance.",
107+
},
108+
"subscribe_instance_name": {
109+
Type: schema.TypeString,
110+
Computed: true,
111+
Description: "Subscribe the instance name in the SQLServer instance.",
112+
},
113+
"subscribe_instance_ip": {
114+
Type: schema.TypeString,
115+
Computed: true,
116+
Description: "Subscribe the instance IP in the SQLServer instance.",
117+
},
118+
"database_tuples": {
119+
Type: schema.TypeSet,
120+
Computed: true,
121+
Description: "Database Publish and Publish relationship list.",
122+
Elem: &schema.Resource{
123+
Schema: map[string]*schema.Schema{
124+
"publish_database": {
125+
Type: schema.TypeString,
126+
Computed: true,
127+
Description: "Publish the database.",
128+
},
129+
"subscribe_database": {
130+
Type: schema.TypeString,
131+
Computed: true,
132+
Description: "Subscribe to the database.",
133+
},
134+
"last_sync_time": {
135+
Type: schema.TypeString,
136+
Computed: true,
137+
Description: "Last sync time.",
138+
},
139+
"status": {
140+
Type: schema.TypeString,
141+
Computed: true,
142+
Description: "Publish and subscribe status between databases `running`, `success`, `fail`, `unknow`.",
143+
},
144+
},
145+
},
146+
},
147+
},
148+
},
149+
},
150+
},
151+
}
152+
}
153+
154+
func dataSourceTencentSqlserverPublishSubscribesRead(d *schema.ResourceData, meta interface{}) error {
155+
defer logElapsed("data_source.tencentcloud_sqlserver_publish_subscribes.read")()
156+
157+
logId := getLogId(contextNil)
158+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
159+
sqlserverService := SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn}
160+
var (
161+
instanceId = d.Get("instance_id").(string)
162+
pubOrSubInstanceId string
163+
pubOrSubInstanceIp string
164+
publishSubscribeName string
165+
publishSubscribeId uint64 = 0
166+
publishDBName string
167+
subscribeDBName string
168+
)
169+
170+
if v, ok := d.GetOk("pub_or_sub_instance_id"); ok {
171+
pubOrSubInstanceId = v.(string)
172+
}
173+
if v, ok := d.GetOk("pub_or_sub_instance_ip"); ok {
174+
pubOrSubInstanceIp = v.(string)
175+
}
176+
if v, ok := d.GetOk("publish_subscribe_name"); ok {
177+
publishSubscribeName = v.(string)
178+
}
179+
if v, ok := d.GetOk("publish_subscribe_id"); ok {
180+
id := v.(int)
181+
if id != 0 {
182+
publishSubscribeId = *helper.IntUint64(id)
183+
}
184+
}
185+
if v, ok := d.GetOk("publish_database"); ok {
186+
publishDBName = v.(string)
187+
}
188+
if v, ok := d.GetOk("subscribe_database"); ok {
189+
subscribeDBName = v.(string)
190+
}
191+
192+
publishSubscribes, err := sqlserverService.DescribeSqlserverPublishSubscribes(ctx, instanceId, pubOrSubInstanceId, pubOrSubInstanceIp, publishSubscribeName, publishDBName, subscribeDBName, publishSubscribeId)
193+
if err != nil {
194+
return err
195+
}
196+
instanceList := make([]map[string]interface{}, 0, len(publishSubscribes))
197+
ids := make([]string, 0, len(publishSubscribes))
198+
199+
for _, publishSubscribe := range publishSubscribes {
200+
var databaseTupleStatus []map[string]interface{}
201+
for _, inst_ := range publishSubscribe.DatabaseTupleSet {
202+
databaseTuple := map[string]interface{}{
203+
"publish_database": inst_.PublishDatabase,
204+
"subscribe_database": inst_.SubscribeDatabase,
205+
"last_sync_time": inst_.LastSyncTime,
206+
"status": inst_.Status,
207+
}
208+
databaseTupleStatus = append(databaseTupleStatus, databaseTuple)
209+
}
210+
instance := map[string]interface{}{
211+
"publish_subscribe_id": publishSubscribe.Id,
212+
"publish_subscribe_name": publishSubscribe.Name,
213+
"publish_instance_id": publishSubscribe.PublishInstanceId,
214+
"publish_instance_ip": publishSubscribe.PublishInstanceIp,
215+
"publish_instance_name": publishSubscribe.PublishInstanceName,
216+
"subscribe_instance_id": publishSubscribe.SubscribeInstanceId,
217+
"subscribe_instance_ip": publishSubscribe.SubscribeInstanceIp,
218+
"subscribe_instance_name": publishSubscribe.SubscribeInstanceName,
219+
"database_tuples": databaseTupleStatus,
220+
}
221+
resourceId := *publishSubscribe.PublishInstanceId + FILED_SP + *publishSubscribe.SubscribeInstanceId
222+
instanceList = append(instanceList, instance)
223+
ids = append(ids, resourceId)
224+
}
225+
226+
d.SetId(helper.DataResourceIdsHash(ids))
227+
if err = d.Set("publish_subscribe_list", instanceList); err != nil {
228+
log.Printf("[CRITAL]%s provider set sql server publish subscribe list fail, reason:%s\n ", logId, err.Error())
229+
return err
230+
}
231+
232+
output, ok := d.GetOk("result_output_file")
233+
if ok && output.(string) != "" {
234+
if err := writeToFile(output.(string), instanceList); err != nil {
235+
return err
236+
}
237+
}
238+
return nil
239+
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package tencentcloud
2+
3+
import (
4+
"testing"
5+
6+
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
7+
)
8+
9+
func TestAccTencentCloudSqlserverPublishSubscribeDataSource(t *testing.T) {
10+
resource.Test(t, resource.TestCase{
11+
PreCheck: func() { testAccPreCheck(t) },
12+
Providers: testAccProviders,
13+
CheckDestroy: testAccCheckSqlserverPublishSubscribeDestroy,
14+
Steps: []resource.TestStep{
15+
{
16+
Config: testAccTencentCloudSqlServerPublishSubscribeDataSourceConfig,
17+
Check: resource.ComposeTestCheckFunc(
18+
testAccCheckSqlserverPublishSubscribeExists("tencentcloud_sqlserver_publish_subscribe.example"),
19+
resource.TestCheckResourceAttr("data.tencentcloud_sqlserver_publish_subscribes.publish_subscribes", "publish_subscribe_list.0.publish_instance_id", "mssql-82lhybgn"),
20+
resource.TestCheckResourceAttr("data.tencentcloud_sqlserver_publish_subscribes.publish_subscribes", "publish_subscribe_list.0.subscribe_instance_id", "mssql-12a60qdd"),
21+
resource.TestCheckResourceAttr("data.tencentcloud_sqlserver_publish_subscribes.publish_subscribes", "publish_subscribe_list.0.publish_subscribe_name", "example"),
22+
resource.TestCheckResourceAttr("data.tencentcloud_sqlserver_publish_subscribes.publish_subscribes", "publish_subscribe_list.0.publish_instance_ip", "10.1.0.17"),
23+
resource.TestCheckResourceAttr("data.tencentcloud_sqlserver_publish_subscribes.publish_subscribes", "publish_subscribe_list.0.subscribe_instance_ip", "10.1.0.11"),
24+
resource.TestCheckResourceAttr("data.tencentcloud_sqlserver_publish_subscribes.publish_subscribes", "publish_subscribe_list.0.publish_instance_name", "pub-keep"),
25+
resource.TestCheckResourceAttr("data.tencentcloud_sqlserver_publish_subscribes.publish_subscribes", "publish_subscribe_list.0.subscribe_instance_name", "sub-keep"),
26+
resource.TestCheckResourceAttrSet("data.tencentcloud_sqlserver_publish_subscribes.publish_subscribes", "publish_subscribe_list.0.publish_subscribe_id"),
27+
resource.TestCheckResourceAttr("data.tencentcloud_sqlserver_publish_subscribes.publish_subscribes", "publish_subscribe_list.0.database_tuples.#", "1"),
28+
resource.TestCheckResourceAttr("data.tencentcloud_sqlserver_publish_subscribes.publish_foos", "publish_subscribe_list.0.publish_instance_id", "mssql-82lhybgn"),
29+
resource.TestCheckResourceAttr("data.tencentcloud_sqlserver_publish_subscribes.subscribe_foos", "publish_subscribe_list.0.subscribe_instance_id", "mssql-12a60qdd"),
30+
),
31+
},
32+
},
33+
})
34+
}
35+
36+
const testAccTencentCloudSqlServerPublishSubscribeDataSourceConfig = `
37+
resource "tencentcloud_sqlserver_publish_subscribe" "example" {
38+
publish_instance_id = "mssql-82lhybgn"
39+
subscribe_instance_id = "mssql-12a60qdd"
40+
publish_subscribe_name = "example"
41+
database_tuples {
42+
publish_database = "db_test_name"
43+
subscribe_database = "db_test_name"
44+
}
45+
}
46+
47+
data "tencentcloud_sqlserver_publish_subscribes" "publish_subscribes" {
48+
instance_id = tencentcloud_sqlserver_publish_subscribe.example.publish_instance_id
49+
pub_or_sub_instance_id = tencentcloud_sqlserver_publish_subscribe.example.subscribe_instance_id
50+
publish_subscribe_name = tencentcloud_sqlserver_publish_subscribe.example.publish_subscribe_name
51+
}
52+
53+
data "tencentcloud_sqlserver_publish_subscribes" "publish_foos" {
54+
instance_id = tencentcloud_sqlserver_publish_subscribe.example.publish_instance_id
55+
}
56+
57+
data "tencentcloud_sqlserver_publish_subscribes" "subscribe_foos" {
58+
instance_id = tencentcloud_sqlserver_publish_subscribe.example.subscribe_instance_id
59+
}
60+
`

tencentcloud/extension_sqlserver.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,3 +71,7 @@ const (
7171
BASIC_NETWORK = 0
7272
VPC_NEWORK = 1
7373
)
74+
75+
const INTERNALERROR_DBERROR = "InternalError.DBError"
76+
77+
const INSTANCE_STATUS_INVALID = "ResourceUnavailable.InstanceStatusInvalid"

tencentcloud/provider.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -354,13 +354,15 @@ SQLServer
354354
tencentcloud_sqlserver_account_db_attachments
355355
tencentcloud_sqlserver_backups
356356
tencentcloud_sqlserver_readonly_groups
357+
tencentcloud_sqlserver_publish_subscribes
357358
358359
Resource
359360
tencentcloud_sqlserver_instance
360361
tencentcloud_sqlserver_readonly_instance
361362
tencentcloud_sqlserver_db
362363
tencentcloud_sqlserver_account
363364
tencentcloud_sqlserver_account_db_attachment
365+
tencentcloud_sqlserver_publish_subscribe
364366
365367
SSL Certificates
366368
Data Source
@@ -663,6 +665,7 @@ func Provider() terraform.ResourceProvider {
663665
"tencentcloud_audits": dataSourceTencentCloudAudits(),
664666
"tencentcloud_cynosdb_clusters": dataSourceTencentCloudCynosdbClusters(),
665667
"tencentcloud_cynosdb_instances": dataSourceTencentCloudCynosdbInstances(),
668+
"tencentcloud_sqlserver_publish_subscribes": dataSourceTencentSqlserverPublishSubscribes(),
666669
},
667670

668671
ResourcesMap: map[string]*schema.Resource{
@@ -789,6 +792,7 @@ func Provider() terraform.ResourceProvider {
789792
"tencentcloud_image": resourceTencentCloudImage(),
790793
"tencentcloud_cynosdb_cluster": resourceTencentCloudCynosdbCluster(),
791794
"tencentcloud_cynosdb_readonly_instance": resourceTencentCloudCynosdbReadonlyInstance(),
795+
"tencentcloud_sqlserver_publish_subscribe": resourceTencentCloudSqlserverPublishSubscribe(),
792796
},
793797

794798
ConfigureFunc: providerConfigure,

tencentcloud/resource_tc_sqlserver_db.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,5 +185,5 @@ func resourceTencentCloudSqlserverDBDelete(d *schema.ResourceData, meta interfac
185185
return nil
186186
}
187187

188-
return sqlserverService.DeleteSqlserverDB(ctx, instanceId, name)
188+
return sqlserverService.DeleteSqlserverDB(ctx, instanceId, []*string{&name})
189189
}

0 commit comments

Comments
 (0)