Allow specifying a default namespace used across all the releases (#39)

* Allow specifying a default namespace used across all the releases

Omit `namespace` in `charts[].namespace` of charts.yaml and then run `helmfile sync -n yourns` to install your charts into `yourns`.

Resolves #31
This commit is contained in:
KUOKA Yusuke 2018-03-01 23:09:02 +09:00 committed by GitHub
parent f02790d566
commit efdede1658
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 20 additions and 2 deletions

12
main.go
View File

@ -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

View File

@ -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