Skip to content

Commit e30bec0

Browse files
committed
add
1 parent 91b8f2e commit e30bec0

4 files changed

+213
-5
lines changed

tencentcloud/services/bh/resource_tc_dasb_bind_device_resource.go

Lines changed: 143 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package bh
22

33
import (
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+
89201
func 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
}
Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
Provides a resource to create a dasb bind_device_resource
1+
Provides a resource to create a dasb bind device resource
22

33
Example Usage
44

@@ -7,4 +7,14 @@ resource "tencentcloud_dasb_bind_device_resource" "example" {
77
resource_id = "bh-saas-weyosfym"
88
device_id_set = [17, 18]
99
}
10+
```
11+
12+
Or custom `domain_id` parameters
13+
14+
```hcl
15+
resource "tencentcloud_dasb_bind_device_resource" "example" {
16+
resource_id = "bh-saas-lx1pxhli"
17+
domain_id = "net-31nssj3n"
18+
device_id_set = [115, 116]
19+
}
1020
```

tencentcloud/services/bh/service_tencentcloud_dasb.go

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -505,6 +505,51 @@ func (me *DasbService) DescribeDasbDeviceById(ctx context.Context, deviceId stri
505505
return
506506
}
507507

508+
func (me *DasbService) DescribeDasbDeviceByResourceId(ctx context.Context, resourceId string) (deviceSet []*dasb.Device, errRet error) {
509+
logId := tccommon.GetLogId(ctx)
510+
511+
request := dasb.NewDescribeDevicesRequest()
512+
request.ResourceIdSet = common.StringPtrs([]string{resourceId})
513+
514+
defer func() {
515+
if errRet != nil {
516+
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error())
517+
}
518+
}()
519+
520+
ratelimit.Check(request.GetAction())
521+
522+
var (
523+
offset uint64 = 0
524+
limit uint64 = 100
525+
)
526+
527+
for {
528+
request.Offset = &offset
529+
request.Limit = &limit
530+
response, err := me.client.UseDasbClient().DescribeDevices(request)
531+
if err != nil {
532+
errRet = err
533+
return
534+
}
535+
536+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
537+
538+
if response == nil || len(response.Response.DeviceSet) < 1 {
539+
break
540+
}
541+
542+
deviceSet = append(deviceSet, response.Response.DeviceSet...)
543+
if len(response.Response.DeviceSet) < int(limit) {
544+
break
545+
}
546+
547+
offset += limit
548+
}
549+
550+
return
551+
}
552+
508553
func (me *DasbService) DeleteDasbDeviceById(ctx context.Context, deviceId string) (errRet error) {
509554
logId := tccommon.GetLogId(ctx)
510555

website/docs/r/dasb_bind_device_resource.html.markdown

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@ layout: "tencentcloud"
44
page_title: "TencentCloud: tencentcloud_dasb_bind_device_resource"
55
sidebar_current: "docs-tencentcloud-resource-dasb_bind_device_resource"
66
description: |-
7-
Provides a resource to create a dasb bind_device_resource
7+
Provides a resource to create a dasb bind device resource
88
---
99

1010
# tencentcloud_dasb_bind_device_resource
1111

12-
Provides a resource to create a dasb bind_device_resource
12+
Provides a resource to create a dasb bind device resource
1313

1414
## Example Usage
1515

@@ -20,12 +20,23 @@ resource "tencentcloud_dasb_bind_device_resource" "example" {
2020
}
2121
```
2222

23+
### parameters
24+
25+
```hcl
26+
resource "tencentcloud_dasb_bind_device_resource" "example" {
27+
resource_id = "bh-saas-lx1pxhli"
28+
domain_id = "net-31nssj3n"
29+
device_id_set = [115, 116]
30+
}
31+
```
32+
2333
## Argument Reference
2434

2535
The following arguments are supported:
2636

27-
* `device_id_set` - (Required, Set: [`Int`], ForceNew) Asset ID collection.
37+
* `device_id_set` - (Required, Set: [`Int`]) Asset ID collection.
2838
* `resource_id` - (Required, String, ForceNew) Bastion host service ID.
39+
* `domain_id` - (Optional, String, ForceNew) Network Domain ID.
2940

3041
## Attributes Reference
3142

0 commit comments

Comments
 (0)