feat: Add `helmfile template --include-crds` (#1568)

This allows you to use helmfile-template output as a GitOps source, when the template output contains CRDs and you use Helm 3.

Helm 3 by default removes CRDs from the template output. If you want to git-commit helmfile-template containing CRDs for GitOps and you use Helm 3 for templating, the only way is provide this newly added `--include-crds` flag.
This commit is contained in:
Yusuke Kuoka 2020-11-05 10:13:25 +09:00 committed by GitHub
parent bdbaa00628
commit 6b86408500
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 24 additions and 4 deletions

View File

@ -248,6 +248,10 @@ func main() {
Name: "validate",
Usage: "validate your manifests against the Kubernetes cluster you are currently pointing at",
},
cli.BoolFlag{
Name: "include-crds",
Usage: "include CRDs in the templated output",
},
cli.BoolFlag{
Name: "skip-deps",
Usage: "skip running `helm repo update` and `helm dependency build`",
@ -717,6 +721,10 @@ func (c configImpl) EmbedValues() bool {
return c.c.Bool("embed-values")
}
func (c configImpl) IncludeCRDs() bool {
return c.c.Bool("include-crds")
}
func (c configImpl) Logger() *zap.SugaredLogger {
return c.c.App.Metadata["logger"].(*zap.SugaredLogger)
}

View File

@ -1433,6 +1433,7 @@ func (a *App) template(r *Run, c TemplateConfigProvider) (bool, []error) {
opts := &state.TemplateOpts{
Set: c.Set(),
IncludeCRDs: c.IncludeCRDs(),
OutputDirTemplate: c.OutputDirTemplate(),
}
return subst.TemplateReleases(helm, c.OutputDir(), c.Values(), args, c.Concurrency(), c.Validate(), opts)

View File

@ -2237,10 +2237,11 @@ services:
}
type configImpl struct {
selectors []string
set []string
output string
skipDeps bool
selectors []string
set []string
output string
includeCRDs bool
skipDeps bool
}
func (a configImpl) Selectors() []string {
@ -2275,6 +2276,10 @@ func (c configImpl) OutputDirTemplate() string {
return ""
}
func (c configImpl) IncludeCRDs() bool {
return c.includeCRDs
}
func (c configImpl) Concurrency() int {
return 1
}

View File

@ -133,6 +133,7 @@ type TemplateConfigProvider interface {
Validate() bool
SkipDeps() bool
OutputDir() string
IncludeCRDs() bool
concurrencyConfig
}

View File

@ -1125,6 +1125,7 @@ func (st *HelmState) runHelmDepBuilds(helm helmexec.Interface, concurrency int,
type TemplateOpts struct {
Set []string
OutputDirTemplate string
IncludeCRDs bool
}
type TemplateOpt interface{ Apply(*TemplateOpts) }
@ -1197,6 +1198,10 @@ func (st *HelmState) TemplateReleases(helm helmexec.Interface, outputDir string,
flags = append(flags, "--validate")
}
if opts.IncludeCRDs {
flags = append(flags, "--include-crds")
}
if len(errs) == 0 {
if err := helm.TemplateRelease(release.Name, release.Chart, flags...); err != nil {
errs = append(errs, err)