11package bh
22
33import (
4+ "context"
45 "log"
56
67 tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
@@ -16,12 +17,12 @@ func ResourceTencentCloudDasbBindDeviceResource() *schema.Resource {
1617 return & schema.Resource {
1718 Create : resourceTencentCloudDasbBindDeviceResourceCreate ,
1819 Read : resourceTencentCloudDasbBindDeviceResourceRead ,
20+ Update : resourceTencentCloudDasbBindDeviceResourceUpdate ,
1921 Delete : resourceTencentCloudDasbBindDeviceResourceDelete ,
2022
2123 Schema : map [string ]* schema.Schema {
2224 "device_id_set" : {
2325 Required : true ,
24- ForceNew : true ,
2526 Type : schema .TypeSet ,
2627 Elem : & schema.Schema {Type : schema .TypeInt },
2728 Description : "Asset ID collection." ,
@@ -32,6 +33,13 @@ func ResourceTencentCloudDasbBindDeviceResource() *schema.Resource {
3233 Type : schema .TypeString ,
3334 Description : "Bastion host service ID." ,
3435 },
36+ "domain_id" : {
37+ Optional : true ,
38+ Computed : true ,
39+ ForceNew : true ,
40+ Type : schema .TypeString ,
41+ Description : "Network Domain ID." ,
42+ },
3543 },
3644 }
3745}
@@ -59,6 +67,10 @@ func resourceTencentCloudDasbBindDeviceResourceCreate(d *schema.ResourceData, me
5967 resourceId = v .(string )
6068 }
6169
70+ if v , ok := d .GetOk ("domain_id" ); ok {
71+ request .DomainId = helper .String (v .(string ))
72+ }
73+
6274 err := resource .Retry (tccommon .WriteRetryTimeout , func () * resource.RetryError {
6375 result , e := meta .(tccommon.ProviderMeta ).GetAPIV3Conn ().UseDasbClient ().BindDeviceResource (request )
6476 if e != nil {
@@ -83,12 +95,142 @@ func resourceTencentCloudDasbBindDeviceResourceRead(d *schema.ResourceData, meta
8395 defer tccommon .LogElapsed ("resource.tencentcloud_dasb_bind_device_resource.read" )()
8496 defer tccommon .InconsistentCheck (d , meta )()
8597
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+
86131 return nil
87132}
88133
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+
89201func resourceTencentCloudDasbBindDeviceResourceDelete (d * schema.ResourceData , meta interface {}) error {
90202 defer tccommon .LogElapsed ("resource.tencentcloud_dasb_bind_device_resource.delete" )()
91203 defer tccommon .InconsistentCheck (d , meta )()
92204
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+
93235 return nil
94236}
0 commit comments