-
Notifications
You must be signed in to change notification settings - Fork 565
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: experimental integration with helm-x
This enhances helmfile so that it can: - Treat K8s manifests directories and Kustomize projects as charts - Add adhoc chart dependencies on sync/diff/template without forking or modifying chart(s) (#649) - Add adhoc patches(JSON Patch or Strategic Merge Patch supported) to be applied to the K8s resources before sync/diff/template, without forking or modifyin chart(s) (#650) The usage is as outlined in https://github.com/mumoshu/helm-x/tree/master/examples/helmfile. Add any or all of `dependencies:`, `jsonPatches:` and `strategicMergePatches:` so that it adds additional flags to `helm` calls that is only supported by `helm x`. ```yaml releases: - name: kustomize chart: ../kustomize - name: manifests chart: ../manifests - name: foo chart: incubator/raw dependencies: - alias: bar chart: incubator/raw values: - values.yaml - bar: enabled: true resources: - apiVersion: v1 kind: Pod metadata: name: bar spec: containers: - command: - sleep - 1000 image: alpine:3.9.4 imagePullPolicy: IfNotPresent name: bar jsonPatches: - target: version: v1 kind: Pod name: foo patch: - op: replace path: /spec/containers/0/command value: - sleep - "123" strategicMergePatches: - apiVersion: v1 kind: Pod metadata: name: bar spec: containers: - name: bar command: - sleep - "234" ``` You can alternatively provide `source: path/to/patch.yaml` for `jsonPatches` and `strategicMergePatches` items to externalize it. Add `.gotmpl` suffix like you would do for values files for templating. When running `helmfile` you must point `--helm-binary` to the `helm-x` binary like below: ``` $ helmfile --helm-binary ~/.helm/plugins/helm-x/bin/helm-x --log-level debug apply ``` after installing the [helm-x](https://github.com/mumoshu/helm-x) plugin. The integration should ideally be automatic. That is, it shouldn't force you to set `--helm-binary`. But I had no other way to not bloat helmfile's codebase to just add this experimental feature. Resolves #649 Resolves #650
- Loading branch information
Showing
3 changed files
with
101 additions
and
6 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
package state | ||
|
||
type Dependency struct { | ||
Chart string `yaml:"chart"` | ||
Version string `yaml:"version"` | ||
Alias string `yaml:"alias"` | ||
} | ||
|
||
func (st *HelmState) appendHelmXFlags(flags []string, release *ReleaseSpec) ([]string, error) { | ||
for _, d := range release.Dependencies { | ||
var dep string | ||
if d.Alias != "" { | ||
dep += d.Alias + "=" | ||
} | ||
dep += d.Chart | ||
if d.Version != "" { | ||
dep += ":" + d.Version | ||
} | ||
flags = append(flags, "--dependency", dep) | ||
} | ||
|
||
jsonPatches := release.JSONPatches | ||
if len(jsonPatches) > 0 { | ||
generatedFiles, err := st.generateTemporaryValuesFiles(jsonPatches, release.MissingFileHandler) | ||
if err != nil { | ||
return nil, err | ||
} | ||
|
||
for _, f := range generatedFiles { | ||
flags = append(flags, "--json-patch", f) | ||
} | ||
|
||
release.generatedValues = append(release.generatedValues, generatedFiles...) | ||
} | ||
|
||
strategicMergePatches := release.StrategicMergePatches | ||
if len(strategicMergePatches) > 0 { | ||
generatedFiles, err := st.generateTemporaryValuesFiles(strategicMergePatches, release.MissingFileHandler) | ||
if err != nil { | ||
return nil, err | ||
} | ||
|
||
for _, f := range generatedFiles { | ||
flags = append(flags, "--strategic-merge-patch", f) | ||
} | ||
|
||
release.generatedValues = append(release.generatedValues, generatedFiles...) | ||
} | ||
|
||
return flags, nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters