@ -36,8 +36,11 @@ import (
"helm.sh/helm/v3/pkg/repo"
"helm.sh/helm/v3/pkg/repo"
)
)
const outputFlag = "output"
const (
const postRenderFlag = "post-renderer"
outputFlag = "output"
postRenderFlag = "post-renderer"
postRenderArgsFlag = "post-renderer-args"
)
func addValueOptionsFlags ( f * pflag . FlagSet , v * values . Options ) {
func addValueOptionsFlags ( f * pflag . FlagSet , v * values . Options ) {
f . StringSliceVarP ( & v . ValueFiles , "values" , "f" , [ ] string { } , "specify values in a YAML file or a URL (can specify multiple)" )
f . StringSliceVarP ( & v . ValueFiles , "values" , "f" , [ ] string { } , "specify values in a YAML file or a URL (can specify multiple)" )
@ -112,30 +115,70 @@ func (o *outputValue) Set(s string) error {
}
}
func bindPostRenderFlag ( cmd * cobra . Command , varRef * postrender . PostRenderer ) {
func bindPostRenderFlag ( cmd * cobra . Command , varRef * postrender . PostRenderer ) {
cmd . Flags ( ) . Var ( & postRenderer { varRef } , postRenderFlag , "the path to an executable to be used for post rendering. If it exists in $PATH, the binary will be used, otherwise it will try to look for the executable at the given path" )
p := & postRendererOptions { varRef , "" , [ ] string { } }
cmd . Flags ( ) . Var ( & postRendererExecFlag { p } , postRenderFlag , "the path to an executable to be used for post rendering. If it exists in $PATH, the binary will be used, otherwise it will try to look for the executable at the given path" )
cmd . Flags ( ) . Var ( & postRendererArgsFlag { p } , postRenderArgsFlag , "the args to an executable to be used for post rendering. (can specify multiple)" )
}
type postRendererOptions struct {
renderer * postrender . PostRenderer
binaryPath string
args [ ] string
}
}
type postRenderer struct {
type postRenderer ExecFlag struct {
renderer * postrender . PostRenderer
options * postRendererOptions
}
}
func ( p postRenderer ) String ( ) string {
func ( p postRenderer ExecFlag ) String ( ) string {
return "exec"
return " "
}
}
func ( p postRenderer ) Type ( ) string {
func ( p postRenderer ExecFlag ) Type ( ) string {
return "postrenderer "
return "postrenderer -exec "
}
}
func ( p postRenderer ) Set ( s string ) error {
func ( p postRenderer ExecFlag ) Set ( s string ) error {
if s == "" {
if s == "" {
return nil
return nil
}
}
pr , err := postrender . NewExec ( s )
p . options . binaryPath = s
pr , err := postrender . NewExec ( p . options . binaryPath , p . options . args )
if err != nil {
if err != nil {
return err
return err
}
}
* p . renderer = pr
* p . options . renderer = pr
return nil
}
type postRendererArgsFlag struct {
options * postRendererOptions
}
func ( p postRendererArgsFlag ) String ( ) string {
return ""
}
func ( p postRendererArgsFlag ) Type ( ) string {
return "postrenderer-args"
}
func ( p postRendererArgsFlag ) Set ( s string ) error {
if s == "" {
return nil
}
p . options . args = append ( p . options . args , s )
// skip if postRenderFlag not set or parsed
if len ( p . options . binaryPath ) == 0 {
return nil
}
// update if already create PostRenderer
pr , err := postrender . NewExec ( p . options . binaryPath , p . options . args )
if err != nil {
return err
}
* p . options . renderer = pr
return nil
return nil
}
}