2020-10-04 17:16:01 +00:00
|
|
|
package helpers
|
|
|
|
|
|
|
|
import (
|
2020-11-08 20:14:19 +00:00
|
|
|
"io/ioutil"
|
|
|
|
|
2020-10-30 18:15:04 +00:00
|
|
|
"github.com/pkg/errors"
|
2020-11-08 20:14:19 +00:00
|
|
|
"gopkg.in/yaml.v2"
|
2020-10-04 17:16:01 +00:00
|
|
|
"helm.sh/helm/v3/pkg/chart"
|
|
|
|
"helm.sh/helm/v3/pkg/chartutil"
|
|
|
|
"helm.sh/helm/v3/pkg/engine"
|
|
|
|
)
|
|
|
|
|
|
|
|
// RenderHelm renders the template string with helm
|
2020-10-30 18:15:04 +00:00
|
|
|
func RenderHelm(template string, values map[string]interface{}) (string, error) {
|
2020-10-04 17:16:01 +00:00
|
|
|
c := &chart.Chart{
|
|
|
|
Metadata: &chart.Metadata{
|
|
|
|
Name: "",
|
|
|
|
Version: "",
|
|
|
|
},
|
|
|
|
Templates: []*chart.File{
|
|
|
|
{Name: "templates", Data: []byte(template)},
|
|
|
|
},
|
2020-10-30 18:15:04 +00:00
|
|
|
Values: map[string]interface{}{"Values": values},
|
2020-10-04 17:16:01 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
v, err := chartutil.CoalesceValues(c, map[string]interface{}{})
|
|
|
|
if err != nil {
|
2020-10-30 18:15:04 +00:00
|
|
|
return "", errors.Wrap(err, "while rendering template")
|
2020-10-04 17:16:01 +00:00
|
|
|
}
|
|
|
|
out, err := engine.Render(c, v)
|
|
|
|
if err != nil {
|
2020-10-30 18:15:04 +00:00
|
|
|
return "", errors.Wrap(err, "while rendering template")
|
2020-10-04 17:16:01 +00:00
|
|
|
}
|
|
|
|
|
2020-10-30 18:15:04 +00:00
|
|
|
return out["templates"], nil
|
2020-10-04 17:16:01 +00:00
|
|
|
}
|
2020-11-08 20:14:19 +00:00
|
|
|
|
|
|
|
type templatedata map[string]interface{}
|
|
|
|
|
|
|
|
func RenderFiles(toTemplate, valuesFile string) (string, error) {
|
|
|
|
raw, err := ioutil.ReadFile(toTemplate)
|
|
|
|
if err != nil {
|
|
|
|
return "", errors.Wrap(err, "reading file "+toTemplate)
|
|
|
|
}
|
|
|
|
|
|
|
|
if !Exists(valuesFile) {
|
|
|
|
return "", errors.Wrap(err, "file not existing "+valuesFile)
|
|
|
|
}
|
|
|
|
def, err := ioutil.ReadFile(valuesFile)
|
|
|
|
if err != nil {
|
|
|
|
return "", errors.Wrap(err, "reading file "+valuesFile)
|
|
|
|
}
|
|
|
|
|
|
|
|
var values templatedata
|
|
|
|
if err = yaml.Unmarshal(def, &values); err != nil {
|
|
|
|
return "", errors.Wrap(err, "unmarshalling file "+toTemplate)
|
|
|
|
}
|
|
|
|
return RenderHelm(string(raw), values)
|
|
|
|
}
|