fish-shell/share/completions/helm.fish
Terje Larsen 22a2098c34 Add completions for helm (#3829)
* Add completions for helm

helm - is a tool for managing Kubernetes charts. Charts are packages of
pre-configured Kubernetes resources.

See: https://github.com/kubernetes/helm

* Improve helm release completions description

After some feedback from the community it seems it is good to include
the chart in the release description. This adds the chart information to
the description. So to say this is `Release of CHART`.

* Further improvements to helm completions

- Utilize complete -f, -r and -x properly
- Add some more context aware completions (chart versions, kubectl context and namespaces)
2017-02-13 17:23:29 +01:00

287 lines
14 KiB
Fish

# helm - is a tool for managing Kubernetes charts. Charts are packages
# of pre-configured Kubernetes resources.
# See: https://github.com/kubernetes/helm
function __helm_using_command
set -l cmd (commandline -poc)
set -l found
test (count $cmd) -gt (count $argv)
or return 1
set -e cmd[1]
for i in $argv
contains -- $i $cmd
and set found $found $i
end
test "$argv" = "$found"
end
function __helm_seen_any_subcommand_from -a cmd
__fish_seen_subcommand_from (__helm_subcommands $cmd | string replace -r '\t.*$' '')
end
function __helm_subcommands -a cmd
switch $cmd
case ''
echo create\t'Create a new chart with the given name'
echo delete\t'Delete the release from Kubernetes'
echo dependency\t"Manage a chart's dependencies"
echo fetch\t'Download a chart from a repository'
echo get\t'Download a named release'
echo history\t'Fetch release history'
echo home\t'Display the location of HELM_HOME'
echo init\t'Initialize Helm on both client and server'
echo inspect\t'Inspect a chart'
echo install\t'Install a chart archive'
echo lint\t'Examine a chart for possible issues'
echo list\t'List releases'
echo package\t'Package a chart directory into a chart archive'
echo repo\t'Operate on chart repositories'
echo rollback\t'Roll back a release to a previous revision'
echo search\t'Search for a keyword in charts'
echo serve\t'Start a local http web server'
echo status\t'Display the status of the named release'
echo upgrade\t'Upgrade a release'
echo verify\t'Verify that a chart has been signed and is valid'
echo version\t'Print the client/server version information'
case 'dependency'
echo build\t'Rebuild the charts/ directory'
echo list\t'List the dependencies for the given chart'
echo update\t'Update charts/'
case 'get'
echo hooks\t'Download all hooks for a named release'
echo manifest\t'Download the manifest for a named release'
echo values\t'Download the values file for a named release'
case 'inspect'
echo chart\t'Show inspect chart'
echo values\t'Show inspect values'
case 'repo'
echo add\t'Add a chart repository'
echo index\t'Generate an index file'
echo list\t'List chart repositories'
echo remove\t'Remove a chart repository'
echo update\t'Update information on available charts'
end
end
function __helm_kube_contexts
kubectl config get-contexts -o name ^/dev/null
end
function __helm_kube_namespaces
kubectl get namespaces -o name | string replace 'namespace/' ''
end
function __helm_releases
helm ls --short ^/dev/null
end
function __helm_release_completions
helm ls ^/dev/null | awk 'NR >= 2 { print $1"\tRelease of "$NF }'
end
function __helm_release_revisions
set -l cmd (commandline -poc)
for pair in (helm ls | awk 'NR >= 2 { print $1" "$2 }')
echo $pair | read -l release revision
if contains $release $cmd
seq 1 $revision
return
end
end
end
function __helm_repositories
helm repo list | awk 'NR >= 2 { print $1 }'
end
function __helm_charts
helm search | awk 'NR >= 2 && !/^local\// { print $1 }'
end
function __helm_chart_versions
set -l cmd (commandline -poc)
for pair in (helm search -l | awk 'NR >= 2 { print $1" "$2 }')
echo $pair | read -l chart version
if contains $chart $cmd
echo $version
end
end
end
#
# Global Flags
#
complete -c helm -l debug -f -d 'Enable verbose output'
complete -c helm -l home -r -d 'Location of your Helm config'
complete -c helm -l host -x -d 'Address of tiller'
complete -c helm -l kube-context -x -a '(__helm_kube_contexts)' -d 'Name of the kubeconfig context to use'
complete -c helm -s h -l help -f -d 'More information about a command'
#
# Commands
#
# helm [command]
complete -c helm -n 'not __helm_seen_any_subcommand_from ""' -x -a '(__helm_subcommands "")'
# helm create NAME [flags]
complete -c helm -n '__helm_using_command create' -s p -l starter -x -d 'The named Helm starter scaffold'
# helm delete [flags] RELEASE [...]
complete -c helm -n '__helm_using_command delete' -f -a '(__helm_release_completions)' -d 'Release'
complete -c helm -n '__helm_using_command delete' -l dry-run -f -d 'Simulate a delete'
complete -c helm -n '__helm_using_command delete' -l no-hooks -f -d 'Prevent hooks from running during deletion'
complete -c helm -n '__helm_using_command delete' -l purge -f -d 'Remove the release from the store'
# helm dependency [command]
complete -c helm -n '__helm_using_command dependency; and not __helm_seen_any_subcommand_from dependency' -x -a '(__helm_subcommands dependency)'
# helm dependency build [flags] CHART
complete -c helm -n '__helm_using_command dependency build' -l keyring -r -d 'Keyring containing public keys'
complete -c helm -n '__helm_using_command dependency build' -l verify -f -d 'Verify the packages against signatures'
# helm dependency update [flags] CHART
complete -c helm -n '__helm_using_command dependency update' -l keyring -r -d 'Keyring containing public keys'
complete -c helm -n '__helm_using_command dependency update' -l verify -f -d 'Verify the packages against signatures'
# helm fetch [flags] [chart URL | repo/chartname] [...]
complete -c helm -n '__helm_using_command fetch; and not __fish_seen_subcommand_from (__helm_charts)' -f -a '(__helm_charts)' -d 'Chart'
complete -c helm -n '__helm_using_command fetch' -s d -l destination -r -d 'Location to write the chart'
complete -c helm -n '__helm_using_command fetch' -l keyring -r -d 'Keyring containing public keys'
complete -c helm -n '__helm_using_command fetch' -l prov -f -d 'Fetch the provenance file'
complete -c helm -n '__helm_using_command fetch' -l untar -f -d 'Will untar the chart after downloading it'
complete -c helm -n '__helm_using_command fetch --untar' -l untardir -r -d 'Directory into which the chart is expanded'
complete -c helm -n '__helm_using_command fetch' -l verify -f -d 'Verify the package against its signature'
complete -c helm -n '__helm_using_command fetch' -l version -x -a '(__helm_chart_versions)' -d 'Chart version'
# helm get [command]
complete -c helm -n '__helm_using_command get; and not __helm_seen_any_subcommand_from get' -f -a '(__helm_subcommands get)'
# helm get [flags] RELEASE
complete -c helm -n '__helm_using_command get' -f -a '(__helm_release_completions)' -d 'Release'
complete -c helm -n '__helm_using_command get' -l revision -x -a '(__helm_release_revisions)' -d 'Revision'
# helm get values [flags] RELEASE
complete -c helm -n '__helm_using_command get values' -s a -l all -f -d 'Dump all (computed) values'
# helm history [flags] RELEASE
complete -c helm -n '__helm_using_command history' -f -a '(__helm_release_completions)' -d 'Release'
complete -c helm -n '__helm_using_command history' -l max -x -d 'Maximum number of revision to include in history'
# helm init [flags]
complete -c helm -n '__helm_using_command init' -l canary-image -f -d 'Use the canary tiller image'
complete -c helm -n '__helm_using_command init' -s c -l client-only -f -d 'Do not install tiller'
complete -c helm -n '__helm_using_command init' -l dry-run -f -d 'Do not install local or remote'
complete -c helm -n '__helm_using_command init' -s i -l tiller-image -x -d 'Override tiller image'
# helm inspect [command]
complete -c helm -n '__helm_using_command inspect; and not __helm_seen_any_subcommand_from inspect' -f -a '(__helm_subcommands inspect)'
# helm inspect [CHART] [flags]
complete -c helm -n '__helm_using_command inspect; and not __fish_seen_subcommand_from (__helm_charts)' -a '(__helm_charts)' -d 'Chart'
complete -c helm -n '__helm_using_command inspect' -l keyring -r -d 'Keyring containing public verification keys'
complete -c helm -n '__helm_using_command inspect' -l verify -f -d 'Verify the provenance data for this chart'
complete -c helm -n '__helm_using_command inspect' -l version -x -a '(__helm_chart_versions)' -d 'Chart version'
# helm install [CHART] [flags]
complete -c helm -n '__helm_using_command install; and not __fish_seen_subcommand_from (__helm_charts)' -a '(__helm_charts)' -d 'Chart'
complete -c helm -n '__helm_using_command install' -l dry-run -f -d 'Simulate an install'
complete -c helm -n '__helm_using_command install' -l keyring -r -d 'Keyring containing public verification keys'
complete -c helm -n '__helm_using_command install' -s n -l name -x -d 'Release name'
complete -c helm -n '__helm_using_command install' -l name-template -r -d 'Specify template used to name the release'
complete -c helm -n '__helm_using_command install' -l namespace -x -a '(__helm_kube_namespaces)' -d 'Namespace'
complete -c helm -n '__helm_using_command install' -l no-hooks -f -d 'Prevent hooks from running during install'
complete -c helm -n '__helm_using_command install' -l replace -f -d 'Re-use the given name if already used'
complete -c helm -n '__helm_using_command install' -l set -x -d 'Set values on the command line'
complete -c helm -n '__helm_using_command install' -s f -l values -r -d 'Specify values in a YAML file'
complete -c helm -n '__helm_using_command install' -l verify -f -d 'Verify the package before installing it'
complete -c helm -n '__helm_using_command install' -l version -x -a '(__helm_chart_versions)' -d 'Chart version'
# helm lint [flags] PATH
complete -c helm -n '__helm_using_command lint' -l strict -f -d 'Fail on lint warnings'
# helm list [flags] [FILTER]
complete -c helm -n '__helm_using_command list' -l all -f -d 'Show all releases'
complete -c helm -n '__helm_using_command list' -s d -l date -f -d 'Sort by release date'
complete -c helm -n '__helm_using_command list' -l deleted -f -d 'Show deleted releases'
complete -c helm -n '__helm_using_command list' -l deleting -f -d 'Show releases that are currently being deleted'
complete -c helm -n '__helm_using_command list' -l deployed -f -d 'Show deployed releases'
complete -c helm -n '__helm_using_command list' -l failed -f -d 'Show failed releases'
complete -c helm -n '__helm_using_command list' -s m -l max -x -d 'Maximum number of releases to fetch'
complete -c helm -n '__helm_using_command list' -s o -l offset -x -a '(__helm_release_completions)' -d 'Next release name in the list'
complete -c helm -n '__helm_using_command list' -s r -l reverse -f -d 'Reverse the sort order'
complete -c helm -n '__helm_using_command list' -s q -l short -f -d 'Output short listing format'
# helm package [flags] [CHART_PATH] [...]
complete -c helm -n '__helm_using_command package' -l key -x -d 'Name of the key to use when signing'
complete -c helm -n '__helm_using_command package' -l keyring -r -d 'Keyring containing public keys'
complete -c helm -n '__helm_using_command package' -l save -f -d 'Save packaged chart to local chart repository'
complete -c helm -n '__helm_using_command package' -l sign -f -d 'Use a PGP private key to sign this package'
# helm repo [command]
complete -c helm -n '__helm_using_command repo; and not __helm_seen_any_subcommand_from repo' -f -a '(__helm_subcommands repo)'
# helm repo add [flags] [NAME] [URL]
complete -c helm -n '__helm_using_command repo add' -l no-update -f -d 'Raise error if repo is already registered'
# helm repo index [flags] [DIR]
complete -c helm -n '__helm_using_command repo index' -l merge -x -d 'Merge the generated index into the given index'
complete -c helm -n '__helm_using_command repo index' -l url -x -d 'URL of chart repository'
# helm repo remove [flags] [NAME]
complete -c helm -n '__helm_using_command repo remove' -f -a '(__helm_repositories)' -d 'Repository'
# helm rollback [RELEASE] [REVISION] [flags]
complete -c helm -n '__helm_using_command rollback; and not __fish_seen_subcommand_from (__helm_releases)' -f -a '(__helm_release_completions)' -d 'Release'
complete -c helm -n '__helm_using_command rollback' -f -a '(__helm_release_revisions)' -d 'Revision'
complete -c helm -n '__helm_using_command rollback' -l dry-run -f -d 'Simulate a rollback'
complete -c helm -n '__helm_using_command rollback' -l no-hooks -f -d 'Prevent hooks from running during rollback'
# helm search [keyword] [flags]
complete -c helm -n '__helm_using_command search' -s r -l regexp -f -d 'Use regular expressions for searching'
complete -c helm -n '__helm_using_command search' -s l -l versions -f -d 'Show the long listing'
# helm serve [flags]
complete -c helm -n '__helm_using_command serve' -l address -x -d 'Address to listen on'
complete -c helm -n '__helm_using_command serve' -l repo-path -r -d 'Path from which to serve charts'
# helm status [flags] RELEASE
complete -c helm -n '__helm_using_command status' -f -a '(__helm_release_completions)' -d 'Release'
complete -c helm -n '__helm_using_command status' -l revision -x -a '(__helm_release_revisions)' -d 'Revision'
# helm upgrade [RELEASE] [CHART] [flags]
complete -c helm -n '__helm_using_command upgrade; and not __fish_seen_subcommand_from (__helm_releases)' -f -a '(__helm_release_completions)' -d 'Release'
complete -c helm -n '__helm_using_command upgrade; and __fish_seen_subcommand_from (__helm_releases); and not __fish_seen_subcommand_from (__helm_charts)' -a '(__helm_charts)' -d 'Chart'
complete -c helm -n '__helm_using_command upgrade' -l dry-run -f -d 'Simulate an upgrade'
complete -c helm -n '__helm_using_command upgrade' -s i -l install -f -d "Run an install if the release don't exists"
complete -c helm -n '__helm_using_command upgrade' -l keyring -r -d 'Keyring containing public keys'
complete -c helm -n '__helm_using_command upgrade' -l namespace -x -a '(__helm_kube_namespaces)' -d 'Namespace'
complete -c helm -n '__helm_using_command upgrade' -l no-hooks -f -d 'Disable pre/post upgrade hooks'
complete -c helm -n '__helm_using_command upgrade' -l set -x -d 'Set values on the command line'
complete -c helm -n '__helm_using_command upgrade' -s f -l values -r -d 'Specify values in a YAML file'
complete -c helm -n '__helm_using_command upgrade' -l verify -f -d 'Verify the provenance of the chart before upgrading'
complete -c helm -n '__helm_using_command upgrade' -l version -x -a '(__helm_chart_versions)' -d 'Chart version'
# helm verify [flags] PATH
complete -c helm -n '__helm_using_command verify' -l keyring -r -d 'Keyring containing public keys'
# helm version [flags]
complete -c helm -n '__helm_using_command version' -s c -l client -f -d 'Show the client version'
complete -c helm -n '__helm_using_command version' -s s -l server -f -d 'Show the server version'