Skip to content

Commit

Permalink
render: Add support for templates dirs
Browse files Browse the repository at this point in the history
  • Loading branch information
geaaru committed Oct 1, 2023
1 parent 66beb6a commit 5f0e19f
Show file tree
Hide file tree
Showing 3 changed files with 90 additions and 18 deletions.
73 changes: 67 additions & 6 deletions pkg/helpers/render.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ package helpers
import (
"fmt"
"os"
"path"
"regexp"

"github.com/pkg/errors"
"gopkg.in/yaml.v3"
Expand All @@ -30,8 +32,49 @@ import (
"helm.sh/helm/v3/pkg/engine"
)

func RenderContent(raw, valuesFile, defaultFile, originFile string,
overrideValues map[string]interface{}) (string, error) {
func GetTemplates(templateDirs []string) ([]*chart.File, error) {
var regexConfs = regexp.MustCompile(`.yaml$`)

ans := []*chart.File{}
for _, tdir := range templateDirs {
dirEntries, err := os.ReadDir(tdir)
if err != nil {
return ans, err
}

for _, file := range dirEntries {
if file.IsDir() {
continue
}

if !regexConfs.MatchString(file.Name()) {
continue
}

content, err := os.ReadFile(path.Join(tdir, file.Name()))
if err != nil {
return ans, fmt.Errorf(
"Error on read template file %s/%s: %s",
tdir, file.Name(), err.Error())
}

ans = append(ans, &chart.File{
Name: file.Name(),
Data: content,
})

}
}

return ans, nil
}

func RenderContentWithTemplates(
raw, valuesFile, defaultFile, originFile string,
overrideValues map[string]interface{},
templateDirs []string) (string, error) {

var err error

if valuesFile == "" && defaultFile == "" {
return "", errors.New("Both render files are missing")
Expand Down Expand Up @@ -81,15 +124,26 @@ func RenderContent(raw, valuesFile, defaultFile, originFile string,
}
}

charts := []*chart.File{}
if len(templateDirs) > 0 {
charts, err = GetTemplates(templateDirs)
if err != nil {
return "", err
}
}

charts = append(charts, &chart.File{
Name: "templates",
Data: []byte(raw),
})

c := &chart.Chart{
Metadata: &chart.Metadata{
Name: "",
Version: "",
},
Templates: []*chart.File{
{Name: "templates", Data: []byte(raw)},
},
Values: map[string]interface{}{"Values": d},
Templates: charts,
Values: map[string]interface{}{"Values": d},
}

v, err := chartutil.CoalesceValues(c, map[string]interface{}{"Values": values})
Expand All @@ -105,3 +159,10 @@ func RenderContent(raw, valuesFile, defaultFile, originFile string,

return out["templates"], nil
}

func RenderContent(raw, valuesFile, defaultFile, originFile string,
overrideValues map[string]interface{}) (string, error) {

return RenderContentWithTemplates(raw, valuesFile, defaultFile, originFile,
overrideValues, []string{})
}
27 changes: 18 additions & 9 deletions pkg/loader/loader.go
Original file line number Diff line number Diff line change
Expand Up @@ -393,11 +393,12 @@ func (i *LxdCInstance) LoadEnvironments() error {

if i.Config.IsEnableRenderEngine() {
// Render file
renderOut, err := helpers.RenderContent(string(content),
renderOut, err := helpers.RenderContentWithTemplates(string(content),
i.Config.RenderValuesFile,
i.Config.RenderDefaultFile,
file.Name(),
i.Config.RenderEnvsVars,
i.Config.RenderTemplatesDirs,
)
if err != nil {
return err
Expand Down Expand Up @@ -459,11 +460,12 @@ func (i *LxdCInstance) loadExtraFiles(env *specs.LxdCEnvironment) error {

if i.Config.IsEnableRenderEngine() {
// Render file
renderOut, err := helpers.RenderContent(string(content),
renderOut, err := helpers.RenderContentWithTemplates(string(content),
i.Config.RenderValuesFile,
i.Config.RenderDefaultFile,
nfile,
i.Config.RenderEnvsVars,
i.Config.RenderTemplatesDirs,
)
if err != nil {
return err
Expand Down Expand Up @@ -509,11 +511,12 @@ func (i *LxdCInstance) loadExtraFiles(env *specs.LxdCEnvironment) error {

if i.Config.IsEnableRenderEngine() {
// Render file
renderOut, err := helpers.RenderContent(string(content),
renderOut, err := helpers.RenderContentWithTemplates(string(content),
i.Config.RenderValuesFile,
i.Config.RenderDefaultFile,
pfile,
i.Config.RenderEnvsVars,
i.Config.RenderTemplatesDirs,
)
if err != nil {
return err
Expand Down Expand Up @@ -559,11 +562,12 @@ func (i *LxdCInstance) loadExtraFiles(env *specs.LxdCEnvironment) error {

if i.Config.IsEnableRenderEngine() {
// Render file
renderOut, err := helpers.RenderContent(string(content),
renderOut, err := helpers.RenderContentWithTemplates(string(content),
i.Config.RenderValuesFile,
i.Config.RenderDefaultFile,
sfile,
i.Config.RenderEnvsVars,
i.Config.RenderTemplatesDirs,
)
if err != nil {
return err
Expand Down Expand Up @@ -609,11 +613,12 @@ func (i *LxdCInstance) loadExtraFiles(env *specs.LxdCEnvironment) error {

if i.Config.IsEnableRenderEngine() {
// Render file
renderOut, err := helpers.RenderContent(string(content),
renderOut, err := helpers.RenderContentWithTemplates(string(content),
i.Config.RenderValuesFile,
i.Config.RenderDefaultFile,
afile,
i.Config.RenderEnvsVars,
i.Config.RenderTemplatesDirs,
)
if err != nil {
return err
Expand Down Expand Up @@ -659,11 +664,12 @@ func (i *LxdCInstance) loadExtraFiles(env *specs.LxdCEnvironment) error {

if i.Config.IsEnableRenderEngine() {
// Render file
renderOut, err := helpers.RenderContent(string(content),
renderOut, err := helpers.RenderContentWithTemplates(string(content),
i.Config.RenderValuesFile,
i.Config.RenderDefaultFile,
cfile,
i.Config.RenderEnvsVars,
i.Config.RenderTemplatesDirs,
)
if err != nil {
return err
Expand Down Expand Up @@ -709,11 +715,12 @@ func (i *LxdCInstance) loadExtraFiles(env *specs.LxdCEnvironment) error {

if i.Config.IsEnableRenderEngine() {
// Render file
renderOut, err := helpers.RenderContent(string(content),
renderOut, err := helpers.RenderContentWithTemplates(string(content),
i.Config.RenderValuesFile,
i.Config.RenderDefaultFile,
gfile,
i.Config.RenderEnvsVars,
i.Config.RenderTemplatesDirs,
)
if err != nil {
return err
Expand Down Expand Up @@ -845,11 +852,12 @@ func (i *LxdCInstance) getHooks(hfile, hfileAbs string, proj *specs.LxdCProject)

if i.Config.IsEnableRenderEngine() {
// Render file
renderOut, err := helpers.RenderContent(string(content),
renderOut, err := helpers.RenderContentWithTemplates(string(content),
i.Config.RenderValuesFile,
i.Config.RenderDefaultFile,
hfile,
i.Config.RenderEnvsVars,
i.Config.RenderTemplatesDirs,
)
if err != nil {
return ans, err
Expand Down Expand Up @@ -897,11 +905,12 @@ func (i *LxdCInstance) loadEnvFile(envBaseDir, efile string, proj *specs.LxdCPro

if i.Config.IsEnableRenderEngine() {
// Render file
renderOut, err := helpers.RenderContent(string(content),
renderOut, err := helpers.RenderContentWithTemplates(string(content),
i.Config.RenderValuesFile,
i.Config.RenderDefaultFile,
efile,
i.Config.RenderEnvsVars,
i.Config.RenderTemplatesDirs,
)
if err != nil {
return nil, err
Expand Down
8 changes: 5 additions & 3 deletions pkg/specs/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,10 @@ type LxdComposeConfig struct {
Logging LxdCLogging `mapstructure:"logging" json:"logging,omitempty" yaml:"logging,omitempty"`
EnvironmentDirs []string `mapstructure:"env_dirs,omitempty" json:"env_dirs,omitempty" yaml:"env_dirs,omitempty"`

RenderDefaultFile string `mapstructure:"render_default_file,omitempty" json:"render_default_file,omitempty" yaml:"render_default_file,omitempty"`
RenderValuesFile string `mapstructure:"render_values_file,omitempty" json:"render_values_file,omitempty" yaml:"render_values_file,omitempty"`
RenderEnvsVars map[string]interface{} `mapstructure:"-" json:"-" yaml:"-"`
RenderDefaultFile string `mapstructure:"render_default_file,omitempty" json:"render_default_file,omitempty" yaml:"render_default_file,omitempty"`
RenderValuesFile string `mapstructure:"render_values_file,omitempty" json:"render_values_file,omitempty" yaml:"render_values_file,omitempty"`
RenderEnvsVars map[string]interface{} `mapstructure:"-" json:"-" yaml:"-"`
RenderTemplatesDirs []string `mapstructure:"render_templates_dirs,omitempty" json:"render_templates_dirs,omitempty" yaml:"render_templates_dirs,omitempty"`
}

type LxdCGeneral struct {
Expand Down Expand Up @@ -171,6 +172,7 @@ func GenDefault(viper *v.Viper) {
viper.SetDefault("general.lxd_confdir", "")
viper.SetDefault("render_default_file", "")
viper.SetDefault("render_values_file", "")
viper.SetDefault("render_templates_dirs", []string{""})

viper.SetDefault("logging.level", "info")
viper.SetDefault("logging.enable_logfile", false)
Expand Down

0 comments on commit 5f0e19f

Please sign in to comment.