Skip to content

Commit 721e5a4

Browse files
modify sqlserver pub-sub delete subscribe database
1 parent 6e4a59f commit 721e5a4

8 files changed

+174
-127
lines changed

tencentcloud/data_source_tc_sqlserver_publish_subscribes.go

Lines changed: 28 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ resource "tencentcloud_sqlserver_publish_subscribe" "example" {
88
publish_instance_id = tencentcloud_sqlserver_instance.publish_instance.id
99
subscribe_instance_id = tencentcloud_sqlserver_instance.subscribe_instance.id
1010
publish_subscribe_name = "example"
11+
delete_subscribe_db = false
1112
database_tuples {
1213
publish_database = tencentcloud_sqlserver_db.test_publish_subscribe.name
1314
subscribe_database = tencentcloud_sqlserver_db.test_publish_subscribe.name
@@ -157,39 +158,41 @@ func dataSourceTencentSqlserverPublishSubscribesRead(d *schema.ResourceData, met
157158
logId := getLogId(contextNil)
158159
ctx := context.WithValue(context.TODO(), logIdKey, logId)
159160
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-
161+
paramMap := make(map[string]interface{})
162+
paramMap["instanceId"] = d.Get("instance_id").(string)
170163
if v, ok := d.GetOk("pub_or_sub_instance_id"); ok {
171-
pubOrSubInstanceId = v.(string)
164+
paramMap["pubOrSubInstanceId"] = v.(string)
165+
} else {
166+
paramMap["pubOrSubInstanceId"] = ""
172167
}
173168
if v, ok := d.GetOk("pub_or_sub_instance_ip"); ok {
174-
pubOrSubInstanceIp = v.(string)
169+
paramMap["pubOrSubInstanceIp"] = v.(string)
170+
} else {
171+
paramMap["pubOrSubInstanceIp"] = ""
175172
}
176173
if v, ok := d.GetOk("publish_subscribe_name"); ok {
177-
publishSubscribeName = v.(string)
174+
paramMap["publishSubscribeName"] = v.(string)
175+
} else {
176+
paramMap["publishSubscribeName"] = ""
178177
}
179178
if v, ok := d.GetOk("publish_subscribe_id"); ok {
180179
id := v.(int)
181-
if id != 0 {
182-
publishSubscribeId = *helper.IntUint64(id)
183-
}
180+
paramMap["publishSubscribeId"] = *helper.IntUint64(id)
181+
} else {
182+
paramMap["publishSubscribeId"] = *helper.IntUint64(0)
184183
}
185184
if v, ok := d.GetOk("publish_database"); ok {
186-
publishDBName = v.(string)
185+
paramMap["publishDBName"] = v.(string)
186+
} else {
187+
paramMap["publishDBName"] = ""
187188
}
188189
if v, ok := d.GetOk("subscribe_database"); ok {
189-
subscribeDBName = v.(string)
190+
paramMap["subscribeDBName"] = v.(string)
191+
} else {
192+
paramMap["subscribeDBName"] = ""
190193
}
191194

192-
publishSubscribes, err := sqlserverService.DescribeSqlserverPublishSubscribes(ctx, instanceId, pubOrSubInstanceId, pubOrSubInstanceIp, publishSubscribeName, publishDBName, subscribeDBName, publishSubscribeId)
195+
publishSubscribes, err := sqlserverService.DescribeSqlserverPublishSubscribes(ctx, paramMap)
193196
if err != nil {
194197
return err
195198
}
@@ -198,12 +201,12 @@ func dataSourceTencentSqlserverPublishSubscribesRead(d *schema.ResourceData, met
198201

199202
for _, publishSubscribe := range publishSubscribes {
200203
var databaseTupleStatus []map[string]interface{}
201-
for _, inst_ := range publishSubscribe.DatabaseTupleSet {
204+
for _, inst := range publishSubscribe.DatabaseTupleSet {
202205
databaseTuple := map[string]interface{}{
203-
"publish_database": inst_.PublishDatabase,
204-
"subscribe_database": inst_.SubscribeDatabase,
205-
"last_sync_time": inst_.LastSyncTime,
206-
"status": inst_.Status,
206+
"publish_database": inst.PublishDatabase,
207+
"subscribe_database": inst.SubscribeDatabase,
208+
"last_sync_time": inst.LastSyncTime,
209+
"status": inst.Status,
207210
}
208211
databaseTupleStatus = append(databaseTupleStatus, databaseTuple)
209212
}
@@ -225,7 +228,7 @@ func dataSourceTencentSqlserverPublishSubscribesRead(d *schema.ResourceData, met
225228

226229
d.SetId(helper.DataResourceIdsHash(ids))
227230
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())
231+
log.Printf("[CRITAL]%s provider set sql server publish and subscribe list fail, reason:%s ", logId, err.Error())
229232
return err
230233
}
231234

tencentcloud/data_source_tc_sqlserver_publish_subscribes_test.go

Lines changed: 28 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -35,46 +35,47 @@ func TestAccTencentCloudSqlserverPublishSubscribeDataSource(t *testing.T) {
3535

3636
const testAccTencentCloudSqlServerPublishSubscribeDataSourceConfig = testAccSqlserverInstanceBasic + `
3737
resource "tencentcloud_sqlserver_instance" "publish_instance" {
38-
name = "tf_sqlserver_publish_instance"
39-
availability_zone = var.availability_zone
40-
charge_type = "POSTPAID_BY_HOUR"
41-
vpc_id = "` + defaultVpcId + `"
42-
subnet_id = "` + defaultSubnetId + `"
43-
project_id = 0
44-
memory = 2
45-
storage = 10
46-
maintenance_week_set = [1,2,3]
47-
maintenance_start_time = "09:00"
38+
name = "tf_sqlserver_publish_instance"
39+
availability_zone = var.availability_zone
40+
charge_type = "POSTPAID_BY_HOUR"
41+
vpc_id = "` + defaultVpcId + `"
42+
subnet_id = "` + defaultSubnetId + `"
43+
project_id = 0
44+
memory = 2
45+
storage = 10
46+
maintenance_week_set = [1,2,3]
47+
maintenance_start_time= "09:00"
4848
maintenance_time_span = 3
49-
security_groups = ["sg-nltpbqg1"]
49+
security_groups = ["sg-nltpbqg1"]
5050
}
5151
5252
resource "tencentcloud_sqlserver_instance" "subscribe_instance" {
53-
name = "tf_sqlserver_subscribe_instance"
54-
availability_zone = var.availability_zone
55-
charge_type = "POSTPAID_BY_HOUR"
56-
vpc_id = "` + defaultVpcId + `"
57-
subnet_id = "` + defaultSubnetId + `"
58-
project_id = 0
59-
memory = 2
60-
storage = 10
61-
maintenance_week_set = [1,2,3]
62-
maintenance_start_time = "09:00"
63-
maintenance_time_span = 3
64-
security_groups = ["sg-nltpbqg1"]
53+
name = "tf_sqlserver_subscribe_instance"
54+
availability_zone = var.availability_zone
55+
charge_type = "POSTPAID_BY_HOUR"
56+
vpc_id = "` + defaultVpcId + `"
57+
subnet_id = "` + defaultSubnetId + `"
58+
project_id = 0
59+
memory = 2
60+
storage = 10
61+
maintenance_week_set = [1,2,3]
62+
maintenance_start_time = "09:00"
63+
maintenance_time_span = 3
64+
security_groups = ["sg-nltpbqg1"]
6565
}
6666
6767
resource "tencentcloud_sqlserver_db" "test_publish_subscribe" {
68-
instance_id = tencentcloud_sqlserver_instance.publish_instance.id
69-
name = "test111"
70-
charset = "Chinese_PRC_BIN"
71-
remark = "testACC-remark"
68+
instance_id = tencentcloud_sqlserver_instance.publish_instance.id
69+
name = "test111"
70+
charset = "Chinese_PRC_BIN"
71+
remark = "testACC-remark"
7272
}
7373
7474
resource "tencentcloud_sqlserver_publish_subscribe" "example" {
7575
publish_instance_id = tencentcloud_sqlserver_instance.publish_instance.id
7676
subscribe_instance_id = tencentcloud_sqlserver_instance.subscribe_instance.id
7777
publish_subscribe_name = "example"
78+
delete_subscribe_db = false
7879
database_tuples {
7980
publish_database = tencentcloud_sqlserver_db.test_publish_subscribe.name
8081
subscribe_database = tencentcloud_sqlserver_db.test_publish_subscribe.name

tencentcloud/extension_sqlserver.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ const (
7272
VPC_NEWORK = 1
7373
)
7474

75-
const INTERNALERROR_DBERROR = "InternalError.DBError"
76-
77-
const INSTANCE_STATUS_INVALID = "ResourceUnavailable.InstanceStatusInvalid"
75+
const (
76+
INTERNALERROR_DBERROR = "InternalError.DBError"
77+
INSTANCE_STATUS_INVALID = "ResourceUnavailable.InstanceStatusInvalid"
78+
)

tencentcloud/resource_tc_sqlserver_publish_subscribe.go

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ resource "tencentcloud_sqlserver_publish_subscribe" "example" {
88
publish_instance_id = tencentcloud_sqlserver_instance.publish_instance.id
99
subscribe_instance_id = tencentcloud_sqlserver_instance.subscribe_instance.id
1010
publish_subscribe_name = "example"
11+
delete_subscribe_db = false
1112
database_tuples {
1213
publish_database = tencentcloud_sqlserver_db.test_publish_subscribe.name
1314
subscribe_database = tencentcloud_sqlserver_db.test_publish_subscribe.name
@@ -17,10 +18,10 @@ resource "tencentcloud_sqlserver_publish_subscribe" "example" {
1718
1819
Import
1920
20-
SQL Server PublishSubscribe can be imported using the id, e.g.
21+
SQL Server PublishSubscribe can be imported using the publish_sqlserver_id#subscribe_sqlserver_id, e.g.
2122
2223
```
23-
$ terraform import tencentcloud_sqlserver_publish_subscribe.foo mssql-3cdq7kx5#db_name
24+
$ terraform import tencentcloud_sqlserver_publish_subscribe.foo publish_sqlserver_id#subscribe_sqlserver_id
2425
```
2526
*/
2627
package tencentcloud
@@ -63,12 +64,18 @@ func resourceTencentCloudSqlserverPublishSubscribe() *schema.Resource {
6364
Default: "default_name",
6465
Description: "The name of the Publish and Subscribe in the SQLServer instance. default is `default_name`.",
6566
},
67+
"delete_subscribe_db": {
68+
Type: schema.TypeBool,
69+
Optional: true,
70+
Default: false,
71+
Description: "Whether to delete the subscriber database when deleting the Publish and Subscribe in the SQLServer instance. `true` for deletes the subscribe database, `false` for does not delete the subscribe database. default is `false`.",
72+
},
6673
"database_tuples": {
6774
Type: schema.TypeSet,
6875
Required: true,
6976
MinItems: 1,
7077
MaxItems: 80,
71-
Description: "Database Publish and Publish relationship list. Modify database is not allowed.",
78+
Description: "Database Publish and Publish relationship list. The elements inside can be deleted and added individually, but modify is not allowed.",
7279
Elem: &schema.Resource{
7380
Schema: map[string]*schema.Schema{
7481
"publish_database": {
@@ -187,6 +194,7 @@ func resourceTencentCloudSqlserverPublishSubscribeUpdate(d *schema.ResourceData,
187194
sqlserverService = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn}
188195
publishInstanceId = d.Get("publish_instance_id").(string)
189196
subscribeInstanceId = d.Get("subscribe_instance_id").(string)
197+
deleteSubscribeDb = d.Get("delete_subscribe_db").(bool)
190198
)
191199

192200
publishSubscribe, _, err := sqlserverService.DescribeSqlserverPublishSubscribeById(ctx, publishInstanceId, subscribeInstanceId)
@@ -202,6 +210,7 @@ func resourceTencentCloudSqlserverPublishSubscribeUpdate(d *schema.ResourceData,
202210

203211
if d.HasChange("database_tuples") {
204212
var deleteDatabaseTupleSet []*sqlserver.DatabaseTuple
213+
var subscribeDatabases []*string
205214
oldSet, newSet := d.GetChange("database_tuples")
206215
//get new DatabaseTupleSet
207216
var newDatabaseTupleSet []*sqlserver.DatabaseTuple
@@ -230,6 +239,8 @@ func resourceTencentCloudSqlserverPublishSubscribeUpdate(d *schema.ResourceData,
230239
SubscribeDatabase: oldInstance.SubscribeDatabase,
231240
}
232241
deleteDatabaseTupleSet = append(deleteDatabaseTupleSet, &databaseTuple)
242+
subDatabase := *oldInstance.SubscribeDatabase
243+
subscribeDatabases = append(subscribeDatabases, &subDatabase)
233244
}
234245
}
235246
if deleteDatabaseTupleSet == nil {
@@ -238,6 +249,12 @@ func resourceTencentCloudSqlserverPublishSubscribeUpdate(d *schema.ResourceData,
238249
if err := sqlserverService.DeletePublishSubscribe(ctx, publishSubscribe, deleteDatabaseTupleSet); err != nil {
239250
return err
240251
}
252+
if deleteSubscribeDb {
253+
//delete subscribe databases
254+
if err = sqlserverService.DeleteSqlserverDB(ctx, subscribeInstanceId, subscribeDatabases); err != nil {
255+
return err
256+
}
257+
}
241258
}
242259

243260
return resourceTencentCloudSqlserverPublishSubscribeRead(d, meta)
@@ -252,6 +269,7 @@ func resourceTencentCloudSqlserverPublishSubscribeDelete(d *schema.ResourceData,
252269
sqlserverService = SqlserverService{client: meta.(*TencentCloudClient).apiV3Conn}
253270
publishInstanceId = d.Get("publish_instance_id").(string)
254271
subscribeInstanceId = d.Get("subscribe_instance_id").(string)
272+
deleteSubscribeDb = d.Get("delete_subscribe_db").(bool)
255273
)
256274
publishSubscribe, has, err := sqlserverService.DescribeSqlserverPublishSubscribeById(ctx, publishInstanceId, subscribeInstanceId)
257275
if err != nil {
@@ -263,13 +281,22 @@ func resourceTencentCloudSqlserverPublishSubscribeDelete(d *schema.ResourceData,
263281

264282
oldDatabaseTuples, _ := d.GetChange("database_tuples")
265283
var oldDatabaseTupleSet []*sqlserver.DatabaseTuple
284+
var subscribeDatabases []*string
266285
for _, inst_ := range oldDatabaseTuples.(*schema.Set).List() {
267286
inst := inst_.(map[string]interface{})
287+
subDatabase := inst["subscribe_database"].(string)
268288
oldDatabaseTupleSet = append(oldDatabaseTupleSet, sqlServerNewDatabaseTuple(inst["publish_database"], inst["subscribe_database"]))
289+
subscribeDatabases = append(subscribeDatabases, &subDatabase)
269290
}
270291

271292
if err := sqlserverService.DeletePublishSubscribe(ctx, publishSubscribe, oldDatabaseTupleSet); err != nil {
272293
return err
273294
}
295+
if deleteSubscribeDb {
296+
//delete subscribe databases
297+
if err = sqlserverService.DeleteSqlserverDB(ctx, subscribeInstanceId, subscribeDatabases); err != nil {
298+
return err
299+
}
300+
}
274301
return nil
275302
}

0 commit comments

Comments
 (0)