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:
Weiping Cai
2021-01-25 16:26:42 +08:00
committed by GitHub
parent 77642f069a
commit 75ecf2f301
5 changed files with 50 additions and 38 deletions
+13
View File
@@ -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
+18 -21
View File
@@ -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 clientuse 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
+9 -11
View File
@@ -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)
}
})
}
+4 -4
View File
@@ -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.
+6 -2
View File
@@ -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) {