diff --git a/main.go b/main.go index c4603132..5d9f781f 100644 --- a/main.go +++ b/main.go @@ -38,6 +38,10 @@ func main() { Name: "kube-context", Usage: "Set kubectl context. Uses current context by default", }, + cli.StringFlag{ + Name: "namespace, n", + Usage: "Set namespace. Uses the namespace set in the context by default", + }, } app.Commands = []cli.Command{ @@ -232,6 +236,7 @@ func before(c *cli.Context) (*state.HelmState, helmexec.Interface, error) { file := c.GlobalString("file") quiet := c.GlobalBool("quiet") kubeContext := c.GlobalString("kube-context") + namespace := c.GlobalString("namespace") state, err := state.ReadFromFile(file) if err != nil { @@ -244,6 +249,13 @@ func before(c *cli.Context) (*state.HelmState, helmexec.Interface, error) { } kubeContext = state.Context } + if namespace != "" { + if state.Namespace != "" { + log.Printf("err: Cannot use option --namespace and set attribute namespace.") + os.Exit(1) + } + state.Namespace = namespace + } var writer io.Writer if !quiet { writer = os.Stdout diff --git a/state/state.go b/state/state.go index 17a94880..774c791a 100644 --- a/state/state.go +++ b/state/state.go @@ -21,6 +21,7 @@ import ( type HelmState struct { BaseChartPath string Context string `yaml:"context"` + Namespace string `yaml:"namespace"` Repositories []RepositorySpec `yaml:"repositories"` Charts []ChartSpec `yaml:"charts"` } @@ -99,6 +100,11 @@ func renderTemplateString(s string) (string, error) { return tplString.String(), nil } +func (state *HelmState) applyDefaultsTo(spec ChartSpec) ChartSpec { + spec.Namespace = state.Namespace + return spec +} + func (state *HelmState) SyncRepos(helm helmexec.Interface) []error { var wg sync.WaitGroup errs := []error{} @@ -137,8 +143,8 @@ func (state *HelmState) SyncCharts(helm helmexec.Interface, additonalValues []st for w := 1; w <= workerLimit; w++ { go func() { for chart := range jobQueue { - - flags, flagsErr := flagsForChart(state.BaseChartPath, &chart) + chartWithDefaults := state.applyDefaultsTo(chart) + flags, flagsErr := flagsForChart(state.BaseChartPath, &chartWithDefaults) if flagsErr != nil { errQueue <- flagsErr doneQueue <- true