diff --git a/kubectl_complete-rsh b/kubectl_complete-rsh new file mode 100755 index 0000000..1098c41 --- /dev/null +++ b/kubectl_complete-rsh @@ -0,0 +1,23 @@ +#!/usr/bin/env bash + +# If we are completing a flag, use Cobra's builtin completion system. +# To know if we are completing a flag we need the last argument starts with a `-` and does not contain an `=` +args=("$@") +lastArg=${args[((${#args[@]}-1))]} +if [[ "$lastArg" == -* ]]; then + if [[ "$lastArg" != *=* ]]; then + kubectl ns __complete "$@" + fi +else + # TODO Make sure we are not completing the value of a flag. + # TODO Only complete a single argument. + # Both are pretty hard to do in a shell script. The better way to do this would be to let + # Cobra do all the completions by using `cobra.ValidArgsFunction` in the program. + # But the below, although imperfect, is a nice example for plugins that don't use Cobra. + + kubectl get nodes --no-headers -o custom-columns=":metadata.name" + + # Turn off file completion. See the ShellCompDirective documentation within + # https://github.com/spf13/cobra/blob/main/shell_completions.md#completion-of-nouns + echo :4 +fi