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 f6b66fe300
commit 6ca3f5033b
10 changed files with 45 additions and 35 deletions

View File

@@ -38,7 +38,7 @@ require (
github.com/pkg/errors v0.9.1
github.com/portainer/docker-compose-wrapper v0.0.0-20210906052132-ef24824f7548
github.com/portainer/libcrypto v0.0.0-20210422035235-c652195c5c3a
github.com/portainer/libhelm v0.0.0-20210824223830-738c47ec0623
github.com/portainer/libhelm v0.0.0-20210825033709-0024b491ddd9
github.com/portainer/libhttp v0.0.0-20190806161843-ba068f58be33
github.com/robfig/cron/v3 v3.0.1
github.com/sirupsen/logrus v1.8.1

View File

@@ -212,6 +212,8 @@ github.com/portainer/libcrypto v0.0.0-20210422035235-c652195c5c3a h1:qY8TbocN75n
github.com/portainer/libcrypto v0.0.0-20210422035235-c652195c5c3a/go.mod h1:n54EEIq+MM0NNtqLeCby8ljL+l275VpolXO0ibHegLE=
github.com/portainer/libhelm v0.0.0-20210824223830-738c47ec0623 h1:IdA+8irn6fxTXIJAgANLYSo9UwXXn0uNvnjgkc6FTVM=
github.com/portainer/libhelm v0.0.0-20210824223830-738c47ec0623/go.mod h1:dL39owjMIeGKuSsSbbTrLCzZQfoB1zORhq0TAet7D5E=
github.com/portainer/libhelm v0.0.0-20210825033709-0024b491ddd9 h1:dwZ2mmzaQhYJc/3DxAja4nyD7VlgWS5FQDAcawUVp08=
github.com/portainer/libhelm v0.0.0-20210825033709-0024b491ddd9/go.mod h1:dL39owjMIeGKuSsSbbTrLCzZQfoB1zORhq0TAet7D5E=
github.com/portainer/libhttp v0.0.0-20190806161843-ba068f58be33 h1:H8HR2dHdBf8HANSkUyVw4o8+4tegGcd+zyKZ3e599II=
github.com/portainer/libhttp v0.0.0-20190806161843-ba068f58be33/go.mod h1:Y2TfgviWI4rT2qaOTHr+hq6MdKIE5YjgQAu7qwptTV0=
github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs=

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)

View File

@@ -28,6 +28,15 @@
Namespaces
</sidebar-menu-item>
<sidebar-menu-item
path="kubernetes.templates"
path-params="{ endpointId: $ctrl.endpointId }"
icon-class="fa-dharmachakra fa-fw"
class-name="sidebar-list"
>
Helm
</sidebar-menu-item>
<sidebar-menu-item
path="kubernetes.applications"
path-params="{ endpointId: $ctrl.endpointId }"