This is a port of #5392. It also takes care of the small chore to update the default k8s
version to 1.16, which is the latest supported version
Signed-off-by: Taylor Thomas <taylor.thomas@microsoft.com>
* Create file locking directory if it does not exist
As Helm v3 uses lazy creation for configuration then
directories and files are not created until required.
File locking when doing repo add was introduced in
v2 and ported to v3 in #6492. It locks on the config
directory where the repo file resides and therefore
needs the directory to be created if it doesn't exist.
This fix adds the directory if need be,
Signed-off-by: Martin Hickey <martin.hickey@ie.ibm.com>
* Add unit test
Signed-off-by: Martin Hickey <martin.hickey@ie.ibm.com>
There were two different methods and varying ways to output the status of a release.
This standardizes all of the outputs, but requires a breaking change. Output will
not perfectly match previous v3 output, and we had to break the printing function
in the `action` package, but now things are much more standardized.
Fixes#6238
Signed-off-by: Taylor Thomas <taylor.thomas@microsoft.com>
* Kubernetes updated to 1.16.1
* SemVer and Sprig updated to latest releases that leverage go
modules
* Tests and checks updated. These already landed in v2 via PR 6457
Signed-off-by: Matt Farina <matt@mattfarina.com>
Also, it seems that for helm v3, the description of flags all start
with a lowercase, so this commit also does that for the output flag.
Signed-off-by: Marc Khouzam <marc.khouzam@montreal.ca>
* Port Helm 2 PR 4088 to Helm 3
Not a direct port as is but refactored for Helm 3.
Signed-off-by: Martin Hickey <martin.hickey@ie.ibm.com>
* Update unit test to test string retunred for different order
Signed-off-by: Martin Hickey <martin.hickey@ie.ibm.com>
As part of this port, I removed some now superfluous code from the `action` package.
This is technically a breaking change, but since the package was introduced in v3, it
is highly unlikely anyone is using it and we are still within the beta window.
Also closes#6437
Signed-off-by: Taylor Thomas <taylor.thomas@microsoft.com>
If a user renames the helm binary, the shell needs to be told that this
new name corresponds to the helm completion function. For example if
the user decides to rename the helm v3 binary to 'helm3', then the
following command extra command would need be run by the user:
complete -o default -F __start_helm helm3.
This commit automates this by adding this extra command to the generated
shell completion script by looking at what binary was used to call the
helm completion command. For example, if the user renames the binary
to helm3 and then calls
helm3 completion bash
the completion script will include a hook for the binary 'helm3' to
the completion script.
A binary rename is one of the two options recommended when users need to
run both helm2 and helm3.
Signed-off-by: Marc Khouzam <marc.khouzam@montreal.ca>
This allows that any addition to the bash completion logic be
automatically added to the zsh logic.
Signed-off-by: Marc Khouzam <marc.khouzam@montreal.ca>
I made a few modifications from the original code to fit in with the new
code layout and to clarify a few things. This is a port of #3758
Signed-off-by: Taylor Thomas <taylor.thomas@microsoft.com>
This ports the functionality of cleanup on fail to v3 as introduced in #4871. This has been tested manually
and would be a good candidate for a new acceptance test.
Signed-off-by: Taylor Thomas <taylor.thomas@microsoft.com>
The binary of Helm to use for dynamic completion should be the same
as the actual Helm binary being used. For example, if PATH points
to a version of helm v2, but the user calls bin/helm to use a local
v3 version, then dynamic completion should also use bin/helm.
If not, in this example, the dynamic completion will use the
information returned by helm v2.
This improvement is particularly useful for users that will run both
helm v2 and helm v3 at the same time.
Signed-off-by: Marc Khouzam <marc.khouzam@montreal.ca>
* Use `apps/v1` for Deployment
* Reformat comments
* Consistently use `nindent` and indent properly
* Introduce named template for selector labels
* Fix label selector in `NOTES.txt`
Signed-off-by: Reinhard Naegele <unguiculus@gmail.com>
It makes sense to limit the history by default. Setting
it to 10 aligns with the default for a ReplicaSet's
`revisionHistoryLimit`.
Fixes: #5157
Signed-off-by: Reinhard Naegele <unguiculus@gmail.com>
Inspired greatly from kubectl code.
Completion is provided for:
--kube-context - where the available contexts are listed
--namespace - where the namespaces of the cluster are listed
Signed-off-by: Marc Khouzam <marc.khouzam@montreal.ca>
This is a bug I ran into when working on Helm completion.
I was surprised that it didn't happen when I was using
kubectl, so I investigated and found a PR that fixed this
bug in kubectl:
https://github.com/kubernetes/kubernetes/pull/48553
I duplicated the code in this commit which:
Removes __helm_declare, which is safe to do since
`declare -F` is already replaced to `whence -w` by
__helm_convert_bash_to_zsh().
The problem was that calling "declare" from inside a function
scopes the declaration to that function only. So "declare"
should not be called through __helm_declare() but instead
directly.
To reproduce:
1- setup helm completion in zsh
2- helm --kubeconfig=$HOME/.kube/config statu<TAB>
you will get the error:
__helm_handle_flag:27: bad math expression: operand expected at end of string
Co-authored-by: Kazuki Suda <kazuki.suda@gmail.com>
Signed-off-by: Marc Khouzam <marc.khouzam@ville.montreal.qc.ca>
Cobra provides some out-of-the-box debugging for bash completion.
To use it, one must set the variable BASH_COMP_DEBUG_FILE to
some file where the debug output will be written. Many of the
debug printouts indicate the current method name; they do so
by using bash's ${FUNCNAME[0]} variable. This variable is
different in zsh. To obtain the current method name in zsh
we must use ${funcstack[0]}.
This commit adds the proper sed modification to convert from
bash to zsh.
Signed-off-by: Marc Khouzam <marc.khouzam@montreal.ca>
Have fixed up a non-blocking nitpick change from #6310, this just
switches us to use a regular string rather than a string.Builder for the
summary.
Signed-off-by: Thomas O'Donnell <andy.tom@gmail.com>
* Add dynamic completion for 'helm repo remove'
Signed-off-by: Marc Khouzam <marc.khouzam@ville.montreal.qc.ca>
* fix: --home flag has been removed
Signed-off-by: Marc Khouzam <marc.khouzam@ville.montreal.qc.ca>
* Dynamic completion for 'helm plugin remove/update'
Signed-off-by: Marc Khouzam <marc.khouzam@ville.montreal.qc.ca>
* Add returns for consitency
Signed-off-by: Marc Khouzam <marc.khouzam@ville.montreal.qc.ca>
Have tried to give the output of the lint command a bit of a clean up to
try to make it easier to follow. This splits the output by chart, moves
the summary to the end of the report rather than at the top and fixes
the number of failed charts count.
Signed-off-by: Thomas O'Donnell <andy.tom@gmail.com>
Also:
* add --insecure flag to "registry login"
* fix bug parsing correct tag when port number present
Signed-off-by: Josh Dolitsky <jdolitsky@gmail.com>
* allow repository config via cli
* make `helm repo add` create repo config file if it does not exist
* squash a ton of bugs
Signed-off-by: Adam Reese <adam@reese.io>
No more magic separating the metadata from chart tarball - charts are
pushed to registry as a single tarball layer with Chart.yaml in tact.
No more fragile custom symlink chart storage, now following
the OCI Image Layout Specification for chart filesystem cache.
Also:
- Update to ORAS 0.6.0
- Simplify registry client setup with NewClientWithDefaults()
- Remove needless annotations and constants
Fixes#6068Fixes#6141
Signed-off-by: Josh Dolitsky <jdolitsky@gmail.com>
These packages are generally used only for logic inside of Helm and
can later be re-exported as needed
Signed-off-by: Taylor Thomas <taylor.thomas@microsoft.com>
This command only displays documentation. I think we should remove it
in favor of documentation and add a command later if required.
Signed-off-by: Adam Reese <adam@reese.io>
The adds the -d flag to "helm chart export" to save chart to different
directory.
Also, allow loading with "helm chart save" from both dir and tarball, as
well as make expirimental error more copy-paste friendly.
Signed-off-by: Josh Dolitsky <jdolitsky@gmail.com>
This adds a new `gates` package used for interacting with feature gates. It also marks the OCI registry work as experimental, signalling to users that it is not a stable feature of Helm.
Signed-off-by: Matthew Fisher <matt.fisher@microsoft.com>
This updates commands install, upgrade, delete, and test to share the
same implementation for hook execution.
BREAKING CHANGES:
- The `test-failure` hook annotation is removed.
Signed-off-by: Jacob LeGrone <git@jacob.work>
The revision argument that was mandatory to `helm rollback` was being ignored.
The only way to roll back to an older revision was to run `helm rollback RELEASE <insert anything here> --version REVISION`.
This change respects that argument and removes the `--version` flag, which was redundant.
Signed-off-by: Matthew Fisher <matt.fisher@microsoft.com>
The stable repository provides a quick onboarding with a set of
community curated charts. Two problems with the community stable
repository has lead to its need to be removed.
1. The URL is hard coded to a Google Cloud bucket under Google's
control. This was setup when Helm was part of Kubernetes and
Kubernetes was a Google project. The bucket cannot be
transfered to another non-Google controlled project. And,
the bucket is not accessible in some parts of the world
(e.g., China).
2. The number of charts in the stable repository has grown
generally unmaintainable. The repository maintainers cannot
manage the number of PRs coming it cauing delays in response
or no response and PRs are automatically closed. This is
a poor experience.
The alternatice is the Helm Hub that provides a central point of
search for many Helm repositories. Different people and organizations
can maintain their own charts. A central server is not needed as
Helm is setup to be distributed.
Signed-off-by: Matt Farina <matt@mattfarina.com>
Prior to now, helm has been silently ignoring any errors while parsing
the root Persistent flags. This causes an issue when a global flag comes
later on the command line than a localized flag for a subcommand, in
which the value for that global flag is never set. The solution is to
simply tell the Persistent flagset to ignore any unknown flags, since a
later command will process it
Signed-off-by: Ian Howell <ian.howell0@gmail.com>
This feature flag allows `helm template` to be used against a live cluster. Some charts need CRDs to be applied to the cluster before calling `helm install`. This allows users to validate their templates will render with those resources set.
Signed-off-by: Matthew Fisher <matt.fisher@microsoft.com>
If starter template path is an absolute path, it shouldn't
be prefixed with c.home.Starters() but rather be used as is.
Signed-off-by: Tine Jozelj <tine.jozelj@tjo.space>
This fixes an issue where the kubernetes client was being created using
command line flags before those flags had been parsed, causing the
client to always use the default values.
Signed-off-by: Ian Howell <ian.howell0@gmail.com>
This commit replaces usage of github.com/ghodss/yaml with it's forked
version maintained by SIG community. The replaced library has
low-to-none support activity unlike the latter. We believe the new
Helm branch could benefit from using the community-supported version on
a long-term run as yaml parser is a key component of Helm chart rendering
engine.
This commit locks sigs.k8s.io/yaml dependency version on 1.1.0 which
is backwards compatible with ghodss/yaml 1.0.0.
This change also resolves the outdated dependency version lock for
ghodss/yaml (currently 1.0.0) and makes it possible to port changes from
https://github.com/helm/helm/pull/6010 to dev-v3.
Signed-off-by: Oleg Sidorov <oleg.sidorov@booking.com>
- strip GoVersion from `helm version` test output
- catch some edge cases when GitCommit is unset or less than 7 characters
- add a test case for `helm version --short`
Signed-off-by: Matthew Fisher <matt.fisher@microsoft.com>
This commit adds dynamic completion for the commands
helm status <TAB>
helm uninstall <TAB>
helm history <TAB>
helm test run <TAB>
helm upgrade <TAB>
helm get <subcommand> <TAB>
helm rollback <TAB>
Aliases of commands are automatically taken care of, such as
helm delete <TAB>
which is an alias of
helm uninstall
Support for override flags in completion is included for
such dynamic completion.
The list of release names to complete is obtained by running
helm list $(__helm_override_flags) -a -q -m 1000 -f ${filter}
where
${__helm_override_flags} is any user-specified flags part of
--kubeconfig --kube-context --home --namespace -n
${filter} is whatever prefix the user may have already typed
for the release name
Signed-off-by: Marc Khouzam <marc.khouzam@ville.montreal.qc.ca>
* move the main interface to it's own file
* removed summarizeKeptManifests() which was the last place kube.Get()
was called
* when polling for hooks, use external types
* refactor out legacyschema
* refactor detecting selectors from object
* refactor creating test client
Signed-off-by: Adam Reese <adam@reese.io>
* Add the Schema type and a function to read it
* Added a function to read a schema from a file
* Check that values.yaml matches schema
This commit uses the gojsonschema package to validate a values.yaml file
against a corresponding values.schema.yaml file.
* Add functionality to generate a schema from a values.yaml
* Add Schema to Chart and loader
* Clean up implementation in chartutil
* Add tests for helm install with schema
* Add schema validation to helm lint
* Clean up "matchSchema"
* Modify error output
* Add documentation
* Fix a linter issue
* Fix a test that broke during a rebase
* Clean up documentation
* Specify JSONSchema spec
Since JSONSchema is still in a draft state as of this commit, we need to
specify a particular version of the JSONSchema spec
* Switch to using builtin functionality for file extensions
* Switch to using a third-party library for JSON conversion
* Use the constants from the gojsonschema package
* Updates to unit tests
* Minor change to avoid string cast
* Remove JSON Schema generation
* Change Schema type from map[string]interface{} to []byte
* Convert all Schema YAML to JSON
* Fix some tests that were broken by a rebase
* Fix up YAML/JSON conversions
* This checks subcharts for schema validation
The final coalesced values for a given chart will be validated against
that chart's schema, as well as any dependent subchart's schema
* Add unit tests for ValidateAgainstSchema
* Remove nonessential test files
* Remove a misleading unit test
The TestReadSchema unit test was simply testing the ReadValues function,
which is already being validated in the TestReadValues unit test
* Update documentation to reflect changes to subchart schemas
When creating a Helm chart for the first time, the assumption should be that the app version is also 0.1.0, implying this is for a new application.
Signed-off-by: Matthew Fisher <matt.fisher@microsoft.com>
Most users want to see the release name and the namespace it was deployed to,
as those are the unique identifiers where the release is stored. I also added
integration tests for `helm list` to better test the command output.
Signed-off-by: Matthew Fisher <matt.fisher@microsoft.com>
Make template specific functions private to ensure they not misused and
make unit tests simpler. We may export the template helpers later if
needed.
This lays the foundation for the new chart pipeline.
Signed-off-by: Adam Reese <adam@reese.io>
The chart type is added to differentiaite between an application chart
and a library chart. Library charts can be used as dependencies but are
not installable.
Signed-off-by: Martin Hickey <martin.hickey@ie.ibm.com>
Allow specifying a set of plugins in a yaml file that will be installed during
the `helm init` process.
Closes#5079.
Signed-off-by: Sven van Heugten <svenvanheugten@home.nl>
* Add logic for platform specific commands to plugins
* Add plugins doc updated to incorporate platform specific commands
* Add condition for os match: If OS matches and there is no more specific match, the command
will be executed
* Remove helmVersion constraint from charts
* Guard compile time set variables behind `internal/`
* Allow configuration of UserAgent for HTTPGetter
Signed-off-by: Adam Reese <adam@reese.io>
* feat: add pkg/action to encapsulate action logic
Signed-off-by: Matt Butcher <matt.butcher@microsoft.com>
* feat: replace client/server internals with action package
While we removed Tiller, we left the internal client/server architecture mostly intact. This replaces that architecture with the `pkg/action` package.
This implements the action package for list, but nothing else.
Signed-off-by: Matt Butcher <matt.butcher@microsoft.com>
* feat: Add install and refactor some tests
This adds install to the action package, and then fixes up a lot of testing.
Signed-off-by: Matt Butcher <matt.butcher@microsoft.com>
* fix: Move a bunch of sorters to the releaseutils package
Signed-off-by: Matt Butcher <matt.butcher@microsoft.com>
* fix: updated APIs and fixed a failed test
Signed-off-by: Matt Butcher <matt.butcher@microsoft.com>
* Use var for timestamper, instead of adding as a struct field
Signed-off-by: Matt Butcher <matt.butcher@microsoft.com>
Since there is no tiller anymore this option make most sense with the
'helm upgrade' commando.
Origininally this was added in PR #2636 implementing the feature #2081.
Signed-off-by: Christian Koeberl <christian.koeberl@gmail.com>
kubernetes v1.13 support
The dependency `gopkg.in/yaml.v2` had to be upgraded which changed some
output formatting. The golden files for the tests are included.
Signed-off-by: Adam Reese <adam@reese.io>
Per the Helm 3 plan, `helm inspect` and all of its subcommands have been moved to `helm show`.
Signed-off-by: Matt Butcher <matt.butcher@microsoft.com>
To match the convention of `helm install`, `helm uninstall` is the inverse.
Other tangential changes in this PR:
- StatusDeleting has been changed to StatusUninstalling
- StatusDeleted has been changed to StatusUninstalled
- `helm list --deleted` has been changed to `helm list --uninstalled`
- `helm list --deleting` has been changed to `helm list --uninstalling`
- `helm.DeleteOption` and all delete options have been renamed to `helm.UninstallOption`
I have not made any changes to the "helm.sh/hook-delete-policy", "pre-delete" and "post-delete" hook annotations because
1. it's a major breaking change to existing helm charts, which we've commited to NOT break in Helm 3
2. there is no "helm.sh/hook-install-policy" to pair with "helm.sh/hook-uninstall-policy", so delete still makes sense here
`helm delete` and `helm del` have been added as aliases to `helm uninstall`, so `helm delete` and `helm del` still works as is.
A recent PR (#3471) wasn't up to date with the latest master changes.
This fixes the issue and adds the right number of parameters to the
`vals` function call.
Adds automountServiceAccountToken when a serviceAccount is specified.
Prior to this, tiller falls back to contacting the KUBERNETES_SERVICE on
localhost:8080 rather than respecting the cluster IP in the
KUBERNETES_SERVICE_{HOST,PORT} environment variables.
Fixes#3460, fixes#3467.
When 'helm package --set stringsArray' is run, this will set/override values
in the packaged chart. 'helm package --values valueFiles' uses one or more
value files to achieve the same.
Closes#3141
Signed-off-by: Arash Deshmeh <adeshmeh@ca.ibm.com>