added helm to sidebar after rebase, sync CE with EE

This commit is contained in:
zees-dev
2021-08-25 17:48:22 +12:00
parent 16933e5f9f
commit 38bc4d90c2
10 changed files with 45 additions and 35 deletions

View File

@@ -24,17 +24,19 @@ type requestBouncer interface {
type Handler struct {
*mux.Router
requestBouncer requestBouncer
DataStore portainer.DataStore
dataStore portainer.DataStore
kubeConfigService kubernetes.KubeConfigService
HelmPackageManager libhelm.HelmPackageManager
helmPackageManager libhelm.HelmPackageManager
}
// NewHandler creates a handler to manage endpoint group operations.
func NewHandler(bouncer requestBouncer, kubeConfigService kubernetes.KubeConfigService) *Handler {
func NewHandler(bouncer requestBouncer, dataStore portainer.DataStore, helmPackageManager libhelm.HelmPackageManager, kubeConfigService kubernetes.KubeConfigService) *Handler {
h := &Handler{
Router: mux.NewRouter(),
requestBouncer: bouncer,
kubeConfigService: kubeConfigService,
Router: mux.NewRouter(),
requestBouncer: bouncer,
dataStore: dataStore,
helmPackageManager: helmPackageManager,
kubeConfigService: kubeConfigService,
}
// `helm install [NAME] [CHART] flags`
@@ -45,10 +47,12 @@ func NewHandler(bouncer requestBouncer, kubeConfigService kubernetes.KubeConfigS
}
// NewTemplateHandler creates a template handler to manage endpoint group operations.
func NewTemplateHandler(bouncer requestBouncer) *Handler {
func NewTemplateHandler(bouncer requestBouncer, dataStore portainer.DataStore, helmPackageManager libhelm.HelmPackageManager) *Handler {
h := &Handler{
Router: mux.NewRouter(),
requestBouncer: bouncer,
Router: mux.NewRouter(),
dataStore: dataStore,
helmPackageManager: helmPackageManager,
requestBouncer: bouncer,
}
// `helm search [COMMAND] [CHART] flags`
h.Handle("/templates/helm",
@@ -68,7 +72,7 @@ func (handler *Handler) GetEndpoint(r *http.Request) (*portainer.Endpoint, *http
return nil, &httperror.HandlerError{http.StatusBadRequest, "Invalid endpoint identifier route variable", err}
}
endpoint, err := handler.DataStore.Endpoint().Endpoint(portainer.EndpointID(endpointID))
endpoint, err := handler.dataStore.Endpoint().Endpoint(portainer.EndpointID(endpointID))
if err == bolterrors.ErrObjectNotFound {
return nil, &httperror.HandlerError{http.StatusNotFound, "Unable to find an endpoint with the specified identifier inside the database", err}
} else if err != nil {

View File

@@ -86,7 +86,7 @@ func (handler *Handler) helmInstall(w http.ResponseWriter, r *http.Request) *htt
return &httperror.HandlerError{http.StatusUnauthorized, "Unauthorized", err}
}
settings, err := handler.DataStore.Settings().Settings()
settings, err := handler.dataStore.Settings().Settings()
if err != nil {
return &httperror.HandlerError{StatusCode: http.StatusInternalServerError, Message: "Unable to retrieve settings", Err: err}
}
@@ -145,7 +145,7 @@ func (handler *Handler) installChart(repo string, endpoint *portainer.Endpoint,
installOpts.ValuesFile = file.Name()
}
release, err := handler.HelmPackageManager.Install(installOpts)
release, err := handler.helmPackageManager.Install(installOpts)
if err != nil {
return nil, err
}

View File

@@ -22,7 +22,7 @@ import (
// @failure 500 "Server error"
// @router /templates/helm [get]
func (handler *Handler) helmRepoSearch(w http.ResponseWriter, r *http.Request) *httperror.HandlerError {
settings, err := handler.DataStore.Settings().Settings()
settings, err := handler.dataStore.Settings().Settings()
if err != nil {
return &httperror.HandlerError{StatusCode: http.StatusInternalServerError, Message: "Unable to retrieve settings", Err: err}
}

View File

@@ -14,18 +14,18 @@ import (
)
func Test_helmRepoSearch(t *testing.T) {
h := NewTemplateHandler(helper.NewTestRequestBouncer())
assert.NotNil(t, h, "Handler should not fail")
is := assert.New(t)
defaultSettings := &portainer.Settings{
HelmRepositoryURL: portainer.DefaultHelmRepositoryURL,
}
h.DataStore = helper.NewDatastore(helper.WithSettingsService(defaultSettings))
h.HelmPackageManager = test.NewMockHelmBinaryPackageManager("")
store := helper.NewDatastore(helper.WithSettingsService(defaultSettings))
helmPackageManager := test.NewMockHelmBinaryPackageManager("")
h := NewTemplateHandler(helper.NewTestRequestBouncer(), store, helmPackageManager)
assert.NotNil(t, h, "Handler should not fail")
t.Run("helmRepoSearch", func(t *testing.T) {
is := assert.New(t)
req := httptest.NewRequest(http.MethodGet, "/templates/helm", nil)
rr := httptest.NewRecorder()
h.ServeHTTP(rr, req)

View File

@@ -23,7 +23,7 @@ import (
// @failure 500 "Server error"
// @router /templates/helm/{chart}/{command} [get]
func (handler *Handler) helmShow(w http.ResponseWriter, r *http.Request) *httperror.HandlerError {
settings, err := handler.DataStore.Settings().Settings()
settings, err := handler.dataStore.Settings().Settings()
if err != nil {
return &httperror.HandlerError{StatusCode: http.StatusInternalServerError, Message: "Unable to retrieve settings", Err: err}
}
@@ -48,7 +48,7 @@ func (handler *Handler) helmShow(w http.ResponseWriter, r *http.Request) *httper
Chart: chart,
Repo: settings.HelmRepositoryURL,
}
result, err := handler.HelmPackageManager.Show(showOptions)
result, err := handler.helmPackageManager.Show(showOptions)
if err != nil {
return &httperror.HandlerError{
StatusCode: http.StatusInternalServerError,

View File

@@ -14,17 +14,16 @@ import (
)
func Test_helmShow(t *testing.T) {
chartName := "test-nginx"
is := assert.New(t)
h := NewTemplateHandler(helper.NewTestRequestBouncer())
is.NotNil(h, "Handler should not fail")
defaultSettings := &portainer.Settings{
HelmRepositoryURL: portainer.DefaultHelmRepositoryURL,
}
h.DataStore = helper.NewDatastore(helper.WithSettingsService(defaultSettings))
h.HelmPackageManager = test.NewMockHelmBinaryPackageManager("")
store := helper.NewDatastore(helper.WithSettingsService(defaultSettings))
helmPackageManager := test.NewMockHelmBinaryPackageManager("")
h := NewTemplateHandler(helper.NewTestRequestBouncer(), store, helmPackageManager)
is.NotNil(h, "Handler should not fail")
commands := map[string]string{
"values": test.MockDataValues,
@@ -32,9 +31,9 @@ func Test_helmShow(t *testing.T) {
"readme": test.MockDataReadme,
}
chartName := "test-nginx"
for cmd, expect := range commands {
t.Run(cmd, func(t *testing.T) {
is := assert.New(t)
is.NotNil(h, "Handler should not fail")
req := httptest.NewRequest("GET", fmt.Sprintf("/templates/helm/%s/%s", chartName, cmd), nil)

View File

@@ -171,13 +171,9 @@ func (server *Server) Start() error {
var fileHandler = file.NewHandler(filepath.Join(server.AssetsPath, "public"))
var endpointHelmHandler = helmhandler.NewHandler(requestBouncer, server.KubeConfigService)
endpointHelmHandler.DataStore = server.DataStore
endpointHelmHandler.HelmPackageManager = server.HelmPackageManager
var endpointHelmHandler = helmhandler.NewHandler(requestBouncer, server.DataStore, server.HelmPackageManager, server.KubeConfigService)
var helmTemplatesHandler = helmhandler.NewTemplateHandler(requestBouncer)
helmTemplatesHandler.DataStore = server.DataStore
helmTemplatesHandler.HelmPackageManager = server.HelmPackageManager
var helmTemplatesHandler = helmhandler.NewTemplateHandler(requestBouncer, server.DataStore, server.HelmPackageManager)
var motdHandler = motd.NewHandler(requestBouncer)