Skip to content

Commit d56429e

Browse files
tongyimingmikatong
and
mikatong
authored
feat(mongodb): [123456789]mongodb urls (#3124)
* mongodb urls * add changelog --------- Co-authored-by: mikatong <[email protected]>
1 parent 156134a commit d56429e

File tree

17 files changed

+2023
-752
lines changed

17 files changed

+2023
-752
lines changed

.changelog/3124.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_mongodb_instance_urls
3+
```

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ require (
4646
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb v1.0.1034
4747
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit v1.0.1033
4848
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls v1.0.1078
49-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1078
49+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1096
5050
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.1053
5151
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp v1.0.762
5252
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.1058
@@ -66,7 +66,7 @@ require (
6666
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/lighthouse v1.0.729
6767
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/live v1.0.777
6868
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mariadb v1.0.672
69-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mongodb v1.0.949
69+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mongodb v1.0.1096
7070
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor v1.0.1066
7171
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mps v1.0.853
7272
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/organization v1.0.1038

go.sum

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -937,6 +937,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1074 h1:rlV
937937
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1074/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
938938
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1078 h1:6dDx6ePLVKl39noLeqVO22A1xPoTRXcVkQ3rW9WlnXA=
939939
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1078/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
940+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1096 h1:DMokC7T0UF8wMfT1kD+mX3M+hc2C06gmFvQ9gsfRPmI=
941+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1096/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
940942
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/controlcenter v1.0.993 h1:WlPgXldQCxt7qi5Xrc6j6zTrsXWzN5BcOGs7Irq7fwQ=
941943
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/controlcenter v1.0.993/go.mod h1:Z9U8zNtyuyKhjS0698wqsrG/kLx1TQ5CEixXBwVe7xY=
942944
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/csip v1.0.860 h1:F3esKBIT3HW9+7Gt8cVgf8X06VdGIczpgLBUECzSEzU=
@@ -983,6 +985,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mariadb v1.0.672 h1:sR3
983985
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mariadb v1.0.672/go.mod h1:o3rBKhtfIJfw4BG22M0CQVLQAc0WqIsbyRI/EW52Ka0=
984986
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mongodb v1.0.949 h1:GZGGul+VBoU6Ont/8/S5Ot0wXVrSYBDtk79tFSdvWQ0=
985987
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mongodb v1.0.949/go.mod h1:75i/x1XqkqqqOgEBj31PdpnSeehsscgI5aj6aNgcsXE=
988+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mongodb v1.0.1096 h1:cX2oVX7xaavobw7Qo5RNfyil4wLT9OMRikzyvCpnqzU=
989+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mongodb v1.0.1096/go.mod h1:YhKow73Lzn/iRvvDT0/XBnXsSypr29QZCDU6c4reVRg=
986990
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor v1.0.1066 h1:NBQgNznZRuNQ7AEHPtjFRq588IFEIvClBVtHdR/Q7Wo=
987991
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor v1.0.1066/go.mod h1:kgZ+YsYoqSplH7rlz1PwheZPZVU67tLpLXJDKLkM950=
988992
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mps v1.0.853 h1:abGpWsAtEuF2QIYKm2m9/hv9OqyHwWNLsd5+67z86BE=

tencentcloud/provider.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -582,6 +582,7 @@ func Provider() *schema.Provider {
582582
"tencentcloud_mongodb_instance_current_op": mongodb.DataSourceTencentCloudMongodbInstanceCurrentOp(),
583583
"tencentcloud_mongodb_instance_params": mongodb.DataSourceTencentCloudMongodbInstanceParams(),
584584
"tencentcloud_mongodb_instance_slow_log": mongodb.DataSourceTencentCloudMongodbInstanceSlowLog(),
585+
"tencentcloud_mongodb_instance_urls": mongodb.DataSourceTencentCloudMongodbInstanceUrls(),
585586
"tencentcloud_dayu_cc_https_policies": dayu.DataSourceTencentCloudDayuCCHttpsPolicies(),
586587
"tencentcloud_dayu_cc_http_policies": dayu.DataSourceTencentCloudDayuCCHttpPolicies(),
587588
"tencentcloud_dayu_ddos_policies": dayu.DataSourceTencentCloudDayuDdosPolicies(),

tencentcloud/provider.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -718,6 +718,7 @@ TencentDB for MongoDB(mongodb)
718718
tencentcloud_mongodb_instance_current_op
719719
tencentcloud_mongodb_instance_params
720720
tencentcloud_mongodb_instance_slow_log
721+
tencentcloud_mongodb_instance_urls
721722

722723
Resource
723724
tencentcloud_mongodb_instance
Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
package mongodb
2+
3+
import (
4+
"context"
5+
6+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
7+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
8+
mongodb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mongodb/v20190725"
9+
10+
tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
11+
)
12+
13+
func DataSourceTencentCloudMongodbInstanceUrls() *schema.Resource {
14+
return &schema.Resource{
15+
Read: dataSourceTencentCloudMongodbInstanceUrlsRead,
16+
Schema: map[string]*schema.Schema{
17+
"instance_id": {
18+
Type: schema.TypeString,
19+
Required: true,
20+
Description: "Instance id.",
21+
},
22+
23+
"urls": {
24+
Type: schema.TypeList,
25+
Computed: true,
26+
Description: "Example connection string access address in the form of an instance URI. Contains: URI type and connection string address.",
27+
Elem: &schema.Resource{
28+
Schema: map[string]*schema.Schema{
29+
"url_type": {
30+
Type: schema.TypeString,
31+
Required: true,
32+
Description: "Refers to the URI category, including:\n" +
33+
" - CLUSTER_ALL: Refers to the main node connected to the library instance through this URI, which can be read and write;\n" +
34+
" - CLUSTER_READ_READONLY: Refers to the read-only node connected to the instance through this URI;\n" +
35+
" - CLUSTER_READ_SECONDARY: Refers to connecting the instance slave node through this URI;\n" +
36+
" - CLUSTER_READ_SECONDARY_AND_READONLY: Refers to the read-only slave node connected to the instance through this URI;\n" +
37+
" - CLUSTER_PRIMARY_AND_SECONDARY: This URI connects the instance master node and slave node;\n" +
38+
" - MONGOS_ALL: means that each Mongos node is connected through this URI and can be read and write;\n" +
39+
" - MONGOS_READ_READONLY: Refers to the read-only node connected to Mongos through this URI;\n" +
40+
" - MONGOS_READ_SECONDARY: Refers to the slave node connected to Mongos through this URI;\n" +
41+
" - MONGOS_READ_PRIMARY_AND_SECONDARY: refers to the connection between the master node and slave node of Mongos through this URI;\n" +
42+
" - MONGOS_READ_SECONDARY_AND_READONLY: refers to the connection between Mongos slave node and read-only node through this URI.",
43+
},
44+
"address": {
45+
Type: schema.TypeString,
46+
Required: true,
47+
Description: "Example connection string access address in the form of an instance URI.",
48+
},
49+
},
50+
},
51+
},
52+
53+
"result_output_file": {
54+
Type: schema.TypeString,
55+
Optional: true,
56+
Description: "Used to save results.",
57+
},
58+
},
59+
}
60+
}
61+
62+
func dataSourceTencentCloudMongodbInstanceUrlsRead(d *schema.ResourceData, meta interface{}) error {
63+
defer tccommon.LogElapsed("data_source.tencentcloud_mongodb_instance_urls.read")()
64+
defer tccommon.InconsistentCheck(d, meta)()
65+
66+
logId := tccommon.GetLogId(nil)
67+
ctx := tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta)
68+
69+
service := MongodbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
70+
71+
var (
72+
instanceId string
73+
)
74+
if v, ok := d.GetOk("instance_id"); ok {
75+
instanceId = v.(string)
76+
}
77+
78+
var respData []*mongodb.DbURL
79+
err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError {
80+
result, e := service.DescribeMongodbInstanceUrls(ctx, instanceId)
81+
if e != nil {
82+
return tccommon.RetryError(e)
83+
}
84+
respData = result
85+
return nil
86+
})
87+
if err != nil {
88+
return err
89+
}
90+
91+
urlsList := make([]map[string]interface{}, 0, len(respData))
92+
if respData != nil {
93+
for _, urls := range respData {
94+
urlsMap := map[string]interface{}{}
95+
96+
if urls.URLType != nil {
97+
urlsMap["url_type"] = urls.URLType
98+
}
99+
100+
if urls.Address != nil {
101+
urlsMap["address"] = urls.Address
102+
}
103+
104+
urlsList = append(urlsList, urlsMap)
105+
}
106+
107+
_ = d.Set("urls", urlsList)
108+
}
109+
110+
d.SetId(instanceId)
111+
112+
output, ok := d.GetOk("result_output_file")
113+
if ok && output.(string) != "" {
114+
if e := tccommon.WriteToFile(output.(string), urlsList); e != nil {
115+
return e
116+
}
117+
}
118+
119+
return nil
120+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
Use this data source to query detailed information of mongodb instance urls
2+
3+
Example Usage
4+
5+
```hcl
6+
data "tencentcloud_mongodb_instance_urls" "mongodb_instance_urls" {
7+
instance_id = "cmgo-xxxxxx"
8+
}
9+
```
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package mongodb_test
2+
3+
import (
4+
"testing"
5+
6+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
7+
8+
tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest"
9+
)
10+
11+
func TestAccTencentCloudMongodbInstanceUrlsDataSource_basic(t *testing.T) {
12+
t.Parallel()
13+
resource.Test(t, resource.TestCase{
14+
PreCheck: func() {
15+
tcacctest.AccPreCheck(t)
16+
},
17+
Providers: tcacctest.AccProviders,
18+
Steps: []resource.TestStep{
19+
{
20+
Config: testAccMongodbInstanceUrlsDataSource,
21+
Check: resource.ComposeTestCheckFunc(
22+
tcacctest.AccCheckTencentCloudDataSourceID("data.tencentcloud_mongodb_instance_urls.mongodb_instance_urls"),
23+
resource.TestCheckResourceAttrSet("data.tencentcloud_mongodb_instance_urls.mongodb_instance_urls", "urls.#"),
24+
),
25+
},
26+
},
27+
})
28+
}
29+
30+
const testAccMongodbInstanceUrlsDataSource = testAccMongodbInstance + `
31+
data "tencentcloud_mongodb_instance_urls" "mongodb_instance_urls" {
32+
instance_id = tencentcloud_mongodb_instance.mongodb.id
33+
}
34+
`

tencentcloud/services/mongodb/service_tencentcloud_mongodb.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -977,3 +977,30 @@ func (me *MongodbService) DescribeMongodbInstanceParamValues(ctx context.Context
977977

978978
return
979979
}
980+
981+
func (me *MongodbService) DescribeMongodbInstanceUrls(ctx context.Context, instanceId string) (ret []*mongodb.DbURL, errRet error) {
982+
var (
983+
logId = tccommon.GetLogId(ctx)
984+
request = mongodb.NewDescribeDBInstanceURLRequest()
985+
)
986+
987+
defer func() {
988+
if errRet != nil {
989+
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error())
990+
}
991+
}()
992+
993+
request.InstanceId = helper.String(instanceId)
994+
995+
ratelimit.Check(request.GetAction())
996+
997+
response, err := me.client.UseMongodbClient().DescribeDBInstanceURL(request)
998+
if err != nil {
999+
errRet = err
1000+
return
1001+
}
1002+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
1003+
1004+
ret = response.Response.Urls
1005+
return
1006+
}

0 commit comments

Comments
 (0)