Merge pull request #222 from mumoshu/wait-for-release

feat: `wait: true` in each release
This commit is contained in:
KUOKA Yusuke 2018-08-23 10:43:01 +09:00 committed by GitHub
commit 0541731350
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 51 additions and 34 deletions

View File

@ -44,11 +44,9 @@ helmDefaults:
tillerNamespace: tiller-namespace #dedicated default key for tiller-namespace
kubeContext: kube-context #dedicated default key for kube-context
args:
- "--wait"
- "--recreate-pods"
- "--timeout=600"
- "--force"
- "--reset-values"
releases:
# Published chart example
@ -59,21 +57,23 @@ releases:
chart: roboll/vault-secret-manager # the chart being installed to create this release, referenced by `repository/chart` syntax
version: ~1.24.1 # the semver of the chart. range constraint is supported
values:
- vault.yaml # value files (--values)
- db: # inline values. Passed via a temporary values file (--values)
# value files passed via --values
- vault.yaml
# inline values, passed via a temporary values file and --values
- address: https://vault.example.com
db:
username: {{ requiredEnv "DB_USERNAME" }}
# value taken from environment variable. Quotes are necessary. Will throw an error if the environment variable is not set. $DB_PASSWORD needs to be set in the calling environment ex: export DB_PASSWORD='password1'
password: {{ requiredEnv "DB_PASSWORD" }}
proxy:
# Interpolate environment variable with a fixed string
domain: {{ requiredEnv "PLATFORM_ID" }}.my-domain.com
scheme: {{ env "SCHEME" | default "https" }}
# will attempt to decrypt it using helm-secrets plugin
secrets:
- vault_secret.yaml # will attempt to decrypt it using helm-secrets plugin
set: # values (--set)
- name: address
value: https://vault.example.com
- name: db.password
value: {{ requiredEnv "DB_PASSWORD" }} # value taken from environment variable. Quotes are necessary. Will throw an error if the environment variable is not set. $DB_PASSWORD needs to be set in the calling environment ex: export DB_PASSWORD='password1'
- name: proxy.domain
value: {{ requiredEnv "PLATFORM_ID" }}.my-domain.com # Interpolate environment variable with a fixed string
- name: proxy.scheme
value: {{ env "SCHEME" | default "https" }}
- vault_secret.yaml
# wait for k8s resources via --wait. Defaults to `false`
wait: true
# Local chart example
- name: grafana # name of this release
@ -82,6 +82,7 @@ releases:
values:
- "../../my-values/grafana/values.yaml" # Values file (relative path to manifest)
- ./values/{{ requiredEnv "PLATFORM_ENV" }}/config.yaml # Values file taken from path with environment variable. $PLATFORM_ENV must be set in the calling environment.
wait: true
```

View File

@ -60,6 +60,7 @@ type ReleaseSpec struct {
Chart string `yaml:"chart"`
Version string `yaml:"version"`
Verify bool `yaml:"verify"`
Wait bool `yaml:"wait"`
// Name is the name of this release
Name string `yaml:"name"`
@ -215,7 +216,7 @@ func (state *HelmState) SyncReleases(helm helmexec.Interface, additionalValues [
go func() {
for release := range jobQueue {
state.applyDefaultsTo(release)
flags, flagsErr := state.flagsForRelease(helm, state.BaseChartPath, release)
flags, flagsErr := state.flagsForUpgrade(helm, state.BaseChartPath, release)
if flagsErr != nil {
errQueue <- flagsErr
doneQueue <- true
@ -295,7 +296,7 @@ func (state *HelmState) DiffReleases(helm helmexec.Interface, additionalValues [
state.applyDefaultsTo(release)
flags, err := state.flagsForRelease(helm, state.BaseChartPath, release)
flags, err := state.flagsForDiff(helm, state.BaseChartPath, release)
if err != nil {
errs = append(errs, err)
}
@ -379,7 +380,7 @@ func (state *HelmState) LintReleases(helm helmexec.Interface, additionalValues [
go func() {
for release := range jobQueue {
errs := []error{}
flags, err := state.flagsForRelease(helm, state.BaseChartPath, release)
flags, err := state.flagsForLint(helm, state.BaseChartPath, release)
if err != nil {
errs = append(errs, err)
}
@ -417,21 +418,8 @@ func (state *HelmState) LintReleases(helm helmexec.Interface, additionalValues [
chartPath = path.Join(chartPath, chartNameWithoutRepository(release.Chart))
}
// strip version from the slice returned from flagsForRelease
realFlags := []string{}
isVersion := false
for _, v := range flags {
if v == "--version" {
isVersion = true
} else if isVersion {
isVersion = false
} else {
realFlags = append(realFlags, v)
}
}
if len(errs) == 0 {
if err := helm.Lint(chartPath, realFlags...); err != nil {
if err := helm.Lint(chartPath, flags...); err != nil {
errs = append(errs, err)
}
}
@ -663,14 +651,42 @@ func chartNameWithoutRepository(chart string) string {
return chartSplit[len(chartSplit)-1]
}
func (state *HelmState) flagsForRelease(helm helmexec.Interface, basePath string, release *ReleaseSpec) ([]string, error) {
func (state *HelmState) flagsForUpgrade(helm helmexec.Interface, basePath string, release *ReleaseSpec) ([]string, error) {
flags := []string{}
if release.Verify {
flags = append(flags, "--verify")
}
if release.Wait {
flags = append(flags, "--wait")
}
if release.Version != "" {
flags = append(flags, "--version", release.Version)
}
common, err := state.namespaceAndValuesFlags(helm, basePath, release)
if err != nil {
return nil, err
}
return append(flags, common...), nil
}
func (state *HelmState) flagsForDiff(helm helmexec.Interface, basePath string, release *ReleaseSpec) ([]string, error) {
flags := []string{}
if release.Version != "" {
flags = append(flags, "--version", release.Version)
}
if release.Verify {
flags = append(flags, "--verify")
common, err := state.namespaceAndValuesFlags(helm, basePath, release)
if err != nil {
return nil, err
}
return append(flags, common...), nil
}
func (state *HelmState) flagsForLint(helm helmexec.Interface, basePath string, release *ReleaseSpec) ([]string, error) {
return state.namespaceAndValuesFlags(helm, basePath, release)
}
func (state *HelmState) namespaceAndValuesFlags(helm helmexec.Interface, basePath string, release *ReleaseSpec) ([]string, error) {
flags := []string{}
if release.Namespace != "" {
flags = append(flags, "--namespace", release.Namespace)
}