fix(region): support cephfs (#19550)

This commit is contained in:
屈轩
2024-02-29 14:59:12 +08:00
committed by GitHub
parent 4a9d94d9e0
commit 0759020dfe
7 changed files with 65 additions and 25 deletions
+1
View File
@@ -61,6 +61,7 @@ func init() {
cmd.CreateWithKeyword("create-cucloud", &options.SCucloudCloudAccountCreateOptions{})
cmd.CreateWithKeyword("create-qingcloud", &options.SQingCloudCloudAccountCreateOptions{})
cmd.CreateWithKeyword("create-oracle", &options.SOracleCloudAccountCreateOptions{})
cmd.CreateWithKeyword("create-cephfs", &options.SCephFSCloudAccountCreateOptions{})
cmd.UpdateWithKeyword("update-vmware", &options.SVMwareCloudAccountUpdateOptions{})
cmd.UpdateWithKeyword("update-aliyun", &options.SAliyunCloudAccountUpdateOptions{})
+3 -3
View File
@@ -44,7 +44,7 @@ const (
)
type FileSystemListInput struct {
apis.StatusInfrasResourceBaseListInput
apis.VirtualResourceListInput
apis.ExternalizedResourceBaseListInput
ManagedResourceListInput
@@ -52,7 +52,7 @@ type FileSystemListInput struct {
}
type FileSystemCreateInput struct {
apis.StatusInfrasResourceBaseCreateInput
apis.VirtualResourceCreateInput
// 协议类型
// enum: NFS, SMB, CPFS
Protocol string `json:"protocol"`
@@ -101,7 +101,7 @@ type FileSystemSyncstatusInput struct {
}
type FileSystemDetails struct {
apis.StatusInfrasResourceBaseDetails
apis.VirtualResourceDetails
ManagedResourceInfo
CloudregionResourceInfo
+6
View File
@@ -2430,6 +2430,12 @@ func syncOnPremiseCloudProviderInfo(
}
}
if cloudprovider.IsSupportNAS(driver) && syncRange.NeedSyncResource(cloudprovider.CLOUD_CAPABILITY_NAS) {
if syncRange.IsNotSkipSyncResource(FileSystemManager) {
syncRegionFileSystems(ctx, userCred, syncResults, provider, localRegion, iregion, syncRange)
}
}
var storageCachePairs []sStoragecacheSyncPair
if cloudprovider.IsSupportCompute(driver) && syncRange.NeedSyncResource(cloudprovider.CLOUD_CAPABILITY_COMPUTE) {
remoteVpcs, err := iregion.GetIVpcs()
+35 -20
View File
@@ -42,7 +42,7 @@ import (
)
type SFileSystemManager struct {
db.SStatusInfrasResourceBaseManager
db.SVirtualResourceBaseManager
db.SExternalizedResourceBaseManager
SManagedResourceBaseManager
SCloudregionResourceBaseManager
@@ -55,7 +55,7 @@ var FileSystemManager *SFileSystemManager
func init() {
FileSystemManager = &SFileSystemManager{
SStatusInfrasResourceBaseManager: db.NewStatusInfrasResourceBaseManager(
SVirtualResourceBaseManager: db.NewVirtualResourceBaseManager(
SFileSystem{},
"file_systems_tbl",
"file_system",
@@ -66,7 +66,7 @@ func init() {
}
type SFileSystem struct {
db.SStatusInfrasResourceBase
db.SVirtualResourceBase
db.SExternalizedResourceBase
SManagedResourceBase
SBillingResourceBase
@@ -111,9 +111,9 @@ func (manager *SFileSystemManager) ListItemFilter(
query api.FileSystemListInput,
) (*sqlchemy.SQuery, error) {
var err error
q, err = manager.SStatusInfrasResourceBaseManager.ListItemFilter(ctx, q, userCred, query.StatusInfrasResourceBaseListInput)
q, err = manager.SVirtualResourceBaseManager.ListItemFilter(ctx, q, userCred, query.VirtualResourceListInput)
if err != nil {
return nil, errors.Wrapf(err, "SStatusInfrasResourceBaseManager.ListItemFilter")
return nil, errors.Wrapf(err, "SVirtualResourceBaseManager.ListItemFilter")
}
q, err = manager.SExternalizedResourceBaseManager.ListItemFilter(ctx, q, userCred, query.ExternalizedResourceBaseListInput)
if err != nil {
@@ -180,7 +180,7 @@ func (man *SFileSystemManager) ValidateCreateData(ctx context.Context, userCred
input.ExpiredAt = billingCycle.EndAt(tm)
}
input.StatusInfrasResourceBaseCreateInput, err = man.SStatusInfrasResourceBaseManager.ValidateCreateData(ctx, userCred, ownerId, query, input.StatusInfrasResourceBaseCreateInput)
input.VirtualResourceCreateInput, err = man.SVirtualResourceBaseManager.ValidateCreateData(ctx, userCred, ownerId, query, input.VirtualResourceCreateInput)
if err != nil {
return input, err
}
@@ -188,7 +188,7 @@ func (man *SFileSystemManager) ValidateCreateData(ctx context.Context, userCred
}
func (fileSystem *SFileSystem) PostCreate(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, query jsonutils.JSONObject, data jsonutils.JSONObject) {
fileSystem.SStatusInfrasResourceBase.PostCreate(ctx, userCred, ownerId, query, data)
fileSystem.SVirtualResourceBase.PostCreate(ctx, userCred, ownerId, query, data)
fileSystem.StartCreateTask(ctx, userCred, jsonutils.GetAnyString(data, []string{"network_id"}), "")
}
@@ -219,15 +219,15 @@ func (manager SFileSystemManager) FetchCustomizeColumns(
isList bool,
) []api.FileSystemDetails {
rows := make([]api.FileSystemDetails, len(objs))
stdRows := manager.SStatusInfrasResourceBaseManager.FetchCustomizeColumns(ctx, userCred, query, objs, fields, isList)
virtRows := manager.SVirtualResourceBaseManager.FetchCustomizeColumns(ctx, userCred, query, objs, fields, isList)
regionRows := manager.SCloudregionResourceBaseManager.FetchCustomizeColumns(ctx, userCred, query, objs, fields, isList)
mRows := manager.SManagedResourceBaseManager.FetchCustomizeColumns(ctx, userCred, query, objs, fields, isList)
zoneIds := make([]string, len(objs))
for i := range rows {
rows[i] = api.FileSystemDetails{
StatusInfrasResourceBaseDetails: stdRows[i],
CloudregionResourceInfo: regionRows[i],
ManagedResourceInfo: mRows[i],
VirtualResourceDetails: virtRows[i],
CloudregionResourceInfo: regionRows[i],
ManagedResourceInfo: mRows[i],
}
nas := objs[i].(*SFileSystem)
zoneIds[i] = nas.ZoneId
@@ -249,9 +249,9 @@ func (manager *SFileSystemManager) ListItemExportKeys(ctx context.Context,
keys stringutils2.SSortedStrings,
) (*sqlchemy.SQuery, error) {
var err error
q, err = manager.SStatusInfrasResourceBaseManager.ListItemExportKeys(ctx, q, userCred, keys)
q, err = manager.SVirtualResourceBaseManager.ListItemExportKeys(ctx, q, userCred, keys)
if err != nil {
return nil, errors.Wrap(err, "SStatusInfrasResourceBaseManager.ListItemExportKeys")
return nil, errors.Wrap(err, "SVirtualResourceBaseManager.ListItemExportKeys")
}
q, err = manager.SCloudregionResourceBaseManager.ListItemExportKeys(ctx, q, userCred, keys)
if err != nil {
@@ -263,7 +263,7 @@ func (manager *SFileSystemManager) ListItemExportKeys(ctx context.Context,
func (manager *SFileSystemManager) QueryDistinctExtraField(q *sqlchemy.SQuery, field string) (*sqlchemy.SQuery, error) {
var err error
q, err = manager.SStatusInfrasResourceBaseManager.QueryDistinctExtraField(q, field)
q, err = manager.SVirtualResourceBaseManager.QueryDistinctExtraField(q, field)
if err == nil {
return q, nil
}
@@ -287,9 +287,9 @@ func (manager *SFileSystemManager) OrderByExtraFields(
) (*sqlchemy.SQuery, error) {
var err error
q, err = manager.SStatusInfrasResourceBaseManager.OrderByExtraFields(ctx, q, userCred, query.StatusInfrasResourceBaseListInput)
q, err = manager.SVirtualResourceBaseManager.OrderByExtraFields(ctx, q, userCred, query.VirtualResourceListInput)
if err != nil {
return nil, errors.Wrap(err, "SStatusInfrasResourceBaseManager.OrderByExtraFields")
return nil, errors.Wrap(err, "SVirtualResourceBaseManager.OrderByExtraFields")
}
q, err = manager.SManagedResourceBaseManager.OrderByExtraFields(ctx, q, userCred, query.ManagedResourceListInput)
if err != nil {
@@ -440,14 +440,14 @@ func (fileSystem *SFileSystem) RealDelete(ctx context.Context, userCred mcclient
return errors.Wrapf(err, "mount target %s real delete", mts[i].DomainName)
}
}
return fileSystem.SInfrasResourceBase.Delete(ctx, userCred)
return fileSystem.SVirtualResourceBase.Delete(ctx, userCred)
}
func (fileSystem *SFileSystem) ValidateDeleteCondition(ctx context.Context, info jsonutils.JSONObject) error {
if fileSystem.DisableDelete.IsTrue() {
return httperrors.NewInvalidStatusError("FileSystem is locked, cannot delete")
}
return fileSystem.SStatusInfrasResourceBase.ValidateDeleteCondition(ctx, nil)
return fileSystem.SVirtualResourceBase.ValidateDeleteCondition(ctx, nil)
}
func (fileSystem *SFileSystem) SyncAllWithCloudFileSystem(ctx context.Context, userCred mcclient.TokenCredential, fs cloudprovider.ICloudFileSystem) error {
@@ -490,8 +490,13 @@ func (fileSystem *SFileSystem) SyncWithCloudFileSystem(ctx context.Context, user
})
}
if account := fileSystem.GetCloudaccount(); account != nil {
syncMetadata(ctx, userCred, fileSystem, fs, account.ReadOnly)
syncVirtualResourceMetadata(ctx, userCred, fileSystem, fs, account.ReadOnly)
}
if provider := fileSystem.GetCloudprovider(); provider != nil {
SyncCloudProject(ctx, userCred, fileSystem, provider.GetOwnerId(), fs, provider)
}
return nil
}
@@ -544,6 +549,13 @@ func (region *SCloudregion) newFromCloudFileSystem(ctx context.Context, userCred
Obj: &nas,
Action: notifyclient.ActionSyncCreate,
})
if account, _ := provider.GetCloudaccount(); account != nil {
syncVirtualResourceMetadata(ctx, userCred, fileSystem, fs, account.ReadOnly)
}
SyncCloudProject(ctx, userCred, fileSystem, provider.GetOwnerId(), fs, provider)
return fileSystem, nil
}
@@ -570,6 +582,9 @@ func (fileSystem *SFileSystem) GetIRegion(ctx context.Context) (cloudprovider.IC
if err != nil {
return nil, errors.Wrapf(err, "fileSystem.GetDriver")
}
if provider.GetFactory().IsOnPremise() {
return provider.GetOnPremiseIRegion()
}
region, err := fileSystem.GetRegion()
if err != nil {
return nil, errors.Wrapf(err, "fileSystem.GetRegion")
@@ -657,7 +672,7 @@ func (fileSystem *SFileSystem) OnMetadataUpdated(ctx context.Context, userCred m
}
func (fileSystem *SFileSystem) GetShortDesc(ctx context.Context) *jsonutils.JSONDict {
desc := fileSystem.SStatusInfrasResourceBase.GetShortDesc(ctx)
desc := fileSystem.SVirtualResourceBase.GetShortDesc(ctx)
region, _ := fileSystem.GetRegion()
provider := fileSystem.GetCloudprovider()
info := MakeCloudProviderInfo(region, nil, provider)
+1 -1
View File
@@ -98,7 +98,7 @@ func (self *FileSystemCreateTask) OnInit(ctx context.Context, obj db.IStandalone
iFs, err := iRegion.CreateICloudFileSystem(opts)
if err != nil {
self.taskFailed(ctx, fs, errors.Wrapf(err, "iRegion.CreaetICloudFileSystem"))
self.taskFailed(ctx, fs, errors.Wrapf(err, "iRegion.CreateICloudFileSystem"))
return
}
db.SetExternalId(fs, self.GetUserCred(), iFs.GetGlobalId())
+18
View File
@@ -1510,3 +1510,21 @@ func (opts *SOracleCloudAccountCreateOptions) Params() (jsonutils.JSONObject, er
params.Set("oracle_private_key", jsonutils.NewString(string(data)))
return params, nil
}
type SCephFSCredentialWithEnvironment struct {
SUserPasswordCredential
Host string `help:"CephFS host" positional:"true"`
Port string `help:"CephFS host port" default:"8443"`
}
type SCephFSCloudAccountCreateOptions struct {
SCloudAccountCreateBaseOptions
SCephFSCredentialWithEnvironment
}
func (opts *SCephFSCloudAccountCreateOptions) Params() (jsonutils.JSONObject, error) {
params := jsonutils.Marshal(opts)
params.(*jsonutils.JSONDict).Add(jsonutils.NewString("CephFS"), "provider")
return params, nil
}
+1 -1
View File
@@ -42,7 +42,7 @@ func (opts *FileSystemIdOption) Params() (jsonutils.JSONObject, error) {
type FileSystemCreateOptions struct {
NAME string
Protocol string `choices:"NFS|SMB|CPFS"`
Protocol string `choices:"NFS|SMB|CPFS|CephFS"`
FileSystemType string
Capacity int64 `json:"capacity"`
NetworkId string `json:"network_id"`