diff --git a/README.md b/README.md index 78617ef..645910f 100644 --- a/README.md +++ b/README.md @@ -26,12 +26,7 @@ brew install kube-fzf ``` git clone https://github.com/thecasualcoder/kube-fzf.git ~/.kube-fzf -sudo ln -s ~/.kube-fzf/findpod /usr/local/bin/findpod -sudo ln -s ~/.kube-fzf/execpod /usr/local/bin/execpod -sudo ln -s ~/.kube-fzf/tailpod /usr/local/bin/tailpod -sudo ln -s ~/.kube-fzf/describepod /usr/local/bin/describepod -sudo ln -s ~/.kube-fzf/pfpod /usr/local/bin/pfpod -sudo ln -s ~/.kube-fzf/kube-fzf.sh /usr/local/bin/kube-fzf.sh +./install.sh ``` ## Usage @@ -42,6 +37,30 @@ sudo ln -s ~/.kube-fzf/kube-fzf.sh /usr/local/bin/kube-fzf.sh findpod [-a | -n ] [pod-query] ``` +### `findeploy` + +``` +findeploy [-a | -n ] [deploy-query] +``` + +### `scaledeploy` + +``` +scaledeploy [-a | -n ] scale-number +``` + +### `editdeploy` + +``` +editdeploy [-a | -n ] [deploy-query] +``` + +### `deletepod` + +``` +deletepod [-a | -n ] [pod-query] +``` + ### `describepod` ``` @@ -54,6 +73,12 @@ describepod [-a | -n ] [pod-query] tailpod [-a | -n ] [pod-query] ``` +### `taildeploy` + +``` +taildeploy [-a | -n ] [deployment-query] +``` + ### `execpod` ``` diff --git a/deletepod b/deletepod new file mode 100755 index 0000000..aacc198 --- /dev/null +++ b/deletepod @@ -0,0 +1,21 @@ +#!/usr/bin/env bash + +set -e +set -o pipefail + +[[ -z "${KUBE_FZF_PATH}" ]] && source kube-fzf.sh || source $KUBE_FZF_PATH +deletepod() { + local namespace_query pod_query result namespace pod_name + + _kube_fzf_handler "deletepod" "$@" + namespace_query=$(echo $args | awk -F '|' '{ print $1 }') + pod_query=$(echo $args | awk -F '|' '{ print $2 }') + + result=$(_kube_fzf_search_pod "$namespace_query" "$pod_query") + IFS=$'|' read -r namespace pod_name <<< "$result" + + _kube_fzf_echo "kubectl delete pod $pod_name --namespace='$namespace'" + kubectl delete pod $pod_name --namespace=$namespace +} + +deletepod "$@" diff --git a/editdeploy b/editdeploy new file mode 100755 index 0000000..dcea208 --- /dev/null +++ b/editdeploy @@ -0,0 +1,24 @@ +#!/usr/bin/env bash + +set -e +set -o pipefail + +[[ -z "${KUBE_FZF_PATH}" ]] && source kube-fzf.sh || source $KUBE_FZF_PATH + +editdeploy() { + local namespace_query deploy_query result namespace deploy_name + + _kube_fzf_handler "editdeploy" "$@" + namespace_query=$(echo $args | awk -F '|' '{ print $1 }') + deploy_query=$(echo $args | awk -F '|' '{ print $2 }') + + result=$(_kube_fzf_search_deploy "$namespace_query" "$deploy_query") + IFS=$'|' read -r namespace deploy_name <<< "$result" + + local fzf_args=$(_kube_fzf_fzf_args "" "--select-1") + + _kube_fzf_echo "kubectl edit --namespace='$namespace' deployment/$deploy_name" + kubectl edit --namespace=$namespace deployment/$deploy_name +} + +editdeploy "$@" diff --git a/findeploy b/findeploy new file mode 100755 index 0000000..0673fed --- /dev/null +++ b/findeploy @@ -0,0 +1,22 @@ +#!/usr/bin/env bash + +set -e +set -o pipefail + +[[ -z "${KUBE_FZF_PATH}" ]] && source kube-fzf.sh || source $KUBE_FZF_PATH + +findeploy() { + local namespace_query deploy_query result namespace deploy_name + + _kube_fzf_handler "findeploy" "$@" + namespace_query=$(echo $args | awk -F '|' '{ print $1 }') + deploy_query=$(echo $args | awk -F '|' '{ print $2 }') + + result=$(_kube_fzf_search_deploy "$namespace_query" "$deploy_query") + IFS=$'|' read -r namespace deploy_name <<< "$result" + + _kube_fzf_echo "kubectl get deployment --namespace='$namespace' --output=wide $deploy_name" + kubectl get deployment --namespace=$namespace $deploy_name +} + +findeploy "$@" diff --git a/findjob b/findjob new file mode 100755 index 0000000..8c032ac --- /dev/null +++ b/findjob @@ -0,0 +1,22 @@ +#!/usr/bin/env bash + +set -e +set -o pipefail + +[[ -z "${KUBE_FZF_PATH}" ]] && source kube-fzf.sh || source $KUBE_FZF_PATH + +findjob() { + local namespace_query job_query result namespace job_name + + _kube_fzf_handler "findjob" "$@" + namespace_query=$(echo $args | awk -F '|' '{ print $1 }') + job_query=$(echo $args | awk -F '|' '{ print $2 }') + + result=$(_kube_fzf_search_job "$namespace_query" "$job_query") + IFS=$'|' read -r namespace job_name <<< "$result" + + _kube_fzf_echo "kubectl get job --namespace='$namespace' --output=wide $job_name" + kubectl get job --namespace=$namespace --output=wide $job_name +} + +findjob "$@" diff --git a/install.sh b/install.sh new file mode 100755 index 0000000..3dada7f --- /dev/null +++ b/install.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash +CURRENT_FILE=$(basename $0) + +BIN_PATH=${1:-${HOME}/bin} + +for file in $(find . -maxdepth 1 -type f -executable ! -path "./${CURRENT_FILE}" -printf '%P\n'); do + ln -fs "$(pwd)/${file}" "${BIN_PATH}/${file}" +done diff --git a/kube-fzf.sh b/kube-fzf.sh index cd64f26..ed768fd 100755 --- a/kube-fzf.sh +++ b/kube-fzf.sh @@ -174,6 +174,78 @@ _kube_fzf_search_pod() { echo "$namespace|$pod_name" } +_kube_fzf_search_deploy() { + local namespace deploy_name + local namespace_query=$1 + local deploy_query=$2 + local deploy_fzf_args=$(_kube_fzf_fzf_args "$deploy_query") + + if [ -z "$namespace_query" ]; then + context=$(kubectl config current-context) + namespace=$(kubectl config get-contexts --no-headers $context \ + | awk '{ print $5 }') + + namespace=${namespace:=default} + deploy_name=$(kubectl get deployment --namespace=$namespace --no-headers \ + | fzf $(echo $deploy_fzf_args) \ + | awk '{ print $1 }') + elif [ "$namespace_query" = "--all-namespaces" ]; then + read namespace deploy_name <<< $(kubectl get deployment --all-namespaces --no-headers \ + | fzf $(echo $deploy_fzf_args) \ + | awk '{ print $1, $2 }') + else + local namespace_fzf_args=$(_kube_fzf_fzf_args "$namespace_query" "--select-1") + namespace=$(kubectl get namespaces --no-headers \ + | fzf $(echo $namespace_fzf_args) \ + | awk '{ print $1 }') + + namespace=${namespace:=default} + deploy_name=$(kubectl get deployment --namespace=$namespace --no-headers \ + | fzf $(echo $deploy_fzf_args) \ + | awk '{ print $1 }') + fi + + [ -z "$deploy_name" ] && return 1 + + echo "$namespace|$deploy_name" +} + +_kube_fzf_search_job() { + local namespace job_name + local namespace_query=$1 + local job_query=$2 + local job_fzf_args=$(_kube_fzf_fzf_args "$job_query") + + if [ -z "$namespace_query" ]; then + context=$(kubectl config current-context) + namespace=$(kubectl config get-contexts --no-headers $context \ + | awk '{ print $5 }') + + namespace=${namespace:=default} + job_name=$(kubectl get job --namespace=$namespace --no-headers \ + | fzf $(echo $job_fzf_args) \ + | awk '{ print $1 }') + elif [ "$namespace_query" = "--all-namespaces" ]; then + read namespace job_name <<< $(kubectl get job --all-namespaces --no-headers \ + | fzf $(echo $job_fzf_args) \ + | awk '{ print $1, $2 }') + else + local namespace_fzf_args=$(_kube_fzf_fzf_args "$namespace_query" "--select-1") + namespace=$(kubectl get namespaces --no-headers \ + | fzf $(echo $namespace_fzf_args) \ + | awk '{ print $1 }') + + namespace=${namespace:=default} + job_name=$(kubectl get job --namespace=$namespace --no-headers \ + | fzf $(echo $job_fzf_args) \ + | awk '{ print $1 }') + fi + + [ -z "$job_name" ] && return 1 + + echo "$namespace|$job_name" +} + _kube_fzf_echo() { local reset_color="\033[0m" local bold_green="\033[1;32m" diff --git a/scaledeploy b/scaledeploy new file mode 100755 index 0000000..bec0e19 --- /dev/null +++ b/scaledeploy @@ -0,0 +1,23 @@ +#!/usr/bin/env bash + +set -e +set -o pipefail + +[[ -z "${KUBE_FZF_PATH}" ]] && source kube-fzf.sh || source $KUBE_FZF_PATH + +scaledeploy() { + local namespace_query cmd result namespace deploy_name + + _kube_fzf_handler "scaledeploy" "$@" + IFS=$'|' read -r namespace_query cmd _unused _unused <<< "$args" + + result=$(_kube_fzf_search_deploy "$namespace_query") + IFS=$'|' read -r namespace deploy_name <<< "$result" + + local fzf_args=$(_kube_fzf_fzf_args "" "--select-1") + + _kube_fzf_echo "kubectl scale --replicas=$cmd --namespace='$namespace' deployment/$deploy_name" + kubectl scale --replicas=$cmd --namespace=$namespace deployment/$deploy_name +} + +scaledeploy "$@" diff --git a/taildeploy b/taildeploy new file mode 100755 index 0000000..96b6111 --- /dev/null +++ b/taildeploy @@ -0,0 +1,24 @@ +#!/usr/bin/env bash + +set -e +set -o pipefail + +[[ -z "${KUBE_FZF_PATH}" ]] && source kube-fzf.sh || source $KUBE_FZF_PATH + +taildeploy() { + local namespace_query deploy_query result namespace deploy_name + + _kube_fzf_handler "taildeploy" "$@" + namespace_query=$(echo $args | awk -F '|' '{ print $1 }') + deploy_query=$(echo $args | awk -F '|' '{ print $2 }') + + result=$(_kube_fzf_search_deploy "$namespace_query" "$deploy_query") + IFS=$'|' read -r namespace deploy_name <<< "$result" + + local fzf_args=$(_kube_fzf_fzf_args "" "--select-1") + + _kube_fzf_echo "kubectl logs --namespace='$namespace' --follow deployment/$deploy_name" + kubectl logs --namespace=$namespace --follow deployment/$deploy_name +} + +taildeploy "$@" diff --git a/tailjob b/tailjob new file mode 100755 index 0000000..cf5b7a2 --- /dev/null +++ b/tailjob @@ -0,0 +1,24 @@ +#!/usr/bin/env bash + +set -e +set -o pipefail + +[[ -z "${KUBE_FZF_PATH}" ]] && source kube-fzf.sh || source $KUBE_FZF_PATH + +tailjob() { + local namespace_query job_query result namespace job_name + + _kube_fzf_handler "tailjob" "$@" + namespace_query=$(echo $args | awk -F '|' '{ print $1 }') + job_query=$(echo $args | awk -F '|' '{ print $2 }') + + result=$(_kube_fzf_search_job "$namespace_query" "$job_query") + IFS=$'|' read -r namespace job_name <<< "$result" + + local fzf_args=$(_kube_fzf_fzf_args "" "--select-1") + + _kube_fzf_echo "kubectl logs --namespace='$namespace' --follow job/$job_name" + kubectl logs --namespace=$namespace --follow job/$job_name +} + +tailjob "$@"