Skip to content

Commit 8b0ecef

Browse files
gitmknanonymous
andauthored
feat: support nacos (#1774)
* feat: support nacos * feat: add changelog * fix: go fmt --------- Co-authored-by: anonymous <anonymous@mail.org>
1 parent 66214b8 commit 8b0ecef

File tree

7 files changed

+231
-0
lines changed

7 files changed

+231
-0
lines changed

.changelog/1774.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:new-data-source
2+
tencentcloud_tse_nacos_server_interfaces
3+
```
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
/*
2+
Use this data source to query detailed information of tse nacos_server_interfaces
3+
4+
Example Usage
5+
6+
```hcl
7+
data "tencentcloud_tse_nacos_server_interfaces" "nacos_server_interfaces" {
8+
instance_id = "ins-xxxxxx"
9+
}
10+
```
11+
*/
12+
package tencentcloud
13+
14+
import (
15+
"context"
16+
17+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
18+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
19+
tse "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tse/v20201207"
20+
)
21+
22+
func dataSourceTencentCloudTseNacosServerInterfaces() *schema.Resource {
23+
return &schema.Resource{
24+
Read: dataSourceTencentCloudTseNacosServerInterfacesRead,
25+
Schema: map[string]*schema.Schema{
26+
"instance_id": {
27+
Optional: true,
28+
Type: schema.TypeString,
29+
Description: "engine instance ID.",
30+
},
31+
32+
"content": {
33+
Computed: true,
34+
Type: schema.TypeList,
35+
Description: "interface list.",
36+
Elem: &schema.Resource{
37+
Schema: map[string]*schema.Schema{
38+
"interface": {
39+
Type: schema.TypeString,
40+
Computed: true,
41+
Description: "interface nameNote: This field may return null, indicating that a valid value is not available.",
42+
},
43+
},
44+
},
45+
},
46+
47+
"result_output_file": {
48+
Type: schema.TypeString,
49+
Optional: true,
50+
Description: "Used to save results.",
51+
},
52+
},
53+
}
54+
}
55+
56+
func dataSourceTencentCloudTseNacosServerInterfacesRead(d *schema.ResourceData, meta interface{}) error {
57+
defer logElapsed("data_source.tencentcloud_tse_nacos_server_interfaces.read")()
58+
defer inconsistentCheck(d, meta)()
59+
60+
logId := getLogId(contextNil)
61+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
62+
63+
var instanceId string
64+
if v, ok := d.GetOk("instance_id"); ok {
65+
instanceId = v.(string)
66+
}
67+
68+
service := TseService{client: meta.(*TencentCloudClient).apiV3Conn}
69+
var content []*tse.NacosServerInterface
70+
err := resource.Retry(readRetryTimeout, func() *resource.RetryError {
71+
result, e := service.DescribeTseNacosServerInterfacesByFilter(ctx, instanceId)
72+
if e != nil {
73+
return retryError(e)
74+
}
75+
content = result
76+
return nil
77+
})
78+
if err != nil {
79+
return err
80+
}
81+
82+
tmpList := make([]map[string]interface{}, 0, len(content))
83+
84+
if content != nil {
85+
for _, nacosServerInterface := range content {
86+
nacosServerInterfaceMap := map[string]interface{}{}
87+
88+
if nacosServerInterface.Interface != nil {
89+
nacosServerInterfaceMap["interface"] = nacosServerInterface.Interface
90+
}
91+
92+
tmpList = append(tmpList, nacosServerInterfaceMap)
93+
}
94+
95+
_ = d.Set("content", tmpList)
96+
}
97+
98+
d.SetId(instanceId)
99+
output, ok := d.GetOk("result_output_file")
100+
if ok && output.(string) != "" {
101+
if e := writeToFile(output.(string), tmpList); e != nil {
102+
return e
103+
}
104+
}
105+
return nil
106+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package tencentcloud
2+
3+
import (
4+
"testing"
5+
6+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
7+
)
8+
9+
// go test -i; go test -test.run TestAccTencentCloudTseNacosServerInterfacesDataSource_basic -v
10+
func TestAccTencentCloudTseNacosServerInterfacesDataSource_basic(t *testing.T) {
11+
t.Parallel()
12+
resource.Test(t, resource.TestCase{
13+
PreCheck: func() {
14+
testAccPreCheck(t)
15+
},
16+
Providers: testAccProviders,
17+
Steps: []resource.TestStep{
18+
{
19+
Config: testAccTseNacosServerInterfacesDataSource,
20+
Check: resource.ComposeTestCheckFunc(
21+
testAccCheckTencentCloudDataSourceID("data.tencentcloud_tse_nacos_server_interfaces.nacos_server_interfaces"),
22+
resource.TestCheckResourceAttrSet("data.tencentcloud_tse_nacos_server_interfaces.nacos_server_interfaces", "instance_id"),
23+
resource.TestCheckResourceAttrSet("data.tencentcloud_tse_nacos_server_interfaces.nacos_server_interfaces", "content.#"),
24+
resource.TestCheckResourceAttrSet("data.tencentcloud_tse_nacos_server_interfaces.nacos_server_interfaces", "content.0.interface"),
25+
),
26+
},
27+
},
28+
})
29+
}
30+
31+
const testAccTseNacosServerInterfacesDataSource = `
32+
33+
data "tencentcloud_tse_nacos_server_interfaces" "nacos_server_interfaces" {
34+
instance_id = "ins-15137c53"
35+
}
36+
37+
`

tencentcloud/provider.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1158,6 +1158,7 @@ Tencent Cloud Service Engine(TSE)
11581158
tencentcloud_tse_nacos_replicas
11591159
tencentcloud_tse_zookeeper_replicas
11601160
tencentcloud_tse_zookeeper_server_interfaces
1161+
tencentcloud_tse_nacos_server_interfaces
11611162
11621163
Resource
11631164
tencentcloud_tse_instance
@@ -1582,6 +1583,7 @@ func Provider() *schema.Provider {
15821583
"tencentcloud_api_gateway_api_apps": dataSourceTencentCloudAPIGatewayAPIApps(),
15831584
"tencentcloud_tse_access_address": dataSourceTencentCloudTseAccessAddress(),
15841585
"tencentcloud_tse_nacos_replicas": dataSourceTencentCloudTseNacosReplicas(),
1586+
"tencentcloud_tse_nacos_server_interfaces": dataSourceTencentCloudTseNacosServerInterfaces(),
15851587
"tencentcloud_tse_zookeeper_replicas": dataSourceTencentCloudTseZookeeperReplicas(),
15861588
"tencentcloud_tse_zookeeper_server_interfaces": dataSourceTencentCloudTseZookeeperServerInterfaces(),
15871589
"tencentcloud_lighthouse_zone": dataSourceTencentCloudLighthouseZone(),

tencentcloud/service_tencentcloud_tse.go

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -319,3 +319,47 @@ func (me *TseService) DescribeTseZookeeperServerInterfacesByFilter(ctx context.C
319319

320320
return
321321
}
322+
323+
func (me *TseService) DescribeTseNacosServerInterfacesByFilter(ctx context.Context, instanceId string) (nacosServerInterfaces []*tse.NacosServerInterface, errRet error) {
324+
var (
325+
logId = getLogId(ctx)
326+
request = tse.NewDescribeNacosServerInterfacesRequest()
327+
)
328+
329+
defer func() {
330+
if errRet != nil {
331+
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error())
332+
}
333+
}()
334+
335+
request.InstanceId = &instanceId
336+
337+
ratelimit.Check(request.GetAction())
338+
339+
var (
340+
offset uint64 = 0
341+
limit uint64 = 20
342+
)
343+
for {
344+
request.Offset = &offset
345+
request.Limit = &limit
346+
response, err := me.client.UseTseClient().DescribeNacosServerInterfaces(request)
347+
if err != nil {
348+
errRet = err
349+
return
350+
}
351+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
352+
353+
if response == nil || len(response.Response.Content) < 1 {
354+
break
355+
}
356+
nacosServerInterfaces = append(nacosServerInterfaces, response.Response.Content...)
357+
if len(response.Response.Content) < int(limit) {
358+
break
359+
}
360+
361+
offset += limit
362+
}
363+
364+
return
365+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
---
2+
subcategory: "Tencent Cloud Service Engine(TSE)"
3+
layout: "tencentcloud"
4+
page_title: "TencentCloud: tencentcloud_tse_nacos_server_interfaces"
5+
sidebar_current: "docs-tencentcloud-datasource-tse_nacos_server_interfaces"
6+
description: |-
7+
Use this data source to query detailed information of tse nacos_server_interfaces
8+
---
9+
10+
# tencentcloud_tse_nacos_server_interfaces
11+
12+
Use this data source to query detailed information of tse nacos_server_interfaces
13+
14+
## Example Usage
15+
16+
```hcl
17+
data "tencentcloud_tse_nacos_server_interfaces" "nacos_server_interfaces" {
18+
instance_id = "ins-xxxxxx"
19+
}
20+
```
21+
22+
## Argument Reference
23+
24+
The following arguments are supported:
25+
26+
* `instance_id` - (Optional, String) engine instance ID.
27+
* `result_output_file` - (Optional, String) Used to save results.
28+
29+
## Attributes Reference
30+
31+
In addition to all arguments above, the following attributes are exported:
32+
33+
* `content` - interface list.
34+
* `interface` - interface nameNote: This field may return null, indicating that a valid value is not available.
35+
36+

website/tencentcloud.erb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2230,6 +2230,9 @@
22302230
<li>
22312231
<a href="/docs/providers/tencentcloud/d/tse_zookeeper_server_interfaces.html">tencentcloud_tse_zookeeper_server_interfaces</a>
22322232
</li>
2233+
<li>
2234+
<a href="/docs/providers/tencentcloud/d/tse_nacos_server_interfaces.html">tencentcloud_tse_nacos_server_interfaces</a>
2235+
</li>
22332236
</ul>
22342237
</li>
22352238
<li>

0 commit comments

Comments
 (0)