mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-24 16:03:43 +08:00
Merge pull request #4650 from ioito/hotfix/qx-rds-account-fix
fix: 避免创建rds account, database后未设置exteranl_id
This commit is contained in:
@@ -73,14 +73,6 @@ func (self *DBInstanceAccountCreateTask) CreateDBInstanceAccount(ctx context.Con
|
||||
return
|
||||
}
|
||||
|
||||
input := api.SDBInstanceAccountCreateInput{}
|
||||
self.GetParams().Unmarshal(&input)
|
||||
if len(input.Privileges) == 0 {
|
||||
account.SetStatus(self.UserCred, api.DBINSTANCE_USER_AVAILABLE, "")
|
||||
self.SetStageComplete(ctx, nil)
|
||||
return
|
||||
}
|
||||
|
||||
iAccounts, err := iRds.GetIDBInstanceAccounts()
|
||||
if err != nil {
|
||||
msg := fmt.Sprintf("failed to found accounts from cloud dbinstance error: %v", err)
|
||||
@@ -108,6 +100,16 @@ func (self *DBInstanceAccountCreateTask) CreateDBInstanceAccount(ctx context.Con
|
||||
return
|
||||
}
|
||||
|
||||
db.SetExternalId(account, self.UserCred, iAccount.GetGlobalId())
|
||||
|
||||
input := api.SDBInstanceAccountCreateInput{}
|
||||
self.GetParams().Unmarshal(&input)
|
||||
if len(input.Privileges) == 0 {
|
||||
account.SetStatus(self.UserCred, api.DBINSTANCE_USER_AVAILABLE, "")
|
||||
self.SetStageComplete(ctx, nil)
|
||||
return
|
||||
}
|
||||
|
||||
account.SetStatus(self.UserCred, api.DBINSTANCE_USER_GRANT_PRIVILEGE, "")
|
||||
for _, privilege := range input.Privileges {
|
||||
err = iAccount.GrantPrivilege(privilege.Database, privilege.Privilege)
|
||||
|
||||
@@ -19,6 +19,7 @@ import (
|
||||
"fmt"
|
||||
|
||||
"yunion.io/x/jsonutils"
|
||||
"yunion.io/x/log"
|
||||
|
||||
api "yunion.io/x/onecloud/pkg/apis/compute"
|
||||
"yunion.io/x/onecloud/pkg/cloudcommon/db"
|
||||
@@ -61,6 +62,35 @@ func (self *DBInstanceCreateTask) OnCreateDBInstanceComplete(ctx context.Context
|
||||
dbinstance := obj.(*models.SDBInstance)
|
||||
logclient.AddActionLogWithStartable(self, dbinstance, logclient.ACT_CREATE, nil, self.UserCred, true)
|
||||
|
||||
accounts, err := dbinstance.GetDBInstanceAccounts()
|
||||
if err != nil {
|
||||
log.Errorf("failed to get dbinstance %s account error: %v", dbinstance.Name, err)
|
||||
}
|
||||
|
||||
if len(accounts) > 0 {
|
||||
iRds, err := dbinstance.GetIDBInstance()
|
||||
if err != nil {
|
||||
log.Errorf("failed to found dbinstance %s error: %v", dbinstance.Name, err)
|
||||
} else {
|
||||
iAccounts, err := iRds.GetIDBInstanceAccounts()
|
||||
if err != nil {
|
||||
log.Errorf("failed to get accounts from cloud dbinstance %s error: %v", dbinstance.Name, err)
|
||||
}
|
||||
externalIds := map[string]string{}
|
||||
for _, iAccount := range iAccounts {
|
||||
externalIds[iAccount.GetName()] = iAccount.GetGlobalId()
|
||||
}
|
||||
for i := range accounts {
|
||||
externalId, ok := externalIds[accounts[i].Name]
|
||||
if !ok {
|
||||
log.Errorf("failed to get dbinstance account %s from cloud dbinstance for set externalId", accounts[i].Name)
|
||||
} else {
|
||||
db.SetExternalId(&accounts[i], self.UserCred, externalId)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
self.SetStage("OnSyncDBInstanceStatusComplete", nil)
|
||||
dbinstance.StartDBInstanceSyncStatusTask(ctx, self.UserCred, nil, self.GetTaskId())
|
||||
}
|
||||
|
||||
@@ -74,6 +74,35 @@ func (self *DBInstanceDatabaseCreateTask) CreateDBInstanceDatabase(ctx context.C
|
||||
return
|
||||
}
|
||||
|
||||
iDatabases, err := iRds.GetIDBInstanceDatabases()
|
||||
if err != nil {
|
||||
msg := fmt.Sprintf("failed to found databases from cloud dbinstance error: %v", err)
|
||||
db.OpsLog.LogEvent(database, db.ACT_CREATE, msg, self.GetUserCred())
|
||||
logclient.AddActionLogWithStartable(self, database, logclient.ACT_CREATE, msg, self.UserCred, false)
|
||||
database.SetStatus(self.UserCred, api.DBINSTANCE_UNKNOWN, "")
|
||||
self.SetStageComplete(ctx, nil)
|
||||
return
|
||||
}
|
||||
|
||||
var iDatabase cloudprovider.ICloudDBInstanceDatabase = nil
|
||||
for i := range iDatabases {
|
||||
if iDatabases[i].GetName() == database.Name {
|
||||
iDatabase = iDatabases[i]
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if iDatabase == nil {
|
||||
msg := fmt.Sprintf("failed to found database %s from cloud dbinstance", database.Name)
|
||||
db.OpsLog.LogEvent(database, db.ACT_CREATE, msg, self.GetUserCred())
|
||||
logclient.AddActionLogWithStartable(self, database, logclient.ACT_CREATE, msg, self.UserCred, false)
|
||||
database.SetStatus(self.UserCred, api.DBINSTANCE_UNKNOWN, "")
|
||||
self.SetStageComplete(ctx, nil)
|
||||
return
|
||||
}
|
||||
|
||||
db.SetExternalId(database, self.UserCred, iDatabase.GetGlobalId())
|
||||
|
||||
input := api.SDBInstanceDatabaseCreateInput{}
|
||||
self.GetParams().Unmarshal(&input)
|
||||
if len(input.Accounts) == 0 {
|
||||
|
||||
Reference in New Issue
Block a user