web-dev-qa-db-fra.com

Puis-je utiliser la saisie semi-automatique pour kubectl dans zsh?

Je me retrouve quotidiennement à faire ...

$ kubectl --context=foo get pods
  < copy text manually >
$ kubectl --context=foo logs dep1-12345678-10101

Je voudrais parcourir les ressources correspondantes avec

$ kubectl --context=foo logs dep1<TAB>

mais cela ne semble rien faire avec ma configuration de stock. Des idées?

osx 10.12.3 kubectl v1.4.5 zsh zsh 5.2 (x86_64-Apple-darwin16.0)

16
Plato

bash et zsh prennent en charge les scripts qui exécutent la commande imprimée lorsque vous appuyez sur <TAB>. La fonctionnalité est appelée copmletion programmable , et vous pouvez trouver plus de détails à ce sujet ici: zsh complètement .

Heureusement, vous n'avez pas besoin d'écrire votre propre script - kubectl le fournit pour zsh> 5.2. Essayez d'exécuter cette commande: source <(kubectl completion zsh).

Une autre option consiste à utiliser cet outil: https://github.com/mkokho/kubemrr (discalimer: je suis l'auteur). La raison pour laquelle il existe est parce que le script d'achèvement standard est trop lent - cela peut prendre quelques secondes avant que les réponses de cluster kubernetes ne contiennent tous les noms de pod. Mais kubemrr conserve les noms localement, donc la réponse revient presque immédiatement.

31
mkokho

J'ajoute cette fonction à mon $ HOME/.zshrc.

Il chargera paresseusement la fonction complète de kubectl

kubectl () { command kubectl $* if [[ -z $KUBECTL_COMPLETE ]] then source <(command kubectl completion zsh) KUBECTL_COMPLETE=1 fi }

8
wweir