| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431 |
- // Copyright 2019 Yunion
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
- package db
- import (
- "context"
- "net/http"
- "time"
- "yunion.io/x/jsonutils"
- "yunion.io/x/pkg/object"
- "yunion.io/x/pkg/util/rbacscope"
- "yunion.io/x/sqlchemy"
- "yunion.io/x/onecloud/pkg/apis"
- "yunion.io/x/onecloud/pkg/appsrv"
- "yunion.io/x/onecloud/pkg/cloudcommon/db/lockman"
- "yunion.io/x/onecloud/pkg/mcclient"
- "yunion.io/x/onecloud/pkg/util/splitable"
- "yunion.io/x/onecloud/pkg/util/stringutils2"
- )
- type IModelManager interface {
- lockman.ILockedClass
- object.IObject
- IsStandaloneManager() bool
- GetContextManagers() [][]IModelManager
- GetIModelManager() IModelManager
- GetMutableInstance(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) IModelManager
- GetImmutableInstance(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) IModelManager
- // Table() *sqlchemy.STable
- TableSpec() ITableSpec
- // Keyword() string
- // KeywordPlural() string
- Alias() string
- AliasPlural() string
- SetAlias(alias string, aliasPlural string)
- HasName() bool
- ValidateName(name string) error
- EnableGenerateName() bool
- // list hooks
- // AllowListItems(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) bool
- ValidateListConditions(ctx context.Context, userCred mcclient.TokenCredential, query *jsonutils.JSONDict) (*jsonutils.JSONDict, error)
- // ListItemFilter dynamic called by dispatcher
- // ListItemFilter(ctx context.Context, q *sqlchemy.SQuery, userCred mcclient.TokenCredential, query jsonutils.JSONObject) (*sqlchemy.SQuery, error)
- CustomizeFilterList(ctx context.Context, q *sqlchemy.SQuery, userCred mcclient.TokenCredential, query jsonutils.JSONObject) (*CustomizeListFilters, error)
- ExtraSearchConditions(ctx context.Context, q *sqlchemy.SQuery, like string) []sqlchemy.ICondition
- GetExportExtraKeys(ctx context.Context, keys stringutils2.SSortedStrings, rowMap map[string]string) *jsonutils.JSONDict
- ListItemExportKeys(ctx context.Context, q *sqlchemy.SQuery, userCred mcclient.TokenCredential, keys stringutils2.SSortedStrings) (*sqlchemy.SQuery, error)
- // OrderByExtraFields dynmically called by dispatcher
- // OrderByExtraFields(ctx context.Context, q *sqlchemy.SQuery, userCred mcclient.TokenCredential, query jsonutils.JSONObject) (*sqlchemy.SQuery, error)
- NewQuery(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, useRawQuery bool) *sqlchemy.SQuery
- // fetch hook
- Query(val ...string) *sqlchemy.SQuery
- // RawQuery(val ...string) *sqlchemy.SQuery
- FilterById(q *sqlchemy.SQuery, idStr string) *sqlchemy.SQuery
- FilterByNotId(q *sqlchemy.SQuery, idStr string) *sqlchemy.SQuery
- FilterByName(q *sqlchemy.SQuery, name string) *sqlchemy.SQuery
- FilterByOwnerProvider
- FilterBySystemAttributes(q *sqlchemy.SQuery, userCred mcclient.TokenCredential, query jsonutils.JSONObject, scope rbacscope.TRbacScope) *sqlchemy.SQuery
- FilterByHiddenSystemAttributes(q *sqlchemy.SQuery, userCred mcclient.TokenCredential, query jsonutils.JSONObject, scope rbacscope.TRbacScope) *sqlchemy.SQuery
- FilterByUniqValues(q *sqlchemy.SQuery, uniqValues jsonutils.JSONObject) *sqlchemy.SQuery
- // GetOwnerId(userCred mcclient.IIdentityProvider) mcclient.IIdentityProvider
- // RawFetchById(idStr string) (IModel, error)
- FetchById(idStr string) (IModel, error)
- FetchByName(ctx context.Context, userCred mcclient.IIdentityProvider, idStr string) (IModel, error)
- FetchByIdOrName(ctx context.Context, userCred mcclient.IIdentityProvider, idStr string) (IModel, error)
- // create hooks
- // AllowCreateItem(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) bool
- // BatchCreateValidateCreateData(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, query jsonutils.JSONObject, data *jsonutils.JSONDict) (*jsonutils.JSONDict, error)
- // ValidateCreateData dynamic called by dispatcher
- // ValidateCreateData(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, query jsonutils.JSONObject, data *jsonutils.JSONDict) (*jsonutils.JSONDict, error)
- OnCreateComplete(ctx context.Context, items []IModel, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, query jsonutils.JSONObject, data []jsonutils.JSONObject)
- BatchPreValidate(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider,
- query jsonutils.JSONObject, data *jsonutils.JSONDict, count int) error
- OnCreateFailed(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, query jsonutils.JSONObject, data jsonutils.JSONObject) error
- // allow perform action
- PerformAction(ctx context.Context, userCred mcclient.TokenCredential, action string, query jsonutils.JSONObject, data jsonutils.JSONObject) (jsonutils.JSONObject, error)
- // DoCreate(ctx context.Context, userCred mcclient.TokenCredential, kwargs jsonutils.JSONObject, data jsonutils.JSONObject, realManager IModelManager) (IModel, error)
- InitializeData() error
- CustomizeHandlerInfo(info *appsrv.SHandlerInfo)
- SetHandlerProcessTimeout(info *appsrv.SHandlerInfo, r *http.Request) time.Duration
- FetchCreateHeaderData(ctx context.Context, header http.Header) (jsonutils.JSONObject, error)
- FetchUpdateHeaderData(ctx context.Context, header http.Header) (jsonutils.JSONObject, error)
- IsCustomizedGetDetailsBody() bool
- ListSkipLog(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) bool
- GetSkipLog(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) bool
- // list extend colums hook
- // FetchCustomizeColumns dynamically called by dispatcher
- // FetchCustomizeColumns(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, objs []interface{}, fields stringutils2.SSortedStrings, isList bool) []*jsonutils.JSONDict
- // fetch owner Id from query when create resource
- FetchOwnerId(ctx context.Context, data jsonutils.JSONObject) (mcclient.IIdentityProvider, error)
- FetchUniqValues(ctx context.Context, data jsonutils.JSONObject) jsonutils.JSONObject
- /* name uniqueness scope, system/domain/project, default is system */
- NamespaceScope() rbacscope.TRbacScope
- ResourceScope() rbacscope.TRbacScope
- // 如果error为非空,说明没有匹配的field,如果为空,说明匹配上了
- QueryDistinctExtraField(q *sqlchemy.SQuery, field string) (*sqlchemy.SQuery, error)
- QueryDistinctExtraFields(q *sqlchemy.SQuery, resource string, fields []string) (*sqlchemy.SQuery, error)
- GetPagingConfig() *SPagingConfig
- GetI18N(ctx context.Context, idstr string, resObj jsonutils.JSONObject) *jsonutils.JSONDict
- GetSplitTable() *splitable.SSplitTableSpec
- CreateByInsertOrUpdate() bool
- CustomizedTotalCount(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, totalQ *sqlchemy.SQuery) (int, jsonutils.JSONObject, error)
- PrepareQueryContext(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) context.Context
- RegisterExtraHook(eh IModelManagerExtraHook)
- GetExtraHook() IModelManagerExtraHook
- }
- type IModelManagerExtraHook interface {
- AfterPostCreate(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, model IModel, query jsonutils.JSONObject, data jsonutils.JSONObject) error
- AfterPostUpdate(ctx context.Context, userCred mcclient.TokenCredential, model IModel, query jsonutils.JSONObject, data jsonutils.JSONObject) error
- AfterPostDelete(ctx context.Context, userCred mcclient.TokenCredential, model IModel, query jsonutils.JSONObject) error
- }
- type IModel interface {
- lockman.ILockedObject
- object.IObject
- GetName() string
- GetUpdateVersion() int
- GetUpdatedAt() time.Time
- GetDeleted() bool
- KeywordPlural() string
- GetModelManager() IModelManager
- SetModelManager(IModelManager, IModel)
- GetIModel() IModel
- GetShortDesc(ctx context.Context) *jsonutils.JSONDict
- // list hooks
- //GetCustomizeColumns(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) *jsonutils.JSONDict
- // get hooks
- GetExtraDetailsHeaders(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) map[string]string
- // before create hooks
- CustomizeCreate(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, query jsonutils.JSONObject, data jsonutils.JSONObject) error
- // after create hooks
- PostCreate(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, query jsonutils.JSONObject, data jsonutils.JSONObject)
- // allow perform action
- PerformAction(ctx context.Context, userCred mcclient.TokenCredential, action string, query jsonutils.JSONObject, data jsonutils.JSONObject) (jsonutils.JSONObject, error)
- PreCheckPerformAction(ctx context.Context, userCred mcclient.TokenCredential, action string, query jsonutils.JSONObject, data jsonutils.JSONObject) error
- // update hooks
- ValidateUpdateCondition(ctx context.Context) error
- // AllowUpdateItem(ctx context.Context, userCred mcclient.TokenCredential) bool
- // ValidateUpdateData(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data *jsonutils.JSONDict) (*jsonutils.JSONDict, error)
- PreUpdate(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject)
- PostUpdate(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject)
- UpdateInContext(ctx context.Context, userCred mcclient.TokenCredential, ctxObjs []IModel, query jsonutils.JSONObject, data jsonutils.JSONObject) (jsonutils.JSONObject, error)
- // delete hooks
- // AllowDeleteItem(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) bool
- // ValidateDeleteCondition(ctx context.Context, info jsonutils.JSONObject) error
- // CustomizeDelete(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) error
- PreDelete(ctx context.Context, userCred mcclient.TokenCredential)
- MarkDelete() error
- Delete(ctx context.Context, userCred mcclient.TokenCredential) error
- PostDelete(ctx context.Context, userCred mcclient.TokenCredential)
- DeleteInContext(ctx context.Context, userCred mcclient.TokenCredential, ctxObjs []IModel, query jsonutils.JSONObject, data jsonutils.JSONObject) (jsonutils.JSONObject, error)
- GetOwnerId() mcclient.IIdentityProvider
- GetUniqValues() jsonutils.JSONObject
- IsSharable(reqCred mcclient.IIdentityProvider) bool
- CustomizedGetDetailsBody(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject) (jsonutils.JSONObject, error)
- MarkDeletePreventionOn()
- MarkDeletePreventionOff()
- GetUsages() []IUsage
- GetI18N(ctx context.Context) *jsonutils.JSONDict
- }
- type IResourceModelManager interface {
- IModelManager
- GetIResourceModelManager() IResourceModelManager
- }
- type IResourceModel interface {
- IModel
- GetIResourceModel() IResourceModel
- }
- type IJointModelManager interface {
- IResourceModelManager
- GetIJointModelManager() IJointModelManager
- GetMasterManager() IStandaloneModelManager
- GetSlaveManager() IStandaloneModelManager
- GetMasterFieldName() string
- GetSlaveFieldName() string
- // FetchByIds(masterId string, slaveId string, query jsonutils.JSONObject) (IJointModel, error)
- FilterByParams(q *sqlchemy.SQuery, params jsonutils.JSONObject) *sqlchemy.SQuery
- // AllowListDescendent(ctx context.Context, userCred mcclient.TokenCredential, model IStandaloneModel, query jsonutils.JSONObject) bool
- // AllowAttach(ctx context.Context, userCred mcclient.TokenCredential, master IStandaloneModel, slave IStandaloneModel) bool
- }
- type IJointModel interface {
- IResourceModel
- GetJointModelManager() IJointModelManager
- GetIJointModel() IJointModel
- // AllowDetach(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, data jsonutils.JSONObject) bool
- Detach(ctx context.Context, userCred mcclient.TokenCredential) error
- // AllowGetJointDetails(ctx context.Context, userCred mcclient.TokenCredential, query jsonutils.JSONObject, item IJointModel) bool
- // AllowUpdateJointItem(ctx context.Context, userCred mcclient.TokenCredential, item IJointModel) bool
- }
- type IMetadataBaseModelManager interface {
- GetMetadataHiddenKeys() []string
- }
- type IMetadataBaseModel interface {
- OnMetadataUpdated(ctx context.Context, userCred mcclient.TokenCredential)
- }
- type IStandaloneModelManager interface {
- IResourceModelManager
- GetIStandaloneModelManager() IStandaloneModelManager
- // GenerateName(ownerProjId string, hint string) string
- // ValidateName(name string) error
- // IsNewNameUnique(name string, projectId string) bool
- // FetchByExternalId(idStr string) (IStandaloneModel, error)
- IMetadataBaseModelManager
- }
- type IStandaloneModel interface {
- IResourceModel
- // IsAlterNameUnique(name string, projectId string) bool
- // GetExternalId() string
- SetName(name string)
- MarkPendingDeleted()
- CancelPendingDeleted()
- StandaloneModelManager() IStandaloneModelManager
- GetIStandaloneModel() IStandaloneModel
- ClearSchedDescCache() error
- GetMetadata(ctx context.Context, key string, userCred mcclient.TokenCredential) string
- GetMetadataJson(ctx context.Context, key string, userCred mcclient.TokenCredential) jsonutils.JSONObject
- SetMetadata(ctx context.Context, key string, value interface{}, userCred mcclient.TokenCredential) error
- SetAllMetadata(ctx context.Context, dictstore map[string]interface{}, userCred mcclient.TokenCredential) error
- SetUserMetadataValues(ctx context.Context, dictstore map[string]string, userCred mcclient.TokenCredential) error
- SetUserMetadataAll(ctx context.Context, dictstore map[string]string, userCred mcclient.TokenCredential) error
- SetCloudMetadataAll(ctx context.Context, dictstore map[string]string, userCred mcclient.TokenCredential, readOnly bool) error
- SetOrganizationMetadataAll(ctx context.Context, dictstore map[string]string, userCred mcclient.TokenCredential) error
- SetSysCloudMetadataAll(ctx context.Context, dictstore map[string]string, userCred mcclient.TokenCredential, readOnly bool) error
- RemoveMetadata(ctx context.Context, key string, userCred mcclient.TokenCredential) error
- RemoveAllMetadata(ctx context.Context, userCred mcclient.TokenCredential) error
- GetAllMetadata(ctx context.Context, userCred mcclient.TokenCredential) (map[string]string, error)
- GetAllClassMetadata() (map[string]string, error)
- IsShared() bool
- IMetadataBaseModel
- }
- type IDomainLevelModelManager interface {
- IStandaloneModelManager
- GetIDomainLevelModelManager() IDomainLevelModelManager
- GetResourceCount() ([]SScopeResourceCount, error)
- }
- type IDomainLevelModel interface {
- IStandaloneModel
- IsOwner(userCred mcclient.TokenCredential) bool
- SyncCloudDomainId(userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider)
- GetIDomainLevelModel() IDomainLevelModel
- IOwnerResourceBaseModel
- }
- type IInfrasModelManager interface {
- IDomainLevelModelManager
- GetIInfrasModelManager() IInfrasModelManager
- }
- type IInfrasModel interface {
- IDomainLevelModel
- ISharableBase
- GetIInfrasModel() IInfrasModel
- }
- type IVirtualModelManager interface {
- IStandaloneModelManager
- GetIVirtualModelManager() IVirtualModelManager
- GetResourceCount() ([]SScopeResourceCount, error)
- }
- type IUserModelManager interface {
- IStandaloneModelManager
- GetIUserModelManager() IUserModelManager
- GetResourceCount() ([]SScopeResourceCount, error)
- }
- type IVirtualModel interface {
- IStandaloneModel
- IPendingDeletable
- IsOwner(userCred mcclient.TokenCredential) bool
- // IsAdmin(userCred mcclient.TokenCredential) bool
- SetProjectSrc(apis.TOwnerSource)
- SyncCloudProjectId(userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider)
- GetIVirtualModel() IVirtualModel
- IOwnerResourceBaseModel
- }
- type ISharableVirtualModelManager interface {
- IVirtualModelManager
- GetISharableVirtualModelManager() ISharableVirtualModelManager
- }
- type ISharableVirtualModel interface {
- IVirtualModel
- ISharableBase
- GetISharableVirtualModel() ISharableVirtualModel
- GetSharedProjects() []string
- }
- type IAdminSharableVirtualModelManager interface {
- ISharableVirtualModelManager
- GetIAdminSharableVirtualModelManager() IAdminSharableVirtualModelManager
- GetRecordsSeparator() string
- GetRecordsLimit() int
- ParseInputInfo(data *jsonutils.JSONDict) ([]string, error)
- }
- type IAdminSharableVirtualModel interface {
- ISharableVirtualModel
- GetInfo() []string
- GetIAdminSharableVirtualModel() IAdminSharableVirtualModel
- }
- type IStatusStandaloneModel interface {
- IStandaloneModel
- IStatusBase
- }
- type IStatusDomainLevelModel interface {
- IDomainLevelModel
- IStatusBase
- }
- type IStatusInfrasModel interface {
- IInfrasModel
- IStatusBase
- }
|