mirror of
https://github.com/kubevela/kubevela.git
synced 2026-08-23 22:46:53 +00:00
* Refactor: use createOrUpdateNamespace as a common util function
Signed-off-by: Jianbo Sun <jianbo.sjb@alibaba-inc.com>
* Feat: add ENV webservice handelr
* Fix: fix Env usecase logic
* Feat: Add Delete Env API
Signed-off-by: Jianbo Sun <jianbo.sjb@alibaba-inc.com>
* Fix: filter empty addon data
Signed-off-by: Jianbo Sun <jianbo.sjb@alibaba-inc.com>
* Feat: split makefiels and make it clear
* Feat: add k8s utils test
* Feat: Add env update interface
Signed-off-by: Jianbo Sun <jianbo.sjb@alibaba-inc.com>
* Feat: change env implementation
Signed-off-by: barnettZQG <barnett.zqg@gmail.com>
* Fix: minor fix
* Revert "Fix: minor fix"
This reverts commit 9cafefa65a.
* Fix: use appusecase as parameter
Signed-off-by: Jianbo Sun <jianbo.sjb@alibaba-inc.com>
* Refactor: align CLI vela env with new env design
Signed-off-by: Jianbo Sun <jianbo.sjb@alibaba-inc.com>
* Fix: minor fix
Signed-off-by: Jianbo Sun <jianbo.sjb@alibaba-inc.com>
* Feat: add page index and alias of env
Signed-off-by: Jianbo Sun <jianbo.sjb@alibaba-inc.com>
* Fix: fix tests and licence header
* Fix: fix makefile and add default target
Signed-off-by: Jianbo Sun <jianbo.sjb@alibaba-inc.com>
* Fix: update build swagger.json
Signed-off-by: Jianbo Sun <jianbo.sjb@alibaba-inc.com>
* Fix: change update env api
Signed-off-by: barnettZQG <barnett.zqg@gmail.com>
* Feat: list env with alias
* Feat: add log to env delete
* Fix: can not get app status
Signed-off-by: barnettZQG <barnett.zqg@gmail.com>
* Feat: support update workflow and refactor code
* Fix: lint
* Fix: remove swagger check
Signed-off-by: Jianbo Sun <jianbo.sjb@alibaba-inc.com>
* Fix: fix cli vela delete
* Fix: update test
Signed-off-by: Jianbo Sun <jianbo.sjb@alibaba-inc.com>
* Fix: update test
Signed-off-by: Jianbo Sun <jianbo.sjb@alibaba-inc.com>
* Fix: app deploy unit test case
Signed-off-by: barnettZQG <barnett.zqg@gmail.com>
* Fix: SortOrderDescending is not effective
Signed-off-by: barnettZQG <barnett.zqg@gmail.com>
* Fix: e2e test case
Signed-off-by: barnettZQG <barnett.zqg@gmail.com>
* Feat: support default project/target/env
* Fix: make test and add swagger
* Fix: use separated datasource for unit test
* Fix: app rollback bug
Signed-off-by: barnettZQG <barnett.zqg@gmail.com>
* Fix: fix e2e test
* Fix: kubeapi driver sort bug
Signed-off-by: barnettZQG <barnett.zqg@gmail.com>
* Fix: e2e test
* Fix: api e2e test
Signed-off-by: barnettZQG <barnett.zqg@gmail.com>
* Fix: e2e test fix
* Fix: try fix e2e test
* Fix: api e2e test
Signed-off-by: barnettZQG <barnett.zqg@gmail.com>
Co-authored-by: barnettZQG <barnett.zqg@gmail.com>
144 lines
3.5 KiB
Go
144 lines
3.5 KiB
Go
/*
|
|
Copyright 2021 The KubeVela Authors.
|
|
|
|
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 model
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"reflect"
|
|
"time"
|
|
|
|
"k8s.io/apimachinery/pkg/runtime"
|
|
"sigs.k8s.io/yaml"
|
|
|
|
"github.com/oam-dev/kubevela/pkg/apiserver/log"
|
|
)
|
|
|
|
var tableNamePrefix = "vela_"
|
|
|
|
var registedModels = map[string]Interface{}
|
|
|
|
// Interface model interface
|
|
type Interface interface {
|
|
TableName() string
|
|
}
|
|
|
|
// RegistModel regist model
|
|
func RegistModel(models ...Interface) {
|
|
for _, model := range models {
|
|
if _, exist := registedModels[model.TableName()]; exist {
|
|
panic(fmt.Errorf("model table name %s conflict", model.TableName()))
|
|
}
|
|
registedModels[model.TableName()] = model
|
|
}
|
|
}
|
|
|
|
// JSONStruct json struct, same with runtime.RawExtension
|
|
type JSONStruct map[string]interface{}
|
|
|
|
// NewJSONStruct new jsonstruct from runtime.RawExtension
|
|
func NewJSONStruct(raw *runtime.RawExtension) (*JSONStruct, error) {
|
|
var data JSONStruct
|
|
err := json.Unmarshal(raw.Raw, &data)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("parse raw data failure %w", err)
|
|
}
|
|
return &data, nil
|
|
}
|
|
|
|
// NewJSONStructByString new jsonstruct from string
|
|
func NewJSONStructByString(source string) (*JSONStruct, error) {
|
|
if source == "" {
|
|
return nil, nil
|
|
}
|
|
var data JSONStruct
|
|
err := json.Unmarshal([]byte(source), &data)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("parse raw data failure %w", err)
|
|
}
|
|
return &data, nil
|
|
}
|
|
|
|
// NewJSONStructByStruct new jsonstruct from strcut object
|
|
func NewJSONStructByStruct(object interface{}) (*JSONStruct, error) {
|
|
if object == nil {
|
|
return nil, nil
|
|
}
|
|
var data JSONStruct
|
|
out, err := yaml.Marshal(object)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("marshal object data failure %w", err)
|
|
}
|
|
if err := yaml.Unmarshal(out, &data); err != nil {
|
|
return nil, fmt.Errorf("unmarshal object data failure %w", err)
|
|
}
|
|
return &data, nil
|
|
}
|
|
|
|
// JSON Encoded as a JSON string
|
|
func (j *JSONStruct) JSON() string {
|
|
b, err := json.Marshal(j)
|
|
if err != nil {
|
|
log.Logger.Errorf("json marshal failure %s", err.Error())
|
|
}
|
|
return string(b)
|
|
}
|
|
|
|
// RawExtension Encoded as a RawExtension
|
|
func (j *JSONStruct) RawExtension() *runtime.RawExtension {
|
|
yamlByte, err := yaml.Marshal(j)
|
|
if err != nil {
|
|
log.Logger.Errorf("yaml marshal failure %s", err.Error())
|
|
return nil
|
|
}
|
|
b, err := yaml.YAMLToJSON(yamlByte)
|
|
if err != nil {
|
|
log.Logger.Errorf("yaml to json failure %s", err.Error())
|
|
return nil
|
|
}
|
|
return &runtime.RawExtension{Raw: b}
|
|
}
|
|
|
|
// BaseModel common model
|
|
type BaseModel struct {
|
|
CreateTime time.Time `json:"createTime"`
|
|
UpdateTime time.Time `json:"updateTime"`
|
|
}
|
|
|
|
// SetCreateTime set create time
|
|
func (m *BaseModel) SetCreateTime(time time.Time) {
|
|
m.CreateTime = time
|
|
}
|
|
|
|
// SetUpdateTime set update time
|
|
func (m *BaseModel) SetUpdateTime(time time.Time) {
|
|
m.UpdateTime = time
|
|
}
|
|
|
|
func deepCopy(src interface{}) interface{} {
|
|
dst := reflect.New(reflect.TypeOf(src).Elem())
|
|
|
|
val := reflect.ValueOf(src).Elem()
|
|
nVal := dst.Elem()
|
|
for i := 0; i < val.NumField(); i++ {
|
|
nvField := nVal.Field(i)
|
|
nvField.Set(val.Field(i))
|
|
}
|
|
|
|
return dst.Interface()
|
|
}
|