mirror of https://github.com/helm/helm
parent
f73d39ecc7
commit
3f1325faf8
@ -0,0 +1,18 @@
|
|||||||
|
package api
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/stretchr/testify/mock"
|
||||||
|
"helm.sh/helm/v3/pkg/cli"
|
||||||
|
)
|
||||||
|
|
||||||
|
type chartloader interface {
|
||||||
|
LocateChart(name string, settings *cli.EnvSettings) (string, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
type MockChartLoader struct{ mock.Mock }
|
||||||
|
|
||||||
|
func (m *MockChartLoader) LocateChart(name string, settings *cli.EnvSettings) (string, error) {
|
||||||
|
args := m.Called(name, settings)
|
||||||
|
return args.String(0), args.Error(1)
|
||||||
|
}
|
||||||
|
|
@ -1,24 +1,37 @@
|
|||||||
package api
|
package api
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"github.com/stretchr/testify/mock"
|
||||||
"helm.sh/helm/v3/pkg/action"
|
"helm.sh/helm/v3/pkg/action"
|
||||||
"helm.sh/helm/v3/pkg/chart"
|
"helm.sh/helm/v3/pkg/chart"
|
||||||
"helm.sh/helm/v3/pkg/release"
|
"helm.sh/helm/v3/pkg/release"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Installer struct {
|
type install struct {
|
||||||
*action.Install
|
*action.Install
|
||||||
}
|
}
|
||||||
|
|
||||||
type runner interface {
|
type Installer interface {
|
||||||
Run(*chart.Chart, map[string]interface{}) (*release.Release, error)
|
Run(*chart.Chart, map[string]interface{}) (*release.Release, error)
|
||||||
|
SetConfig(InstallConfig)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (i *Installer) SetConfig(cfg InstallConfig) {
|
func (i *install) SetConfig(cfg InstallConfig) {
|
||||||
i.ReleaseName = cfg.Name
|
i.ReleaseName = cfg.Name
|
||||||
i.Namespace = cfg.Namespace
|
i.Namespace = cfg.Namespace
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewInstaller(ai *action.Install) *Installer {
|
func NewInstall(ai *action.Install) *install {
|
||||||
return &Installer{ai}
|
return &install{ai}
|
||||||
|
}
|
||||||
|
|
||||||
|
type MockInstall struct{ mock.Mock }
|
||||||
|
|
||||||
|
func (m *MockInstall) SetConfig(cfg InstallConfig) {
|
||||||
|
m.Called(cfg)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MockInstall) Run(c *chart.Chart, vals map[string]interface{}) (*release.Release, error) {
|
||||||
|
args := m.Called(c, vals)
|
||||||
|
return args.Get(0).(*release.Release), args.Error(1)
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,68 @@
|
|||||||
|
package api
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"helm.sh/helm/v3/pkg/api/logger"
|
||||||
|
"net/http"
|
||||||
|
)
|
||||||
|
|
||||||
|
type ListRequest struct {
|
||||||
|
RequestID string
|
||||||
|
}
|
||||||
|
|
||||||
|
type ListResponse struct {
|
||||||
|
Error string `json:"error,omitempty"`
|
||||||
|
Data []HelmRelease
|
||||||
|
}
|
||||||
|
|
||||||
|
type HelmRelease struct {
|
||||||
|
Release string `json:"release"`
|
||||||
|
Namespace string `json:"namespace"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func Handler(svc Service) http.Handler {
|
||||||
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
w.Header().Set("Content-Type", "application/json")
|
||||||
|
|
||||||
|
var response ListResponse
|
||||||
|
var request ListRequest
|
||||||
|
decoder := json.NewDecoder(r.Body)
|
||||||
|
decoder.UseNumber()
|
||||||
|
if err := decoder.Decode(&request); err != nil {
|
||||||
|
response.Error = err.Error()
|
||||||
|
logger.Errorf("[List] error decoding request: %v", err)
|
||||||
|
w.WriteHeader(http.StatusBadRequest)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer r.Body.Close()
|
||||||
|
|
||||||
|
request.RequestID = r.Header.Get("Request-Id")
|
||||||
|
|
||||||
|
svc.lister.SetStateMask()
|
||||||
|
res, err := svc.lister.Run()
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
response.Error = err.Error()
|
||||||
|
logger.Errorf("[List] error while installing chart: %v", err)
|
||||||
|
w.WriteHeader(http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var helmReleases []HelmRelease
|
||||||
|
for _, eachRes := range res {
|
||||||
|
r := HelmRelease{Release: eachRes.Name, Namespace: eachRes.Namespace}
|
||||||
|
helmReleases = append(helmReleases, r)
|
||||||
|
}
|
||||||
|
response = ListResponse{"", helmReleases}
|
||||||
|
payload, err := json.Marshal(response)
|
||||||
|
if err != nil {
|
||||||
|
response.Error = err.Error()
|
||||||
|
logger.Errorf("[List] error writing response %v", err)
|
||||||
|
w.WriteHeader(http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
w.WriteHeader(http.StatusOK)
|
||||||
|
w.Write(payload)
|
||||||
|
})
|
||||||
|
}
|
@ -0,0 +1,28 @@
|
|||||||
|
package api
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/stretchr/testify/mock"
|
||||||
|
"helm.sh/helm/v3/pkg/action"
|
||||||
|
"helm.sh/helm/v3/pkg/release"
|
||||||
|
)
|
||||||
|
|
||||||
|
type list struct {
|
||||||
|
*action.List
|
||||||
|
}
|
||||||
|
|
||||||
|
type lister interface {
|
||||||
|
Run() ([]*release.Release, error)
|
||||||
|
SetStateMask()
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewList(action *action.List) *list{
|
||||||
|
return &list{action}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
type MockList struct{ mock.Mock }
|
||||||
|
|
||||||
|
func (m *MockList) Run() ([]*release.Release, error) {
|
||||||
|
args := m.Called()
|
||||||
|
return args.Get(0).([]*release.Release), args.Error(1)
|
||||||
|
}
|
Loading…
Reference in new issue