diff --git a/README.md b/README.md index 78f6dad..d8bda95 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,8 @@ Shell commands using [`kubectl`](https://kubernetes.io/docs/reference/kubectl/ov * exec in to a container of a Pod * describe a pod * port forward pod +* edit deployment +* edit configmap ## Prerequisite @@ -36,6 +38,8 @@ 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/editdeploy /usr/local/bin/editdeploy +sudo ln -s ~/.kube-fzf/editcm /usr/local/bin/editcm sudo ln -s ~/.kube-fzf/kube-fzf.sh /usr/local/bin/kube-fzf.sh ``` @@ -71,6 +75,18 @@ execpod [-a | -n ] [pod-query] pfpod [-c | -o | -a | -n ] [pod-query] ``` +### `editdeploy` + +``` +editdeploy [-c | -o | -a | -n ] [deployment-query] +``` + +### `editcm` + +``` +editcm [-c | -o | -a | -n ] [configmap-query] +``` + #### Options ``` diff --git a/editcm b/editcm new file mode 100755 index 0000000..43179f4 --- /dev/null +++ b/editcm @@ -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 +editcm() { + local namespace_query configmap_query result namespace configmap_name + + _kube_fzf_handler "editdeploy" "$@" + namespace_query=$(echo $args | awk -F '|' '{ print $1 }') + configmap_query=$(echo $args | awk -F '|' '{ print $2 }') + + result=$(_kube_fzf_search_configmap "$namespace_query" "$configmap_query") + IFS=$'|' read -r namespace configmap_name <<< "$result" + + _kube_fzf_echo "kubectl edit configmap $configmap_name --namespace='$namespace'" + kubectl edit configmap $configmap_name --namespace=$namespace +} + +editcm "$@" diff --git a/editdeploy b/editdeploy new file mode 100755 index 0000000..3fd19b9 --- /dev/null +++ b/editdeploy @@ -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 +editdeploy() { + local namespace_query deployment_query result namespace deployment_name + + _kube_fzf_handler "editdeploy" "$@" + namespace_query=$(echo $args | awk -F '|' '{ print $1 }') + deployment_query=$(echo $args | awk -F '|' '{ print $2 }') + + result=$(_kube_fzf_search_deployment "$namespace_query" "$deployment_query") + IFS=$'|' read -r namespace deployment_name <<< "$result" + + _kube_fzf_echo "kubectl edit deployment $deployment_name --namespace='$namespace'" + kubectl edit deployment $deployment_name --namespace=$namespace +} + +editdeploy "$@" diff --git a/kube-fzf.sh b/kube-fzf.sh index cd64f26..e1f9c74 100755 --- a/kube-fzf.sh +++ b/kube-fzf.sh @@ -50,6 +50,26 @@ EOF cat << EOF describepod [-a | -n ] [pod-query] +-a - Search in all namespaces +-h - Show help +-n - Find namespaces matching and do fzf. + If there is only one match then it is selected automatically. +EOF + ;; + editdeploy) + cat << EOF +editdeploy [-a | -n ] [doployment-query] + +-a - Search in all namespaces +-h - Show help +-n - Find namespaces matching and do fzf. + If there is only one match then it is selected automatically. +EOF + ;; + editcm) + cat << EOF +editcm [-a | -n ] [configmap-query] + -a - Search in all namespaces -h - Show help -n - Find namespaces matching and do fzf. @@ -174,6 +194,78 @@ _kube_fzf_search_pod() { echo "$namespace|$pod_name" } +_kube_fzf_search_configmap() { + local namespace configmap_name + local namespace_query=$1 + local configmap_query=$2 + local configmap_fzf_args=$(_kube_fzf_fzf_args "$configmap_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} + configmap_name=$(kubectl get configmap --namespace=$namespace --no-headers \ + | fzf $(echo $configmap_fzf_args) \ + | awk '{ print $1 }') + elif [ "$namespace_query" = "--all-namespaces" ]; then + read namespace configmap_name <<< $(kubectl get configmap --all-namespaces --no-headers \ + | fzf $(echo $configmap_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} + configmap_name=$(kubectl get configmap --namespace=$namespace --no-headers \ + | fzf $(echo $configmap_fzf_args) \ + | awk '{ print $1 }') + fi + + [ -z "$configmap_name" ] && return 1 + + echo "$namespace|$configmap_name" +} + +_kube_fzf_search_deployment() { + local namespace deployment_name + local namespace_query=$1 + local deployment_query=$2 + local deployment_fzf_args=$(_kube_fzf_fzf_args "$deployment_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} + deployment_name=$(kubectl get deployment --namespace=$namespace --no-headers \ + | fzf $(echo $deployment_fzf_args) \ + | awk '{ print $1 }') + elif [ "$namespace_query" = "--all-namespaces" ]; then + read namespace deployment_name <<< $(kubectl get deployment --all-namespaces --no-headers \ + | fzf $(echo $deployment_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} + deployment_name=$(kubectl get deployment --namespace=$namespace --no-headers \ + | fzf $(echo $deployment_fzf_args) \ + | awk '{ print $1 }') + fi + + [ -z "$deployment_name" ] && return 1 + + echo "$namespace|$deployment_name" +} + _kube_fzf_echo() { local reset_color="\033[0m" local bold_green="\033[1;32m"