pkg/helmshim/options.go (88 lines of code) (raw):
package helmshim
import (
"flag"
"github.com/Azure/eno/pkg/function"
"helm.sh/helm/v3/pkg/action"
"helm.sh/helm/v3/pkg/chart"
"helm.sh/helm/v3/pkg/chart/loader"
)
type ValuesFunc func(*function.InputReader) (map[string]any, error)
// ChartLoader is the function for loading a helm chart.
type ChartLoader func() (*chart.Chart, error)
func defaultChartLoader() (*chart.Chart, error) {
return loader.Load("./chart")
}
type options struct {
Action *action.Install
ValuesFunc ValuesFunc
ChartLoader ChartLoader
Reader *function.InputReader
Writer *function.OutputWriter
}
type RenderOption func(*options)
func (ro RenderOption) apply(o *options) {
ro(o)
}
func WithNamespace(ns string) RenderOption {
return RenderOption(func(o *options) {
if o == nil {
return
}
o.Action.Namespace = ns
})
}
func WithValuesFunc(fn ValuesFunc) RenderOption {
return RenderOption(func(o *options) {
if o == nil {
return
}
o.ValuesFunc = fn
})
}
func WithChartPath(path string) RenderOption {
return RenderOption(func(o *options) {
if o == nil {
return
}
o.ChartLoader = func() (*chart.Chart, error) {
return loader.Load(path)
}
})
}
func WithChartLoader(cl ChartLoader) RenderOption {
return RenderOption(func(o *options) {
if o == nil {
return
}
o.ChartLoader = cl
})
}
func WithInputReader(r *function.InputReader) RenderOption {
return RenderOption(func(o *options) {
if o == nil {
return
}
o.Reader = r
})
}
func WithOutputWriter(w *function.OutputWriter) RenderOption {
return RenderOption(func(o *options) {
if o == nil {
return
}
o.Writer = w
})
}
func WithReleaseName(rn string) RenderOption {
return RenderOption(func(o *options) {
if o == nil {
return
}
o.Action.ReleaseName = rn
})
}
func ParseFlags() []RenderOption {
ns := flag.String("ns", "default", "Namespace for the Helm release")
chart := flag.String("chart", ".", "Path to the Helm chart")
flag.Parse()
return []RenderOption{WithNamespace(*ns), WithChartPath(*chart)}
}