@@ -119,11 +119,6 @@ type SDBInstance struct {
119119 CopyTagsToSnapshot bool `xml:"CopyTagsToSnapshot"`
120120}
121121
122- type SDBInstances struct {
123- DBInstances []SDBInstance `xml:"DBInstances>DBInstance"`
124- Marker string `xml:"Marker"`
125- }
126-
127122func (rds * SDBInstance ) GetName () string {
128123 return rds .DBInstanceIdentifier
129124}
@@ -297,24 +292,17 @@ func (rds *SDBInstance) Refresh() error {
297292}
298293
299294func (region * SRegion ) GetDBInstance (instanceId string ) (* SDBInstance , error ) {
300- instances , _ , err := region .GetDBInstances (instanceId , "" )
295+ instances , err := region .GetDBInstances (instanceId )
301296 if err != nil {
302297 return nil , errors .Wrap (err , "GetDBInstances" )
303298 }
304-
305- if len (instances ) == 1 {
306- if instances [0 ].DbiResourceId == instanceId {
307- instances [0 ].region = region
308- return & instances [0 ], nil
299+ for i := range instances {
300+ if instances [i ].DbiResourceId == instanceId {
301+ instances [i ].region = region
302+ return & instances [i ], nil
309303 }
310- return nil , cloudprovider .ErrNotFound
311304 }
312-
313- if len (instances ) == 0 {
314- return nil , cloudprovider .ErrNotFound
315- }
316-
317- return nil , cloudprovider .ErrDuplicateId
305+ return nil , errors .Wrapf (cloudprovider .ErrNotFound , instanceId )
318306}
319307
320308func (rds * SDBInstance ) GetZone1Id () string {
@@ -421,65 +409,67 @@ func (rds *SDBInstance) CreateIBackup(conf *cloudprovider.SDBInstanceBackupCreat
421409 return ret .DBSnapshot .GetGlobalId (), nil
422410}
423411
424- func (region * SRegion ) GetDBInstances (instanceId , marker string ) ([]SDBInstance , string , error ) {
425- instances := SDBInstances {}
412+ func (region * SRegion ) GetDBInstances (instanceId string ) ([]SDBInstance , error ) {
426413 params := map [string ]string {}
427414 idx := 1
428415 if len (instanceId ) > 0 {
429416 params [fmt .Sprintf ("Filters.Filter.%d.Name" , idx )] = "dbi-resource-id"
430417 params [fmt .Sprintf ("Filters.Filter.%d.Values.Value.1" , idx )] = instanceId
431418 }
432-
433- if len (marker ) > 0 {
434- params ["Marker" ] = marker
419+ ret := []SDBInstance {}
420+ for {
421+ part := struct {
422+ DBInstances []SDBInstance `xml:"DBInstances>DBInstance"`
423+ Marker string `xml:"Marker"`
424+ }{}
425+ err := region .rdsRequest ("DescribeDBInstances" , params , & part )
426+ if err != nil {
427+ return nil , errors .Wrap (err , "DescribeDBInstances" )
428+ }
429+ ret = append (ret , part .DBInstances ... )
430+ if len (part .DBInstances ) == 0 || len (part .Marker ) == 0 {
431+ break
432+ }
433+ params ["Marker" ] = part .Marker
435434 }
436435
437- err := region .rdsRequest ("DescribeDBInstances" , params , & instances )
438- if err != nil {
439- return nil , "" , errors .Wrap (err , "DescribeDBInstances" )
440- }
441- return instances .DBInstances , instances .Marker , nil
436+ return ret , nil
442437}
443438
444439func (region * SRegion ) GetIDBInstances () ([]cloudprovider.ICloudDBInstance , error ) {
445- idbinstances := []cloudprovider.ICloudDBInstance {}
446- instances , marker , err := region .GetDBInstances ("" , "" )
440+ ret := []cloudprovider.ICloudDBInstance {}
441+ instances , err := region .GetDBInstances ("" )
447442 if err != nil {
448443 return nil , errors .Wrap (err , "GetDBInstances" )
449444 }
450- for i := 0 ; i < len ( instances ); i ++ {
445+ for i := range instances {
451446 instances [i ].region = region
452- idbinstances = append (idbinstances , & instances [i ])
447+ ret = append (ret , & instances [i ])
453448 }
454- for len (marker ) > 0 {
455- instances , marker , err = region .GetDBInstances ("" , marker )
456- if err != nil {
457- return nil , errors .Wrap (err , "GetDBInstances" )
458- }
459- for i := 0 ; i < len (instances ); i ++ {
460- instances [i ].region = region
461- idbinstances = append (idbinstances , & instances [i ])
462- }
449+ clusters , err := region .GetDBInstanceClusters ("" )
450+ if err != nil {
451+ return nil , errors .Wrap (err , "GetDBInstanceClusters" )
463452 }
464- return idbinstances , nil
453+ for i := range clusters {
454+ clusters [i ].region = region
455+ ret = append (ret , & clusters [i ])
456+ }
457+ return ret , nil
465458}
466459
467460func (self * SRegion ) GetIDBInstanceById (id string ) (cloudprovider.ICloudDBInstance , error ) {
468- instances , _ , err := self .GetDBInstances (id , "" )
469- if err != nil {
470- return nil , errors .Wrap (err , "GetDBInstances" )
471- }
472-
473- if len (instances ) > 1 {
474- return nil , errors .Wrapf (cloudprovider .ErrDuplicateId , id )
461+ if strings .HasPrefix (id , "db-" ) {
462+ ret , err := self .GetDBInstance (id )
463+ if err != nil {
464+ return nil , errors .Wrap (err , "GetDBInstance" )
465+ }
466+ return ret , nil
475467 }
476-
477- if len ( instances ) == 0 {
478- return nil , errors .Wrapf ( cloudprovider . ErrNotFound , id )
468+ cluster , err := self . GetDBInstanceCluster ( id )
469+ if err != nil {
470+ return nil , errors .Wrap ( err , "GetDBInstanceCluster" )
479471 }
480-
481- instances [0 ].region = self
482- return & instances [0 ], nil
472+ return cluster , nil
483473}
484474
485475func (self * SRegion ) CreateIDBInstance (desc * cloudprovider.SManagedDBInstanceCreateConfig ) (cloudprovider.ICloudDBInstance , error ) {
0 commit comments