mirror of
https://github.com/kubevela/kubevela.git
synced 2026-08-27 16:17:34 +00:00
support env and config storage driver (#850)
* support env and config storage driver Signed-off-by: Weiping Cai <weiping.cai@daocloud.io> * use driver.LocalDriverName to replace str Signed-off-by: Weiping Cai <weiping.cai@daocloud.io>
This commit is contained in:
@@ -33,11 +33,13 @@ import (
|
||||
|
||||
oamcore "github.com/oam-dev/kubevela/apis/core.oam.dev"
|
||||
velacore "github.com/oam-dev/kubevela/apis/standard.oam.dev/v1alpha1"
|
||||
"github.com/oam-dev/kubevela/pkg/appfile/storage/driver"
|
||||
velacontroller "github.com/oam-dev/kubevela/pkg/controller"
|
||||
oamcontroller "github.com/oam-dev/kubevela/pkg/controller/core.oam.dev"
|
||||
oamv1alpha2 "github.com/oam-dev/kubevela/pkg/controller/core.oam.dev/v1alpha2"
|
||||
"github.com/oam-dev/kubevela/pkg/controller/dependency"
|
||||
"github.com/oam-dev/kubevela/pkg/controller/utils"
|
||||
"github.com/oam-dev/kubevela/pkg/utils/system"
|
||||
oamwebhook "github.com/oam-dev/kubevela/pkg/webhook/core.oam.dev"
|
||||
velawebhook "github.com/oam-dev/kubevela/pkg/webhook/standard.oam.dev"
|
||||
"github.com/oam-dev/kubevela/version"
|
||||
@@ -76,6 +78,7 @@ func main() {
|
||||
var controllerArgs oamcontroller.Args
|
||||
var healthAddr string
|
||||
var disableCaps string
|
||||
var storageDriver string
|
||||
|
||||
flag.BoolVar(&useWebhook, "use-webhook", false, "Enable Admission Webhook")
|
||||
flag.BoolVar(&useTraitInjector, "use-trait-injector", false, "Enable TraitInjector")
|
||||
@@ -97,6 +100,7 @@ func main() {
|
||||
flag.StringVar(&controllerArgs.CustomRevisionHookURL, "custom-revision-hook-url", "",
|
||||
"custom-revision-hook-url is a webhook url which will let KubeVela core to call with applicationConfiguration and component info and return a customized component revision")
|
||||
flag.StringVar(&disableCaps, "disable-caps", "", "To be disabled builtin capability list.")
|
||||
flag.StringVar(&storageDriver, "storage-driver", driver.LocalDriverName, "Application file save to the storage driver")
|
||||
flag.Parse()
|
||||
|
||||
// setup logging
|
||||
@@ -174,6 +178,15 @@ func main() {
|
||||
setupLog.Error(err, "unable to setup the vela core controller")
|
||||
os.Exit(1)
|
||||
}
|
||||
if driver := os.Getenv(system.StorageDriverEnv); len(driver) == 0 {
|
||||
// first use system environment,
|
||||
err := os.Setenv(system.StorageDriverEnv, storageDriver)
|
||||
if err != nil {
|
||||
setupLog.Error(err, "unable to setup the vela core controller")
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
setupLog.Info("use storage driver", "storageDriver", os.Getenv(system.StorageDriverEnv))
|
||||
|
||||
if useTraitInjector {
|
||||
// register all service injectors
|
||||
|
||||
@@ -1,38 +1,35 @@
|
||||
package storage
|
||||
|
||||
import (
|
||||
"os"
|
||||
|
||||
"github.com/oam-dev/kubevela/pkg/appfile/storage/driver"
|
||||
"github.com/oam-dev/kubevela/pkg/utils/system"
|
||||
)
|
||||
|
||||
// Store application store client
|
||||
var Store *Storage
|
||||
|
||||
func init() {
|
||||
// TODO support provide multiple ways:
|
||||
// system environment
|
||||
// system configfile
|
||||
// startup arguments
|
||||
Store = NewStorage(driver.LocalDriverName)
|
||||
}
|
||||
var store *Storage
|
||||
|
||||
// Storage is common storage client,use it to get app and others resource
|
||||
type Storage struct {
|
||||
driver.Driver
|
||||
}
|
||||
|
||||
// NewStorage form driver type
|
||||
func NewStorage(driverName string) *Storage {
|
||||
// TODO remove driverName param ,should use environment get it
|
||||
// FIXME use env to get user storageDriver
|
||||
switch driverName {
|
||||
// TODO mutli implement Storage
|
||||
case driver.ConfigMapDriverName:
|
||||
return &Storage{driver.NewConfigMapStorage()}
|
||||
case driver.LocalDriverName:
|
||||
return &Storage{driver.NewLocalStorage()}
|
||||
default:
|
||||
return &Storage{driver.NewLocalStorage()}
|
||||
// GetStorage will create storage driver from the system environment of "STORAGE_DRIVER"
|
||||
func GetStorage() *Storage {
|
||||
driverName := os.Getenv(system.StorageDriverEnv)
|
||||
if store == nil || store.Name() != driverName {
|
||||
switch driverName {
|
||||
// TODO mutli implement Storage
|
||||
case driver.ConfigMapDriverName:
|
||||
store = &Storage{driver.NewConfigMapStorage()}
|
||||
case driver.LocalDriverName:
|
||||
store = &Storage{driver.NewLocalStorage()}
|
||||
default:
|
||||
store = &Storage{driver.NewLocalStorage()}
|
||||
}
|
||||
}
|
||||
return store
|
||||
}
|
||||
|
||||
// List applications storage common implement
|
||||
|
||||
@@ -1,29 +1,27 @@
|
||||
package storage
|
||||
|
||||
import (
|
||||
"reflect"
|
||||
"os"
|
||||
"testing"
|
||||
|
||||
"github.com/oam-dev/kubevela/pkg/appfile/storage/driver"
|
||||
"github.com/oam-dev/kubevela/pkg/utils/system"
|
||||
)
|
||||
|
||||
func TestNewStorage(t *testing.T) {
|
||||
type args struct {
|
||||
driverName string
|
||||
}
|
||||
func TestGetStorage(t *testing.T) {
|
||||
_ = os.Setenv(system.StorageDriverEnv, driver.ConfigMapDriverName)
|
||||
|
||||
store := &Storage{driver.NewConfigMapStorage()}
|
||||
tests := []struct {
|
||||
name string
|
||||
args args
|
||||
want *Storage
|
||||
}{
|
||||
{"TestNewStorage_Local1", args{""}, &Storage{driver.NewLocalStorage()}},
|
||||
{"TestNewStorage_Local2", args{driver.LocalDriverName}, &Storage{driver.NewLocalStorage()}},
|
||||
{"TestNewStorage_ConfigMap", args{driver.ConfigMapDriverName}, &Storage{driver.NewConfigMapStorage()}},
|
||||
{name: "TestGetStorage_ConfigMap", want: store},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
if got := NewStorage(tt.args.driverName); !reflect.DeepEqual(got, tt.want) {
|
||||
t.Errorf("NewStorage() = %v, want %v", got, tt.want)
|
||||
if got := GetStorage(); got.Name() != tt.want.Name() {
|
||||
t.Errorf("GetStorage() = %v, want %v", got, tt.want)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
@@ -31,7 +31,7 @@ func IsNotFound(appName string, err error) bool {
|
||||
|
||||
// Load will load application with env and name from default vela home dir.
|
||||
func Load(envName, appName string) (*driver.Application, error) {
|
||||
app, err := storage.Store.Get(envName, appName)
|
||||
app, err := storage.GetStorage().Get(envName, appName)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -41,12 +41,12 @@ func Load(envName, appName string) (*driver.Application, error) {
|
||||
|
||||
// Delete will delete an app along with it's appfile.
|
||||
func Delete(envName, appName string) error {
|
||||
return storage.Store.Delete(envName, appName)
|
||||
return storage.GetStorage().Delete(envName, appName)
|
||||
}
|
||||
|
||||
// List will list all apps
|
||||
func List(envName string) ([]*driver.Application, error) {
|
||||
respApps, err := storage.Store.List(envName)
|
||||
respApps, err := storage.GetStorage().List(envName)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -80,7 +80,7 @@ func MatchAppByComp(envName, compName string) (*driver.Application, error) {
|
||||
|
||||
// Save will save appfile into default dir.
|
||||
func Save(app *driver.Application, envName string) error {
|
||||
return storage.Store.Save(app, envName)
|
||||
return storage.GetStorage().Save(app, envName)
|
||||
}
|
||||
|
||||
// GetComponents will get oam components from Appfile.
|
||||
|
||||
@@ -11,8 +11,12 @@ import (
|
||||
|
||||
const defaultVelaHome = ".vela"
|
||||
|
||||
// VelaHomeEnv defines vela home system env
|
||||
const VelaHomeEnv = "VELA_HOME"
|
||||
const (
|
||||
// VelaHomeEnv defines vela home system env
|
||||
VelaHomeEnv = "VELA_HOME"
|
||||
// StorageDriverEnv defines vela storage driver env
|
||||
StorageDriverEnv = "STORAGE_DRIVER"
|
||||
)
|
||||
|
||||
// GetVelaHomeDir return vela home dir
|
||||
func GetVelaHomeDir() (string, error) {
|
||||
|
||||
Reference in New Issue
Block a user