@@ -57,6 +57,12 @@ func ResourceTencentCloudVpcSubnet() *schema.Resource {
57
57
Default : true ,
58
58
Description : "Indicates whether multicast is enabled. The default value is 'true'." ,
59
59
},
60
+ "cdc_id" : {
61
+ Type : schema .TypeString ,
62
+ Optional : true ,
63
+ ForceNew : true ,
64
+ Description : "ID of CDC instance." ,
65
+ },
60
66
"route_table_id" : {
61
67
Type : schema .TypeString ,
62
68
Optional : true ,
@@ -92,35 +98,38 @@ func ResourceTencentCloudVpcSubnet() *schema.Resource {
92
98
func resourceTencentCloudVpcSubnetCreate (d * schema.ResourceData , meta interface {}) error {
93
99
defer tccommon .LogElapsed ("resource.tencentcloud_subnet.create" )()
94
100
95
- logId := tccommon .GetLogId (tccommon .ContextNil )
96
- ctx := context .WithValue (context .TODO (), tccommon .LogIdKey , logId )
97
-
98
- vpcService := VpcService {client : meta .(tccommon.ProviderMeta ).GetAPIV3Conn ()}
99
-
100
101
var (
102
+ logId = tccommon .GetLogId (tccommon .ContextNil )
103
+ ctx = context .WithValue (context .TODO (), tccommon .LogIdKey , logId )
104
+ vpcService = VpcService {client : meta .(tccommon.ProviderMeta ).GetAPIV3Conn ()}
101
105
vpcId string
102
106
availabilityZone string
103
107
name string
104
108
cidrBlock string
105
109
isMulticast bool
106
110
routeTableId string
111
+ cdcId string
107
112
tags map [string ]string
108
113
)
114
+
109
115
if temp , ok := d .GetOk ("vpc_id" ); ok {
110
116
vpcId = temp .(string )
111
117
if len (vpcId ) < 1 {
112
118
return fmt .Errorf ("vpc_id should be not empty string" )
113
119
}
114
120
}
121
+
115
122
if temp , ok := d .GetOk ("availability_zone" ); ok {
116
123
availabilityZone = temp .(string )
117
124
if len (availabilityZone ) < 1 {
118
125
return fmt .Errorf ("availability_zone should be not empty string" )
119
126
}
120
127
}
128
+
121
129
if temp , ok := d .GetOk ("name" ); ok {
122
130
name = temp .(string )
123
131
}
132
+
124
133
if temp , ok := d .GetOk ("cidr_block" ); ok {
125
134
cidrBlock = temp .(string )
126
135
}
@@ -134,11 +143,16 @@ func resourceTencentCloudVpcSubnetCreate(d *schema.ResourceData, meta interface{
134
143
}
135
144
}
136
145
146
+ if temp , ok := d .GetOk ("cdc_id" ); ok {
147
+ cdcId = temp .(string )
148
+ }
149
+
137
150
if routeTableId != "" {
138
151
_ , has , err := vpcService .IsRouteTableInVpc (ctx , routeTableId , vpcId )
139
152
if err != nil {
140
153
return err
141
154
}
155
+
142
156
if has != 1 {
143
157
err = fmt .Errorf ("error,route_table [%s] not found in vpc [%s]" , routeTableId , vpcId )
144
158
log .Printf ("[CRITAL]%s %s" , logId , err .Error ())
@@ -150,10 +164,11 @@ func resourceTencentCloudVpcSubnetCreate(d *schema.ResourceData, meta interface{
150
164
tags = temp
151
165
}
152
166
153
- subnetId , err := vpcService .CreateSubnet (ctx , vpcId , name , cidrBlock , availabilityZone , tags )
167
+ subnetId , err := vpcService .CreateSubnet (ctx , vpcId , name , cidrBlock , availabilityZone , cdcId , tags )
154
168
if err != nil {
155
169
return err
156
170
}
171
+
157
172
d .SetId (subnetId )
158
173
159
174
err = vpcService .ModifySubnetAttribute (ctx , subnetId , name , isMulticast )
@@ -170,10 +185,8 @@ func resourceTencentCloudVpcSubnetCreate(d *schema.ResourceData, meta interface{
170
185
171
186
if tags := helper .GetTags (d , "tags" ); len (tags ) > 0 {
172
187
tagService := svctag .NewTagService (meta .(tccommon.ProviderMeta ).GetAPIV3Conn ())
173
-
174
188
region := meta .(tccommon.ProviderMeta ).GetAPIV3Conn ().Region
175
189
resourceName := fmt .Sprintf ("qcs::vpc:%s:uin/:subnet/%s" , region , subnetId )
176
-
177
190
if err := tagService .ModifyTags (ctx , resourceName , tags , nil ); err != nil {
178
191
return err
179
192
}
@@ -186,19 +199,18 @@ func resourceTencentCloudVpcSubnetRead(d *schema.ResourceData, meta interface{})
186
199
defer tccommon .LogElapsed ("resource.tencentcloud_subnet.read" )()
187
200
defer tccommon .InconsistentCheck (d , meta )()
188
201
189
- logId := tccommon .GetLogId (tccommon .ContextNil )
190
- ctx := context .WithValue (context .TODO (), tccommon .LogIdKey , logId )
191
-
192
- id := d .Id ()
193
-
194
- vpcService := VpcService {client : meta .(tccommon.ProviderMeta ).GetAPIV3Conn ()}
195
- tagService := svctag .NewTagService (meta .(tccommon.ProviderMeta ).GetAPIV3Conn ())
196
- region := meta .(tccommon.ProviderMeta ).GetAPIV3Conn ().Region
197
202
var (
198
- info VpcSubnetBasicInfo
199
- has int
200
- e error
203
+ logId = tccommon .GetLogId (tccommon .ContextNil )
204
+ ctx = context .WithValue (context .TODO (), tccommon .LogIdKey , logId )
205
+ vpcService = VpcService {client : meta .(tccommon.ProviderMeta ).GetAPIV3Conn ()}
206
+ tagService = svctag .NewTagService (meta .(tccommon.ProviderMeta ).GetAPIV3Conn ())
207
+ region = meta .(tccommon.ProviderMeta ).GetAPIV3Conn ().Region
208
+ id = d .Id ()
209
+ info VpcSubnetBasicInfo
210
+ has int
211
+ e error
201
212
)
213
+
202
214
err := resource .Retry (tccommon .ReadRetryTimeout , func () * resource.RetryError {
203
215
info , has , e = vpcService .DescribeSubnet (ctx , id , nil , "" , "" )
204
216
if e != nil {
@@ -216,14 +228,18 @@ func resourceTencentCloudVpcSubnetRead(d *schema.ResourceData, meta interface{})
216
228
log .Printf ("[CRITAL]%s %s" , logId , errRet .Error ())
217
229
return resource .NonRetryableError (errRet )
218
230
}
231
+
219
232
return nil
220
233
})
234
+
221
235
if err != nil {
222
236
return err
223
237
}
238
+
224
239
if has == 0 {
225
240
return nil
226
241
}
242
+
227
243
tags , err := tagService .DescribeResourceTags (ctx , "vpc" , "subnet" , region , id )
228
244
if err != nil {
229
245
return err
@@ -235,6 +251,7 @@ func resourceTencentCloudVpcSubnetRead(d *schema.ResourceData, meta interface{})
235
251
_ = d .Set ("cidr_block" , info .cidr )
236
252
_ = d .Set ("is_multicast" , info .isMulticast )
237
253
_ = d .Set ("route_table_id" , info .routeTableId )
254
+ _ = d .Set ("cdc_id" , info .cdcId )
238
255
_ = d .Set ("is_default" , info .isDefault )
239
256
_ = d .Set ("available_ip_count" , info .availableIpCount )
240
257
_ = d .Set ("create_time" , info .createTime )
@@ -246,17 +263,15 @@ func resourceTencentCloudVpcSubnetRead(d *schema.ResourceData, meta interface{})
246
263
func resourceTencentCloudVpcSubnetUpdate (d * schema.ResourceData , meta interface {}) error {
247
264
defer tccommon .LogElapsed ("resource.tencentcloud_subnet.update" )()
248
265
249
- logId := tccommon .GetLogId (tccommon .ContextNil )
250
- ctx := context .WithValue (context .TODO (), tccommon .LogIdKey , logId )
251
-
252
- id := d .Id ()
253
-
254
- service := VpcService {client : meta .(tccommon.ProviderMeta ).GetAPIV3Conn ()}
255
-
256
266
var (
267
+ logId = tccommon .GetLogId (tccommon .ContextNil )
268
+ ctx = context .WithValue (context .TODO (), tccommon .LogIdKey , logId )
269
+ service = VpcService {client : meta .(tccommon.ProviderMeta ).GetAPIV3Conn ()}
270
+ id = d .Id ()
257
271
name string
258
272
isMulticast bool
259
273
)
274
+
260
275
old , now := d .GetChange ("name" )
261
276
if d .HasChange ("name" ) {
262
277
name = now .(string )
@@ -287,6 +302,7 @@ func resourceTencentCloudVpcSubnetUpdate(d *schema.ResourceData, meta interface{
287
302
if err != nil {
288
303
return err
289
304
}
305
+
290
306
if has != 1 {
291
307
err = fmt .Errorf ("error,route_table [%s] not found in vpc [%s]" , routeTableId , d .Get ("vpc_id" ).(string ))
292
308
log .Printf ("[CRITAL]%s %s" , logId , err .Error ())
@@ -301,16 +317,12 @@ func resourceTencentCloudVpcSubnetUpdate(d *schema.ResourceData, meta interface{
301
317
if d .HasChange ("tags" ) {
302
318
oldTags , newTags := d .GetChange ("tags" )
303
319
replaceTags , deleteTags := svctag .DiffTags (oldTags .(map [string ]interface {}), newTags .(map [string ]interface {}))
304
-
305
320
tagService := svctag .NewTagService (meta .(tccommon.ProviderMeta ).GetAPIV3Conn ())
306
-
307
321
region := meta .(tccommon.ProviderMeta ).GetAPIV3Conn ().Region
308
322
resourceName := fmt .Sprintf ("qcs::vpc:%s:uin/:subnet/%s" , region , id )
309
-
310
323
if err := tagService .ModifyTags (ctx , resourceName , replaceTags , deleteTags ); err != nil {
311
324
return err
312
325
}
313
-
314
326
}
315
327
316
328
d .Partial (false )
@@ -321,10 +333,11 @@ func resourceTencentCloudVpcSubnetUpdate(d *schema.ResourceData, meta interface{
321
333
func resourceTencentCloudVpcSubnetDelete (d * schema.ResourceData , meta interface {}) error {
322
334
defer tccommon .LogElapsed ("resource.tencentcloud_subnet.delete" )()
323
335
324
- logId := tccommon .GetLogId (tccommon .ContextNil )
325
- ctx := context .WithValue (context .TODO (), tccommon .LogIdKey , logId )
326
-
327
- service := VpcService {client : meta .(tccommon.ProviderMeta ).GetAPIV3Conn ()}
336
+ var (
337
+ logId = tccommon .GetLogId (tccommon .ContextNil )
338
+ ctx = context .WithValue (context .TODO (), tccommon .LogIdKey , logId )
339
+ service = VpcService {client : meta .(tccommon.ProviderMeta ).GetAPIV3Conn ()}
340
+ )
328
341
329
342
err := resource .Retry (tccommon .WriteRetryTimeout , func () * resource.RetryError {
330
343
if err := service .DeleteSubnet (ctx , d .Id ()); err != nil {
@@ -333,8 +346,10 @@ func resourceTencentCloudVpcSubnetDelete(d *schema.ResourceData, meta interface{
333
346
return nil
334
347
}
335
348
}
349
+
336
350
return resource .RetryableError (err )
337
351
}
352
+
338
353
return nil
339
354
})
340
355
0 commit comments