Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: update workspace util func and fix known bug #668

Merged
merged 1 commit into from
Dec 12, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions pkg/apis/workspace/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -123,12 +123,12 @@ type MysqlConfig struct {

// OssConfig contains the config of using OSS as backend.
type OssConfig struct {
GenericObjectStorageConfig // OSS asks for non-empty endpoint
GenericObjectStorageConfig `yaml:",inline" json:",inline"` // OSS asks for non-empty endpoint
}

// S3Config contains the config of using S3 as backend.
type S3Config struct {
GenericObjectStorageConfig
GenericObjectStorageConfig `yaml:",inline" json:",inline"`

// Region of S3.
Region string `yaml:"region,omitempty" json:"region,omitempty"`
Expand Down
86 changes: 76 additions & 10 deletions pkg/workspace/operator.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,60 @@ var (
ErrWorkspaceAlreadyExist = errors.New("workspace has already existed")
)

// CheckWorkspaceExistenceByDefaultOperator checks the workspace exists or not by default operator.
func CheckWorkspaceExistenceByDefaultOperator(name string) (bool, error) {
operator, err := NewValidDefaultOperator()
if err != nil {
return false, err
}
return operator.WorkspaceExist(name), nil
}

// GetWorkspaceByDefaultOperator gets a workspace by default operator.
func GetWorkspaceByDefaultOperator(name string) (*workspace.Workspace, error) {
operator, err := NewValidDefaultOperator()
if err != nil {
return nil, err
}
return operator.GetWorkspace(name)
}

// GetWorkspaceNamesByDefaultOperator list all the workspace names by default operator.
func GetWorkspaceNamesByDefaultOperator() ([]string, error) {
operator, err := NewValidDefaultOperator()
if err != nil {
return nil, err
}
return operator.GetWorkspaceNames()
}

// CreateWorkspaceByDefaultOperator creates a workspace by default operator.
func CreateWorkspaceByDefaultOperator(ws *workspace.Workspace) error {
operator, err := NewValidDefaultOperator()
if err != nil {
return err
}
return operator.CreateWorkspace(ws)
}

// UpdateWorkspaceByDefaultOperator updates a workspace by default operator.
func UpdateWorkspaceByDefaultOperator(ws *workspace.Workspace) error {
operator, err := NewValidDefaultOperator()
if err != nil {
return err
}
return operator.UpdateWorkspace(ws)
}

// DeleteWorkspaceByDefaultOperator deletes a workspace by default operator
func DeleteWorkspaceByDefaultOperator(name string) error {
operator, err := NewValidDefaultOperator()
if err != nil {
return err
}
return operator.DeleteWorkspace(name)
}

// Operator is used to handle the CURD operations of workspace. Operator only supports local file
// system as backend for now.
type Operator struct {
healthjyk marked this conversation as resolved.
Show resolved Hide resolved
Expand All @@ -36,7 +90,19 @@ type Operator struct {
storagePath string
}

// NewDefaultOperator returns a default backend, whose storage path is the directory ".workspace"
// NewOperator news an Operator with the specified storage path. If the directory of the storage
// path has not created, then create the directory.
func NewOperator(storagePath string) (*Operator, error) {
_, err := os.Stat(storagePath)
if os.IsNotExist(err) {
if err = os.MkdirAll(storagePath, os.ModePerm); err != nil {
return nil, fmt.Errorf("create directory %s failed, %w", storagePath, err)
}
}
return &Operator{storagePath: storagePath}, nil
}

// NewDefaultOperator returns a default backend, whose storage path is the directory "workspace"
// under kfile.KusionDataFolder().
func NewDefaultOperator() (*Operator, error) {
kusionDataDir, err := kfile.KusionDataFolder()
Expand All @@ -47,16 +113,16 @@ func NewDefaultOperator() (*Operator, error) {
return NewOperator(storagePath)
}

// NewOperator news an Operator with the specified storage path. If the directory of the storage
// path has not created, then create the directory.
func NewOperator(storagePath string) (*Operator, error) {
_, err := os.Stat(storagePath)
if os.IsNotExist(err) {
if err = os.MkdirAll(storagePath, os.ModePerm); err != nil {
return nil, fmt.Errorf("create directory %s failed, %w", storagePath, err)
}
// NewValidDefaultOperator news a default operator and then do the validation work.
func NewValidDefaultOperator() (*Operator, error) {
operator, err := NewDefaultOperator()
if err != nil {
return nil, err
}
return &Operator{storagePath: storagePath}, nil
if err = operator.Validate(); err != nil {
return nil, err
}
return operator, nil
}

// Validate is used to validate the Operator is valid or not.
Expand Down
18 changes: 10 additions & 8 deletions pkg/workspace/operator_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,14 +24,16 @@ func mockValidOperator() *Operator {
}

func TestNewDefaultOperator(t *testing.T) {
mockey.PatchConvey("new default operator successfully", t, func() {
mockey.Mock(kfile.KusionDataFolder).Return(testDataFolder(), nil).Build()

operator, err := NewDefaultOperator()
storagePath := path.Join(testDataFolder(), defaultRelativeStoragePath)
assert.Nil(t, err)
assert.Equal(t, storagePath, operator.storagePath)
assert.DirExists(t, storagePath)
t.Run("new default operator successfully", func(t *testing.T) {
mockey.PatchConvey("mock kusion data folder", t, func() {
mockey.Mock(kfile.KusionDataFolder).Return(testDataFolder(), nil).Build()

operator, err := NewDefaultOperator()
storagePath := path.Join(testDataFolder(), defaultRelativeStoragePath)
assert.Nil(t, err)
assert.Equal(t, storagePath, operator.storagePath)
assert.DirExists(t, storagePath)
})
})
}

Expand Down
2 changes: 1 addition & 1 deletion pkg/workspace/validation.go
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,7 @@ func ValidateBackendConfigs(configs *workspace.BackendConfigs) error {
return nil
}
if configs.S3 != nil {
if err := ValidateGenericObjectStorageConfig(&configs.Oss.GenericObjectStorageConfig); err != nil {
if err := ValidateGenericObjectStorageConfig(&configs.S3.GenericObjectStorageConfig); err != nil {
return fmt.Errorf("%w of %s", err, workspace.BackendS3)
}
return nil
Expand Down
Loading