@@ -3,6 +3,7 @@ package rds
33import (
44 "context"
55 "math"
6+ "strings"
67
78 "github.com/404tk/cloudtoolkit/pkg/schema"
89 "github.com/404tk/cloudtoolkit/utils/logger"
@@ -17,6 +18,16 @@ type Driver struct {
1718 Region string
1819}
1920
21+ var CacheDBList []schema.Database
22+
23+ func (d * Driver ) NewClient () (* rds.Client , error ) {
24+ region := d .Region
25+ if region == "all" {
26+ region = "cn-hangzhou"
27+ }
28+ return rds .NewClientWithOptions (region , sdk .NewConfig (), d .Cred )
29+ }
30+
2031func (d * Driver ) GetDatabases (ctx context.Context ) ([]schema.Database , error ) {
2132 list := schema .NewResources ().Databases
2233 select {
@@ -25,11 +36,8 @@ func (d *Driver) GetDatabases(ctx context.Context) ([]schema.Database, error) {
2536 default :
2637 logger .Info ("Start enumerating RDS ..." )
2738 }
28- region := d .Region
29- if region == "all" {
30- region = "cn-hangzhou"
31- }
32- client , err := rds .NewClientWithOptions (region , sdk .NewConfig (), d .Cred )
39+ defer func () { CacheDBList = list }()
40+ client , err := d .NewClient ()
3341 if err != nil {
3442 return list , err
3543 }
@@ -46,15 +54,17 @@ func (d *Driver) GetDatabases(ctx context.Context) ([]schema.Database, error) {
4654 pageCount := int (math .Ceil (float64 (response .TotalRecordCount ) / 100 ))
4755 for _ , dbInstance := range response .Items .DBInstance {
4856 _db := schema.Database {
49- DBInstanceId : dbInstance .DBInstanceId ,
57+ InstanceId : dbInstance .DBInstanceId ,
5058 Engine : dbInstance .Engine ,
5159 EngineVersion : dbInstance .EngineVersion ,
5260 Region : dbInstance .RegionId ,
61+ Address : dbInstance .ConnectionString ,
62+ NetworkType : dbInstance .InstanceNetworkType ,
5363 }
54- if dbInstance .DBInstanceNetType == "Internet" {
55- _db .Address = dbInstance .ConnectionString
56- }
57-
64+ // if dbInstance.DBInstanceNetType == "Internet" {
65+ // _db.Address = dbInstance.ConnectionString
66+ // }
67+ _db . DBNames = describeDatabases ( client , dbInstance . DBInstanceId )
5868 list = append (list , _db )
5969 }
6070 if page == pageCount || pageCount == 0 {
@@ -70,3 +80,22 @@ func (d *Driver) GetDatabases(ctx context.Context) ([]schema.Database, error) {
7080 }
7181 return list , nil
7282}
83+
84+ func describeDatabases (client * rds.Client , instanceId string ) string {
85+ request := rds .CreateDescribeDatabasesRequest ()
86+ request .Scheme = "https"
87+ request .DBInstanceId = instanceId
88+ request .PageSize = requests .NewInteger (30 )
89+ request .PageNumber = requests .NewInteger (1 )
90+ request .DBStatus = "Running"
91+ response , err := client .DescribeDatabases (request )
92+ if err != nil {
93+ logger .Error (err )
94+ return ""
95+ }
96+ dbs := []string {}
97+ for _ , db := range response .Databases .Database {
98+ dbs = append (dbs , db .DBName )
99+ }
100+ return strings .Join (dbs , "," )
101+ }
0 commit comments