{"id":26397349,"url":"https://github.com/thalesgroup/helm-spray","last_synced_at":"2025-04-09T07:05:58.704Z","repository":{"id":41188645,"uuid":"154696241","full_name":"ThalesGroup/helm-spray","owner":"ThalesGroup","description":"Helm plugin for installing or upgrading sub-charts from an umbrella-chart using dependency orders","archived":false,"fork":false,"pushed_at":"2025-03-19T08:17:01.000Z","size":865,"stargazers_count":76,"open_issues_count":15,"forks_count":17,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-04-02T06:10:28.579Z","etag":null,"topics":["chart","helm","helm-plugin","helm-spray","kubernetes","umbrella-chart"],"latest_commit_sha":null,"homepage":"https://thalesgroup.github.io/helm-spray/","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ThalesGroup.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-10-25T15:39:41.000Z","updated_at":"2025-03-19T08:16:57.000Z","dependencies_parsed_at":"2024-04-19T14:27:50.251Z","dependency_job_id":"894e60dd-c67d-4b08-a525-5cb885ff11d5","html_url":"https://github.com/ThalesGroup/helm-spray","commit_stats":null,"previous_names":["gemalto/helm-spray"],"tags_count":39,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ThalesGroup%2Fhelm-spray","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ThalesGroup%2Fhelm-spray/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ThalesGroup%2Fhelm-spray/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ThalesGroup%2Fhelm-spray/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ThalesGroup","download_url":"https://codeload.github.com/ThalesGroup/helm-spray/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247994119,"owners_count":21030050,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["chart","helm","helm-plugin","helm-spray","kubernetes","umbrella-chart"],"created_at":"2025-03-17T12:17:28.978Z","updated_at":"2025-04-09T07:05:58.685Z","avatar_url":"https://github.com/ThalesGroup.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Helm Spray\n\n[![Build Status](https://travis-ci.org/ThalesGroup/helm-spray.svg?branch=master)](https://travis-ci.org/ThalesGroup/helm-spray)\n\n![helm-spray](https://thalesgroup.github.io/helm-spray/logo/helm-spray_150x150.png)\n\n## What is Helm Spray?\n\nThis is a Helm plugin to install or upgrade sub-charts one by one from an umbrella chart.\n\nIt works like `helm upgrade --install`, except that it upgrades or installs each sub-charts according to a weight (\u003e=0) set on each sub-chart. All sub-charts of weight 0 are processed first, then sub-charts of weight 1, etc.\nChart weight shall be specified using the `\u003cchart name\u003e.weight` value.\n\nEach sub-chart is deployed under a specific Release named `\u003cchart name or alias\u003e`, enabling a later individual upgrade targeting this sub-chart only. All global or individual upgrade should still be done on the umbrella chart.\n\n## Compatibility with helm\n- helm-spray v3.x releases are only compatible with helm v2.x\n- helm-spray v4.x releases are only compatible with helm v3.x\n\n## Continuous Integration \u0026 Delivery\n\nHelm Spray is building and delivering under Travis.\n\n[![Build Status](https://travis-ci.org/ThalesGroup/helm-spray.svg?branch=master)](https://travis-ci.org/ThalesGroup/helm-spray)\n\n## How to install (starting from v4)\n\n```\n-bash-4.2$ helm plugin install https://github.com/ThalesGroup/helm-spray\nDownloading and installing spray v4.0.0...\nInstalled plugin: spray\n-bash-4.2$ helm plugin list\nNAME    VERSION DESCRIPTION\nspray   4.0.0   Helm plugin for upgrading sub-charts from umbrella chart with dependency orders\n```\n\nPlease note the helm plugin install command requires git\n\n## Pre-requisites\n\nHelm Spray is using kubectl to communicate with Kubernetes cluster.\nPlease follow this [page](https://kubernetes.io/docs/tasks/tools/install-kubectl) to install it\n\n## Usage\n\n```\n  $ helm spray [flags] CHART\n```\n\nHelm Spray shall always be called on the umbrella chart, whatever it is for upgrading the full set of charts, or for upgrading individual sub-charts (using the `--target` option).\nFor a proper usage of helm spray, the umbrella chart shall have a `requirements.yaml` file listing all the sub-charts to be deployed (under the `dependencies` element). Sub-charts may have an `alias` element and the `condition` element shall be set to the value `\u003cchart name or alias\u003e.enabled`.\nHere is an example of `requirements.yaml` file for an umbrella chart having three sub-charts, one of them having an alias:\n```\ndependencies:\n- name: micro-service-1\n  version: ~1.2\n  repository: http://chart-museum/charts\n  condition: micro-service-1.enabled\n- name: micro-service-2\n  version: ~2.3\n  repository: http://chart-museum/charts\n  condition: micro-service-2.enabled\n- name: micro-service-3\n  alias: ms3\n  version: ~1.1\n  repository: http://chart-museum/charts\n  condition: ms3.enabled\n```\n\nA \"values\" file shall also be set with the weight it be applied to each individual sub-chart. This weight shall be set in the `\u003cchart name or alias\u003e.weight` element. A good practice is that thei weigths are statically set in the default `values.yaml` file of the umbrella chart (and not in a yaml file provided using the `-f` option), as sub-chart's weight is not likely to change over time.\nAs an example corresponding to the above `requirements.yaml` file, the `values.yaml` file of the umbrella chart might be:\n```\nmicro-service-1:\n  weight: 0\n\nmicro-service-2:\n  weight: 1\n\nms3:\n  weight: 2\n```\nSeveral sub-charts may have the same weight, meaning that they will be upgraded together.\nUpgrade of sub-charts of weight n+1 will only be triggered when upgrade of sub-charts of weight n is completed.\nNote also that while weights should primarilly be set in the `values.yaml` file of the umbrella chart, it is also possible to set them using the `--values/-f` or `--set` flags of the command line, for example to temporarilly overwrite a weight value. If so, take care that weight values provided through the command line are not taken into account for the next calls to Helm Spray, including if the `--reuse-values` flag is used: they would have to be provided again at each call.\n\n\nHelm Spray creates one helm Release per sub-chart. Releases are individually upgraded when running the helm spray process, in particular when using the `--target` option.\nThe name and version of the umbrella chart is set as the Chart name for all the Revisions.\n```\nNAME            REVISION        UPDATED                         STATUS          CHART           APP VERSION     NAMESPACE\nmicro-service-1 12              Wed Jan 30 17:19:15 2019        DEPLOYED        solution-0.1    0.1             default\nmicro-service-2 21              Wed Jan 30 17:18:55 2019        DEPLOYED        solution-0.1    0.1             default\nms3             7               Wed Jan 30 17:18:45 2019        DEPLOYED        solution-0.1    0.1             default\n```\n\nNote: if an alias is set for a sub-chart, then this is this alias that should be used with the `--target` option, not the sub-chart name.\n\n### Values:\n\nThe umbrella chart gathers several components or micro-services into a single solution. Values can then be set at many different places:\n- At micro-service level, inside the `values.yaml` file of each micro-service chart: these are common defaults values set by the micro-service developer, independently from the deployment context and location of the micro-service\n- At the solution level, inside the `values.yaml` file of the umbrella chart: these are values complementing or overwriting default values of the micro-services sub-charts, usually formalizing the deployment topology of the solution and giving the standard configuration of the underlying micro-services for any deployments of cwthis specific solution\n- At deployment time, using the `--values/-f`, `--set`, `--set-string`, or `--set-file` flags: this is the placeholder for giving the deployment-dependent values, specifying for example the exact database url for this deployment, the exact password value for this deployment, the targeted remote server url for this deployment, etc. These values usually change from one deployment of the solution to another.\n\nWithin the micro-services paradigm, decoupling between micro-services is one of the most important criteria to respect. While values con be provided in a per-micro-service basis for the first and last places mentioned above, Helm only allows one single `values.yaml` file in the umbrella chart. All solution-level values should then be gathered into a single file, while it would have been better to provide values in several files, on a one-file-per-micro-service basis (to ensure decoupling of the micro-services configuration, even at solution level).\nHelm Spray is consequently adding this capability to have several values file in the umbrella chart and to include them into the single `values.yaml` file using the `#! {{ .Files.Get \u003cfile name\u003e }}` directive.\n- The file to be included shall be a valid yaml file.\n- It is possible to only include a sub-part of the yaml content by picking an element of the `Files.Get`, specifying the path to be extracted and included: `#! {{ pick (.Files.Get \u003cfile name\u003e) for.bar }}`. Only paths targeting a Yaml element or a leaf value can be provided. Paths targeted lists are not supported.\n- It is possible to indent the included content using the `indent` directive: `#! {{ .Files.Get \u003cfile name\u003e | indent 2 }}`, `#! {{ pick (.Files.Get \u003cfile name\u003e) for.bar | indent 4 }}\n\nNote: The `{{ .Files.Get ... }}` directive shall be prefixed by `#!` as the `values.yaml` file is parsed both with and without the included content. When parsed without the included content, it shall still be a valid yaml file, thus mandating the usage of a comment to specify the `{{ .Files.Get ... }}` clause that is by default supported by neither yaml nor Helm in default values files of charts. Usage of `#!` (with a bang '!') allows differentiating the include clauses from regular comments.\nNote also that when Helm is parsing the `values.yaml` file without the included content, some warning may be raised by helm if yaml elements are nil or empty (while they are not with the included content). A typical warning could be: 'Warning: Merging destination map for chart 'my-solution'. The destination item 'bar' is a table and ignoring the source 'bar' as it has a non-table value of: \u003cnil\u003e'\n\nExample of `values.yaml`:\n```\nmicro-service-1:\n  weight: 0\n#! {{ .Files.Get ms1.yaml }}\n\nmicro-service-2:\n  weight: 1\n#! {{ pick (.Files.Get ms2.yaml) foo | indent 2 }}\n\nms3:\n  weight: 2\n  bar:\n#! {{ pick (.Files.Get ms3.yaml) bar.baz | indent 4 }}\n# To prevent from having a warning when the file is processed by Helm, a fake content may be set here.\n# Format of the added dummy elements fully depends on the application's values structure\n    dummy:\n      dummy: \"just here to prevent from a warning\"\n\n```\n\n### Tags and Conditions:\n\nAs Helm Spray internally uses the Helm Conditions for its own purpose, it is not possible to specify other Conditions that the ones required by Helm Spray itself (`\u003cchart name or alias\u003e.enabled`). Such extra Conditions will be ignored.\n\nHowever, Helm Spray is compatible with Tags set in the `requirements.yaml` file, as displayed in the following example:\n```\ndependencies:\n- name: micro-service-1\n  version: ~1.2\n  repository: http://chart-museum/charts\n  condition: micro-service-1.enabled\n  tags:\n  - common\n  - front-end\n- name: micro-service-2\n  version: ~2.3\n  repository: http://chart-museum/charts\n  condition: micro-service-2.enabled\n  tags:\n  - common\n  - back-end\n- name: micro-service-3\n  alias: ms3\n  version: ~1.1\n  repository: http://chart-museum/charts\n  condition: ms3.enabled\n```\nWith such a configuration, if Helm Spray is called with the `--set tags.front-end=true` argument, the `micro-service-1` will be deployed (because it has a tag that matches one of those given in the command line) and `micro-service-3` as well (because it has no tag, so no restriction applies), while `micro-service-2` will not be deployed (because it has tags and none of them is matching one of those given in the command line).\n\nNote that tags shall be provided through the `--values`/`-f`, `--set`, `--set-string`, or `--set-file` flags: values coming from the server/Tiller (for example when using the `--reuse-values` flag) are not considered.\nTags values can also not be templated (e.g. `tags.front-end` set to `{{ .Values.x.y.z }}` will not be processed).\n\n### Flags:\n\n```\n      --debug                            enable helm debug output (also include spray verbose output)\n      --dry-run                          simulate a spray\n  -x, --exclude strings                  specify the subchart to exclude (can specify multiple): process all subcharts except the ones specified in '--exclude'\n      --force                            force resource update through delete/recreate if needed\n  -h, --help                             help for helm\n  -n, --namespace string                 namespace to spray the chart into (default \"default\")\n      --prefix-releases string           prefix the releases by the given string, resulting into releases names formats:\n                                             \"\u003cprefix\u003e-\u003cchart name or alias\u003e\"\n                                         Allowed characters are a-z A-Z 0-9 and -\n      --prefix-releases-with-namespace   prefix the releases by the name of the namespace, resulting into releases names formats:\n                                             \"\u003cnamespace\u003e-\u003cchart name or alias\u003e\"\n      --reset-values                     when upgrading, reset the values to the ones built into the chart\n      --reuse-values                     when upgrading, reuse the last release's values and merge in any overrides from the command line via '--set' and '-f'.\n                                         If '--reset-values' is specified, this is ignored\n      --set strings                      set values on the command line (can specify multiple or separate values with commas: key1=val1,key2=val2)\n      --set-file strings                 set values from respective files specified via the command line (can specify multiple or separate values with commas: key1=path1,key2=path2)\n      --set-string strings               set STRING values on the command line (can specify multiple or separate values with commas: key1=val1,key2=val2)\n  -t, --target strings                   specify the subchart to target (can specify multiple). If '--target' is not specified, all subcharts are targeted\n      --timeout int                      time in seconds to wait for any individual Kubernetes operation (like Jobs for hooks)\n                                         and for liveness and readiness (like Deployments and regular Jobs completion) (default 300)\n  -f, --values strings                   specify values in a YAML file or a URL (can specify multiple)\n      --verbose                          enable spray verbose output\n      --version string                   specify the exact chart version to install. If this is not specified, the latest version is installed\n```\n\n## Developer (From Source) Install\n\nIf you would like to handle the build yourself, instead of fetching a binary,\nthis is how recommend doing it.\n\nFirst, set up your environment:\n\n- You need to have [Go](http://golang.org) installed. Make sure to set `$GOPATH`\n- If you don't have [Glide](http://glide.sh) installed, this will install it into\n  `$GOPATH/bin` for you.\n\nClone this repo into your `$GOPATH`. You can use `go get -d github.com/ThalesGroup/helm-spray`\nfor that.\n\n```\n$ cd $GOPATH/src/github.com/ThalesGroup/helm-spray\n$ make dist_linux\n$ helm plugin install .\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthalesgroup%2Fhelm-spray","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthalesgroup%2Fhelm-spray","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthalesgroup%2Fhelm-spray/lists"}