fix: Set HelmBinary in execer constructor (#928)
This overrides the default helm command, if provided, as soon as possible. This way it is already used in `visitStates`. I ran into an issue using `HELM3` and `--helm-binary` together with helm-secrets. I previously used tillerless, which i could now remove. This however caused `DecryptSecret` to fail, as it would still use the helm2 binary; because it runs before the first `helm.SetHelmBinary` call. While helm-secrets is not fully helm3 compatible yet, its uses within helmfile are, and i was able to just install it as a helm3 plugin.
This commit is contained in:
parent
3f02b86640
commit
6955d07ea8
1
main.go
1
main.go
|
|
@ -50,6 +50,7 @@ func main() {
|
||||||
cli.StringFlag{
|
cli.StringFlag{
|
||||||
Name: "helm-binary, b",
|
Name: "helm-binary, b",
|
||||||
Usage: "path to helm binary",
|
Usage: "path to helm binary",
|
||||||
|
Value: "helm",
|
||||||
},
|
},
|
||||||
cli.StringFlag{
|
cli.StringFlag{
|
||||||
Name: "file, f",
|
Name: "file, f",
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,6 @@ type App struct {
|
||||||
Env string
|
Env string
|
||||||
Namespace string
|
Namespace string
|
||||||
Selectors []string
|
Selectors []string
|
||||||
HelmBinary string
|
|
||||||
Args string
|
Args string
|
||||||
ValuesFiles []string
|
ValuesFiles []string
|
||||||
Set map[string]interface{}
|
Set map[string]interface{}
|
||||||
|
|
@ -69,12 +68,11 @@ func New(conf ConfigProvider) *App {
|
||||||
Env: conf.Env(),
|
Env: conf.Env(),
|
||||||
Namespace: conf.Namespace(),
|
Namespace: conf.Namespace(),
|
||||||
Selectors: conf.Selectors(),
|
Selectors: conf.Selectors(),
|
||||||
HelmBinary: conf.HelmBinary(),
|
|
||||||
Args: conf.Args(),
|
Args: conf.Args(),
|
||||||
FileOrDir: conf.FileOrDir(),
|
FileOrDir: conf.FileOrDir(),
|
||||||
ValuesFiles: conf.StateValuesFiles(),
|
ValuesFiles: conf.StateValuesFiles(),
|
||||||
Set: conf.StateValuesSet(),
|
Set: conf.StateValuesSet(),
|
||||||
helmExecer: helmexec.New(conf.Logger(), conf.KubeContext(), &helmexec.ShellRunner{
|
helmExecer: helmexec.New(conf.HelmBinary(), conf.Logger(), conf.KubeContext(), &helmexec.ShellRunner{
|
||||||
Logger: conf.Logger(),
|
Logger: conf.Logger(),
|
||||||
}),
|
}),
|
||||||
})
|
})
|
||||||
|
|
@ -534,10 +532,6 @@ func (a *App) Wrap(converge func(*state.HelmState, helmexec.Interface) []error)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if a.HelmBinary != "" {
|
|
||||||
helm.SetHelmBinary(a.HelmBinary)
|
|
||||||
}
|
|
||||||
|
|
||||||
type Key struct {
|
type Key struct {
|
||||||
TillerNamespace, Name string
|
TillerNamespace, Name string
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1918,7 +1918,7 @@ func (mock *mockRunner) Execute(cmd string, args []string, env map[string]string
|
||||||
}
|
}
|
||||||
|
|
||||||
func MockExecer(logger *zap.SugaredLogger, kubeContext string) helmexec.Interface {
|
func MockExecer(logger *zap.SugaredLogger, kubeContext string) helmexec.Interface {
|
||||||
execer := helmexec.New(logger, kubeContext, &mockRunner{})
|
execer := helmexec.New("helm", logger, kubeContext, &mockRunner{})
|
||||||
return execer
|
return execer
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -13,10 +13,6 @@ import (
|
||||||
"go.uber.org/zap/zapcore"
|
"go.uber.org/zap/zapcore"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
|
||||||
command = "helm"
|
|
||||||
)
|
|
||||||
|
|
||||||
type decryptedSecret struct {
|
type decryptedSecret struct {
|
||||||
mutex sync.RWMutex
|
mutex sync.RWMutex
|
||||||
bytes []byte
|
bytes []byte
|
||||||
|
|
@ -50,9 +46,9 @@ func NewLogger(writer io.Writer, logLevel string) *zap.SugaredLogger {
|
||||||
}
|
}
|
||||||
|
|
||||||
// New for running helm commands
|
// New for running helm commands
|
||||||
func New(logger *zap.SugaredLogger, kubeContext string, runner Runner) *execer {
|
func New(helmBinary string, logger *zap.SugaredLogger, kubeContext string, runner Runner) *execer {
|
||||||
return &execer{
|
return &execer{
|
||||||
helmBinary: command,
|
helmBinary: helmBinary,
|
||||||
logger: logger,
|
logger: logger,
|
||||||
kubeContext: kubeContext,
|
kubeContext: kubeContext,
|
||||||
runner: runner,
|
runner: runner,
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ func (mock *mockRunner) Execute(cmd string, args []string, env map[string]string
|
||||||
}
|
}
|
||||||
|
|
||||||
func MockExecer(logger *zap.SugaredLogger, kubeContext string) *execer {
|
func MockExecer(logger *zap.SugaredLogger, kubeContext string) *execer {
|
||||||
execer := New(logger, kubeContext, &mockRunner{})
|
execer := New("helm", logger, kubeContext, &mockRunner{})
|
||||||
return execer
|
return execer
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -33,7 +33,7 @@ func MockExecer(logger *zap.SugaredLogger, kubeContext string) *execer {
|
||||||
func TestNewHelmExec(t *testing.T) {
|
func TestNewHelmExec(t *testing.T) {
|
||||||
buffer := bytes.NewBufferString("something")
|
buffer := bytes.NewBufferString("something")
|
||||||
logger := NewLogger(buffer, "debug")
|
logger := NewLogger(buffer, "debug")
|
||||||
helm := New(logger, "dev", &ShellRunner{
|
helm := New("helm", logger, "dev", &ShellRunner{
|
||||||
Logger: logger,
|
Logger: logger,
|
||||||
})
|
})
|
||||||
if helm.kubeContext != "dev" {
|
if helm.kubeContext != "dev" {
|
||||||
|
|
@ -50,7 +50,7 @@ func TestNewHelmExec(t *testing.T) {
|
||||||
func Test_SetExtraArgs(t *testing.T) {
|
func Test_SetExtraArgs(t *testing.T) {
|
||||||
buffer := bytes.NewBufferString("something")
|
buffer := bytes.NewBufferString("something")
|
||||||
logger := NewLogger(buffer, "debug")
|
logger := NewLogger(buffer, "debug")
|
||||||
helm := New(NewLogger(os.Stdout, "info"), "dev", &ShellRunner{
|
helm := New("helm", NewLogger(os.Stdout, "info"), "dev", &ShellRunner{
|
||||||
Logger: logger,
|
Logger: logger,
|
||||||
})
|
})
|
||||||
helm.SetExtraArgs()
|
helm.SetExtraArgs()
|
||||||
|
|
@ -70,7 +70,7 @@ func Test_SetExtraArgs(t *testing.T) {
|
||||||
func Test_SetHelmBinary(t *testing.T) {
|
func Test_SetHelmBinary(t *testing.T) {
|
||||||
buffer := bytes.NewBufferString("something")
|
buffer := bytes.NewBufferString("something")
|
||||||
logger := NewLogger(buffer, "debug")
|
logger := NewLogger(buffer, "debug")
|
||||||
helm := New(NewLogger(os.Stdout, "info"), "dev", &ShellRunner{
|
helm := New("helm", NewLogger(os.Stdout, "info"), "dev", &ShellRunner{
|
||||||
Logger: logger,
|
Logger: logger,
|
||||||
})
|
})
|
||||||
if helm.helmBinary != "helm" {
|
if helm.helmBinary != "helm" {
|
||||||
|
|
|
||||||
|
|
@ -524,7 +524,7 @@ func TestHelmState_flagsForUpgrade(t *testing.T) {
|
||||||
HelmDefaults: tt.defaults,
|
HelmDefaults: tt.defaults,
|
||||||
valsRuntime: valsRuntime,
|
valsRuntime: valsRuntime,
|
||||||
}
|
}
|
||||||
helm := helmexec.New(logger, "default", &helmexec.ShellRunner{
|
helm := helmexec.New("helm", logger, "default", &helmexec.ShellRunner{
|
||||||
Logger: logger,
|
Logger: logger,
|
||||||
})
|
})
|
||||||
args, err := state.flagsForUpgrade(helm, tt.release, 0)
|
args, err := state.flagsForUpgrade(helm, tt.release, 0)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue