package filepersistence
import (
"context"
"github.com/goodrain/rainbond/config/configs"
"github.com/volcengine/volcengine-go-sdk/service/filenas"
)
type FileSystem struct {
ID string
Name string
Status string
ProtocolType string
StorageType string
FileSystemType string
ZoneID string
Region string
Size int64
}
type CreateFileSystemOptions struct {
Name string
ProtocolType string
StorageType string
FileSystemType string
VpcID string
VSwitchID string
SecurityGroup string
Description string
Size int64
}
type CreateStorageClassOptions struct {
Name string
ReclaimPolicy string
VolumeBindingMode string
Parameters map[string]string
}
type InterfaceFilePersistence interface {
FindFileSystem(ctx context.Context, name string) (*FileSystem, error)
CreateFileSystem(ctx context.Context, opts *CreateFileSystemOptions) (string, error)
DeleteFileSystem(ctx context.Context, fileSystemName string) error
SetDirQuota(fileSystemId, path string) error
CancelDirQuota(fileSystemId, path string) error
DescribeDirQuota(fileSystemId, path string) ([]*filenas.DirQuotaInfoForDescribeDirQuotasOutput, error)
}
type ComponentFilePersistence struct {
FilePersistenceCli InterfaceFilePersistence
FilePersistenceConfig *configs.FilePersistenceConfig
}
var defaultFilePersistenceComponent *ComponentFilePersistence
func New() *ComponentFilePersistence {
fpConfig := configs.Default().FilePersistenceConfig
defaultFilePersistenceComponent = &ComponentFilePersistence{
FilePersistenceConfig: fpConfig,
}
return defaultFilePersistenceComponent
}
func (s *ComponentFilePersistence) Start(ctx context.Context) error {
var fpCli InterfaceFilePersistence
switch s.FilePersistenceConfig.FilePersistenceType {
case "volcengine":
fpCli = &VolcengineProvider{
config: &VolcengineConfig{
AccessKey: s.FilePersistenceConfig.FilePersistenceAccessKeyID,
SecretKey: s.FilePersistenceConfig.FilePersistenceSecretAccessKey,
Region: s.FilePersistenceConfig.FilePersistenceRegion,
ZoneID: s.FilePersistenceConfig.FilePersistenceZoneID,
VpcID: s.FilePersistenceConfig.FilePersistenceVpcID,
SubnetID: s.FilePersistenceConfig.FilePersistenceSubnetID,
PermissionGroupID: s.FilePersistenceConfig.FilePersistencePermissionGroupID,
},
}
}
s.FilePersistenceCli = fpCli
return nil
}
func (s *ComponentFilePersistence) CloseHandle() {
}
func Default() *ComponentFilePersistence {
return defaultFilePersistenceComponent
}
type SrcFile interface {
Read([]byte) (int, error)
}
type DstFile interface {
Write([]byte) (int, error)
}