diff --git a/pkg/cloudcommon/db/virtualresource.go b/pkg/cloudcommon/db/virtualresource.go index 265f72b33d..914e116345 100644 --- a/pkg/cloudcommon/db/virtualresource.go +++ b/pkg/cloudcommon/db/virtualresource.go @@ -111,6 +111,15 @@ func (manager *SVirtualResourceBaseManager) FilterByHiddenSystemAttributes(q *sq return q } +func (model *SVirtualResourceBase) SetProjectInfo(ctx context.Context, userCred mcclient.TokenCredential, projectId, domainId string) error { + _, err := Update(model, func() error { + model.ProjectId = projectId + model.DomainId = domainId + return nil + }) + return err +} + func (manager *SVirtualResourceBaseManager) FilterBySystemAttributes(q *sqlchemy.SQuery, userCred mcclient.TokenCredential, query jsonutils.JSONObject, scope rbacutils.TRbacScope) *sqlchemy.SQuery { q = manager.SStatusStandaloneResourceBaseManager.FilterBySystemAttributes(q, userCred, query, scope) diff --git a/pkg/compute/models/dbinstance_accounts.go b/pkg/compute/models/dbinstance_accounts.go index 7bab555c16..1cf5ec52f2 100644 --- a/pkg/compute/models/dbinstance_accounts.go +++ b/pkg/compute/models/dbinstance_accounts.go @@ -206,6 +206,10 @@ func (self *SDBInstanceAccount) GetPassword() (string, error) { func (self *SDBInstanceAccount) PostCreate(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, query jsonutils.JSONObject, data jsonutils.JSONObject) { self.SVirtualResourceBase.PostCreate(ctx, userCred, ownerId, query, data) + instance, _ := self.GetDBInstance() + if instance != nil { + self.SetProjectInfo(ctx, userCred, instance.ProjectId, instance.DomainId) + } input := &api.SDBInstanceAccountCreateInput{} data.Unmarshal(input) self.savePassword(input.Password) diff --git a/pkg/compute/models/dbinstance_backups.go b/pkg/compute/models/dbinstance_backups.go index c436b0f86a..852d53c9dc 100644 --- a/pkg/compute/models/dbinstance_backups.go +++ b/pkg/compute/models/dbinstance_backups.go @@ -157,6 +157,10 @@ func (manager *SDBInstanceBackupManager) ValidateCreateData(ctx context.Context, func (self *SDBInstanceBackup) PostCreate(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, query jsonutils.JSONObject, data jsonutils.JSONObject) { self.SVirtualResourceBase.PostCreate(ctx, userCred, ownerId, query, data) + instance, _ := self.GetDBInstance() + if instance != nil { + self.SetProjectInfo(ctx, userCred, instance.ProjectId, instance.DomainId) + } self.StartDBInstanceBackupCreateTask(ctx, userCred, nil, "") } diff --git a/pkg/compute/models/dbinstance_databases.go b/pkg/compute/models/dbinstance_databases.go index df10f569cc..e244e42c00 100644 --- a/pkg/compute/models/dbinstance_databases.go +++ b/pkg/compute/models/dbinstance_databases.go @@ -150,14 +150,22 @@ func (manager *SDBInstanceDatabaseManager) ValidateCreateData(ctx context.Contex } func (self *SDBInstanceDatabase) PostCreate(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, query jsonutils.JSONObject, data jsonutils.JSONObject) { + self.SVirtualResourceBase.PostCreate(ctx, userCred, ownerId, query, data) + instance, _ := self.GetDBInstance() + if instance != nil { + self.SetProjectInfo(ctx, userCred, instance.ProjectId, instance.DomainId) + } + self.StartDBInstanceDatabaseCreateTask(ctx, userCred, data.(*jsonutils.JSONDict), "") +} + +func (self *SDBInstanceDatabase) StartDBInstanceDatabaseCreateTask(ctx context.Context, userCred mcclient.TokenCredential, params *jsonutils.JSONDict, parentTaskId string) error { self.SetStatus(userCred, api.DBINSTANCE_DATABASE_CREATING, "") - params := data.(*jsonutils.JSONDict) - task, err := taskman.TaskManager.NewTask(ctx, "DBInstanceDatabaseCreateTask", self, userCred, params, "", "", nil) + task, err := taskman.TaskManager.NewTask(ctx, "DBInstanceDatabaseCreateTask", self, userCred, params, parentTaskId, "", nil) if err != nil { - log.Errorf("DBInstanceDatabaseCreateTask newTask error %s", err) - return + return errors.Wrap(err, "NewTask") } task.ScheduleRun(nil) + return nil } func (self *SDBInstanceDatabase) GetDBInstancePrivileges() ([]SDBInstancePrivilege, error) {