-
Notifications
You must be signed in to change notification settings - Fork 564
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: patching chart without forking it #650
Comments
In combination with helmfile's ability to apply templates on patches, this seems like a generalized version of #589. This isn't allow you to use |
mumoshu
added a commit
that referenced
this issue
Jun 11, 2019
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
mumoshu
added a commit
that referenced
this issue
Jun 12, 2019
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
mumoshu
added a commit
that referenced
this issue
Jun 12, 2019
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
This is great, I have the same scenario (use case) with linkerd. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Use-cases
istioctl
. You don't even need to fork upstream charts or modify your chart.values.yaml
exposed.Again this is a shameless plug: Adding
helm-x
integration to helmfile would allow you to apply patches(JSON Patch and Strategic-Merge Patch) before helm-installing it, and that's possible without modifying or forking it.The
patches
setting results in runninghelm x upgrade --json-patch jsonpatch.yaml --strategic-merge-patch strategicmergepatch.yaml sp/podinfo --version 2.0.1
...on
helmfile syncfor example, that has the same effect as running (1)
helm template -o dir/to render the chart to a directory and (2) crerating
kustomization.yamlwith all the rendered manifests in its
resources:section and corresponding patch definitions in it and (3) running
kustomize buildto apply patches to all the manifests in the dir and (4) finally installing it as a local chart by running
helm upgrade temp/local/chart`.See https://github.com/mumoshu/helm-x for more information.
The text was updated successfully, but these errors were encountered: