1
1
package bh
2
2
3
3
import (
4
+ "context"
4
5
"log"
5
6
6
7
tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
@@ -16,12 +17,12 @@ func ResourceTencentCloudDasbBindDeviceResource() *schema.Resource {
16
17
return & schema.Resource {
17
18
Create : resourceTencentCloudDasbBindDeviceResourceCreate ,
18
19
Read : resourceTencentCloudDasbBindDeviceResourceRead ,
20
+ Update : resourceTencentCloudDasbBindDeviceResourceUpdate ,
19
21
Delete : resourceTencentCloudDasbBindDeviceResourceDelete ,
20
22
21
23
Schema : map [string ]* schema.Schema {
22
24
"device_id_set" : {
23
25
Required : true ,
24
- ForceNew : true ,
25
26
Type : schema .TypeSet ,
26
27
Elem : & schema.Schema {Type : schema .TypeInt },
27
28
Description : "Asset ID collection." ,
@@ -32,6 +33,13 @@ func ResourceTencentCloudDasbBindDeviceResource() *schema.Resource {
32
33
Type : schema .TypeString ,
33
34
Description : "Bastion host service ID." ,
34
35
},
36
+ "domain_id" : {
37
+ Optional : true ,
38
+ Computed : true ,
39
+ ForceNew : true ,
40
+ Type : schema .TypeString ,
41
+ Description : "Network Domain ID." ,
42
+ },
35
43
},
36
44
}
37
45
}
@@ -59,6 +67,10 @@ func resourceTencentCloudDasbBindDeviceResourceCreate(d *schema.ResourceData, me
59
67
resourceId = v .(string )
60
68
}
61
69
70
+ if v , ok := d .GetOk ("domain_id" ); ok {
71
+ request .DomainId = helper .String (v .(string ))
72
+ }
73
+
62
74
err := resource .Retry (tccommon .WriteRetryTimeout , func () * resource.RetryError {
63
75
result , e := meta .(tccommon.ProviderMeta ).GetAPIV3Conn ().UseDasbClient ().BindDeviceResource (request )
64
76
if e != nil {
@@ -83,12 +95,142 @@ func resourceTencentCloudDasbBindDeviceResourceRead(d *schema.ResourceData, meta
83
95
defer tccommon .LogElapsed ("resource.tencentcloud_dasb_bind_device_resource.read" )()
84
96
defer tccommon .InconsistentCheck (d , meta )()
85
97
98
+ var (
99
+ logId = tccommon .GetLogId (tccommon .ContextNil )
100
+ ctx = context .WithValue (context .TODO (), tccommon .LogIdKey , logId )
101
+ service = DasbService {client : meta .(tccommon.ProviderMeta ).GetAPIV3Conn ()}
102
+ resourceId = d .Id ()
103
+ )
104
+
105
+ deviceSets , err := service .DescribeDasbDeviceByResourceId (ctx , resourceId )
106
+ if err != nil {
107
+ return err
108
+ }
109
+
110
+ if deviceSets == nil {
111
+ d .SetId ("" )
112
+ log .Printf ("[WARN]%s resource `DeviceResource` [%s] not found, please check if it has been deleted.\n " , logId , d .Id ())
113
+ return nil
114
+ }
115
+
116
+ _ = d .Set ("resource_id" , resourceId )
117
+
118
+ tmpList := make ([]interface {}, 0 , len (deviceSets ))
119
+ for _ , item := range deviceSets {
120
+ if item .Id != nil {
121
+ tmpList = append (tmpList , item .Id )
122
+ }
123
+
124
+ if item .DomainId != nil {
125
+ _ = d .Set ("domain_id" , item .DomainId )
126
+ }
127
+ }
128
+
129
+ _ = d .Set ("device_id_set" , tmpList )
130
+
86
131
return nil
87
132
}
88
133
134
+ func resourceTencentCloudDasbBindDeviceResourceUpdate (d * schema.ResourceData , meta interface {}) error {
135
+ defer tccommon .LogElapsed ("resource.tencentcloud_dasb_bind_device_resource.update" )()
136
+ defer tccommon .InconsistentCheck (d , meta )()
137
+
138
+ var (
139
+ logId = tccommon .GetLogId (tccommon .ContextNil )
140
+ resourceId = d .Id ()
141
+ )
142
+
143
+ if d .HasChange ("device_id_set" ) {
144
+ oldInterface , newInterface := d .GetChange ("device_id_set" )
145
+ olds := oldInterface .(* schema.Set )
146
+ news := newInterface .(* schema.Set )
147
+ remove := helper .InterfacesIntegers (olds .Difference (news ).List ())
148
+ add := helper .InterfacesIntegers (news .Difference (olds ).List ())
149
+ if len (remove ) > 0 {
150
+ request := dasb .NewBindDeviceResourceRequest ()
151
+ for _ , item := range remove {
152
+ request .DeviceIdSet = append (request .DeviceIdSet , helper .IntUint64 (item ))
153
+ }
154
+
155
+ request .ResourceId = helper .String ("" )
156
+ err := resource .Retry (tccommon .WriteRetryTimeout , func () * resource.RetryError {
157
+ result , e := meta .(tccommon.ProviderMeta ).GetAPIV3Conn ().UseDasbClient ().BindDeviceResource (request )
158
+ if e != nil {
159
+ return tccommon .RetryError (e )
160
+ } else {
161
+ log .Printf ("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n " , logId , request .GetAction (), request .ToJsonString (), result .ToJsonString ())
162
+ }
163
+
164
+ return nil
165
+ })
166
+
167
+ if err != nil {
168
+ log .Printf ("[CRITAL]%s operate dasb bindDeviceResource failed, reason:%+v" , logId , err )
169
+ return err
170
+ }
171
+ }
172
+
173
+ if len (add ) > 0 {
174
+ request := dasb .NewBindDeviceResourceRequest ()
175
+ for _ , item := range add {
176
+ request .DeviceIdSet = append (request .DeviceIdSet , helper .IntUint64 (item ))
177
+ }
178
+
179
+ request .ResourceId = helper .String (resourceId )
180
+ err := resource .Retry (tccommon .WriteRetryTimeout , func () * resource.RetryError {
181
+ result , e := meta .(tccommon.ProviderMeta ).GetAPIV3Conn ().UseDasbClient ().BindDeviceResource (request )
182
+ if e != nil {
183
+ return tccommon .RetryError (e )
184
+ } else {
185
+ log .Printf ("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n " , logId , request .GetAction (), request .ToJsonString (), result .ToJsonString ())
186
+ }
187
+
188
+ return nil
189
+ })
190
+
191
+ if err != nil {
192
+ log .Printf ("[CRITAL]%s operate dasb bindDeviceResource failed, reason:%+v" , logId , err )
193
+ return err
194
+ }
195
+ }
196
+ }
197
+
198
+ return resourceTencentCloudDasbBindDeviceResourceRead (d , meta )
199
+ }
200
+
89
201
func resourceTencentCloudDasbBindDeviceResourceDelete (d * schema.ResourceData , meta interface {}) error {
90
202
defer tccommon .LogElapsed ("resource.tencentcloud_dasb_bind_device_resource.delete" )()
91
203
defer tccommon .InconsistentCheck (d , meta )()
92
204
205
+ var (
206
+ logId = tccommon .GetLogId (tccommon .ContextNil )
207
+ request = dasb .NewBindDeviceResourceRequest ()
208
+ )
209
+
210
+ if v , ok := d .GetOk ("device_id_set" ); ok {
211
+ deviceIdSetSet := v .(* schema.Set ).List ()
212
+ for i := range deviceIdSetSet {
213
+ deviceIdSet := deviceIdSetSet [i ].(int )
214
+ request .DeviceIdSet = append (request .DeviceIdSet , helper .IntUint64 (deviceIdSet ))
215
+ }
216
+ }
217
+
218
+ request .ResourceId = helper .String ("" )
219
+ err := resource .Retry (tccommon .WriteRetryTimeout , func () * resource.RetryError {
220
+ result , e := meta .(tccommon.ProviderMeta ).GetAPIV3Conn ().UseDasbClient ().BindDeviceResource (request )
221
+ if e != nil {
222
+ return tccommon .RetryError (e )
223
+ } else {
224
+ log .Printf ("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n " , logId , request .GetAction (), request .ToJsonString (), result .ToJsonString ())
225
+ }
226
+
227
+ return nil
228
+ })
229
+
230
+ if err != nil {
231
+ log .Printf ("[CRITAL]%s operate dasb bindDeviceResource failed, reason:%+v" , logId , err )
232
+ return err
233
+ }
234
+
93
235
return nil
94
236
}
0 commit comments