chore: first step towards migration to cobra (#637)

I will start by making as much as possible code in `main.go` independent from urfave/cli, and this illustrates how we can do that by introducing a Config interface that delegates any config value fetch to urfave/cli. We will implement an cobra/pflag impl of the interface when helmfile finally migrates to cobra.
This commit is contained in:
KUOKA Yusuke 2019-06-01 14:00:26 +09:00 committed by GitHub
parent c68fc5bc50
commit f6057a1cca
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 39 additions and 8 deletions

47
main.go
View File

@ -193,7 +193,7 @@ func main() {
return errs return errs
} }
_, errs := executeDiffCommand(c, state, helm, c.Bool("detailed-exitcode"), c.Bool("suppress-secrets")) _, errs := ExecuteDiffCommand(NewUrfaveCliConfigImpl(c), state, helm, c.Bool("detailed-exitcode"), c.Bool("suppress-secrets"))
return errs return errs
}) })
}, },
@ -366,7 +366,7 @@ func main() {
return errs return errs
} }
releases, errs := executeDiffCommand(c, st, helm, true, c.Bool("suppress-secrets")) releases, errs := ExecuteDiffCommand(NewUrfaveCliConfigImpl(c), st, helm, true, c.Bool("suppress-secrets"))
releasesToBeDeleted, err := st.DetectReleasesToBeDeleted(helm) releasesToBeDeleted, err := st.DetectReleasesToBeDeleted(helm)
if err != nil { if err != nil {
@ -616,17 +616,48 @@ func executeTemplateCommand(c *cli.Context, state *state.HelmState, helm helmexe
return state.TemplateReleases(helm, values, args, workers) return state.TemplateReleases(helm, values, args, workers)
} }
func executeDiffCommand(c *cli.Context, st *state.HelmState, helm helmexec.Interface, detailedExitCode, suppressSecrets bool) ([]*state.ReleaseSpec, []error) { type Config interface {
args := argparser.GetArgs(c.String("args"), st) HasCommandName(string) bool
Values() []string
Concurrency() int
Args() string
}
type configImpl struct {
c *cli.Context
}
func NewUrfaveCliConfigImpl(c *cli.Context) configImpl {
return configImpl{
c: c,
}
}
func (c configImpl) Values() []string {
return c.c.StringSlice("values")
}
func (c configImpl) Args() string {
return c.c.String("args")
}
func (c configImpl) Concurrency() int {
return c.c.Int("concurrency")
}
func (c configImpl) HasCommandName(name string) bool {
return c.c.Command.HasName(name)
}
func ExecuteDiffCommand(c Config, st *state.HelmState, helm helmexec.Interface, detailedExitCode, suppressSecrets bool) ([]*state.ReleaseSpec, []error) {
args := argparser.GetArgs(c.Args(), st)
if len(args) > 0 { if len(args) > 0 {
helm.SetExtraArgs(args...) helm.SetExtraArgs(args...)
} }
values := c.StringSlice("values") triggerCleanupEvents := c.HasCommandName("diff")
workers := c.Int("concurrency")
triggerCleanupEvents := c.Command.HasName("diff")
return st.DiffReleases(helm, values, workers, detailedExitCode, suppressSecrets, triggerCleanupEvents) return st.DiffReleases(helm, c.Values(), c.Concurrency(), detailedExitCode, suppressSecrets, triggerCleanupEvents)
} }
func findAndIterateOverDesiredStatesUsingFlags(c *cli.Context, converge func(*state.HelmState, helmexec.Interface, app.Context) []error) error { func findAndIterateOverDesiredStatesUsingFlags(c *cli.Context, converge func(*state.HelmState, helmexec.Interface, app.Context) []error) error {