Skip to content

Commit a05f61b

Browse files
authored
Merge pull request #1465 from ioito/hotfix/qx-aws-cluster-rds
fix(aws): cluster rds sync
2 parents 45526ea + d8a829e commit a05f61b

File tree

4 files changed

+371
-58
lines changed

4 files changed

+371
-58
lines changed

pkg/apis/compute/dbinstance_const.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,8 @@ const (
106106
AWS_DBINSTANCE_CATEGORY_EXPRESS_EDITION = "Express Edition"
107107
AWS_DBINSTANCE_CATEGORY_STANDARD_EDITION = "Standard Edition"
108108
AWS_DBINSTANCE_CATEGORY_WEB_EDITION = "Web Edition"
109+
110+
AWS_DBINSTANCE_CATEGORY_CLUSTER = "Cluster"
109111
// Oracle
110112
AWS_DBINSTANCE_CATEGORY_STANDARD_EDITION_TWO = "Standard Edition Two"
111113

pkg/multicloud/aws/dbinstance.go

Lines changed: 45 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -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-
127122
func (rds *SDBInstance) GetName() string {
128123
return rds.DBInstanceIdentifier
129124
}
@@ -297,24 +292,17 @@ func (rds *SDBInstance) Refresh() error {
297292
}
298293

299294
func (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

320308
func (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

444439
func (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

467460
func (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

485475
func (self *SRegion) CreateIDBInstance(desc *cloudprovider.SManagedDBInstanceCreateConfig) (cloudprovider.ICloudDBInstance, error) {

0 commit comments

Comments
 (0)