scale-catalog/functions/cmd_to_container.sh

110 lines
3.4 KiB
Bash
Raw Normal View History

2022-08-09 04:17:15 +00:00
#!/bin/bash
cmd_to_container(){
2022-08-09 04:28:09 +00:00
app_name=$(k3s kubectl get pods -A | awk '{print $1}' | sort -u | grep -v "system" | sed '1d' | sed 's/^[^-]*-//' | nl -s ") " | column -t)
while true
do
clear -x
title
echo "$app_name"
echo
echo "0) Exit"
read -rt 120 -p "Please type a number: " selection || { echo -e "\nFailed to make a selection in time" ; exit; }
if [[ $selection == 0 ]]; then
echo "Exiting.."
exit
elif ! echo -e "$app_name" | grep -qs ^"$selection)" ; then
echo "Error: \"$selection\" was not an option.. Try again"
sleep 3
continue
else
break
fi
done
app_name=$(echo -e "$app_name" | grep ^"$selection)" | awk '{print $2}')
2022-08-10 20:51:01 +00:00
search=$(k3s crictl ps -a -s running | sed -E 's/([0-9]*|About)[[:space:]][a-z]{2,5}[[:space:]](hour)?[[:space:]]?ago//')
2022-08-10 20:16:31 +00:00
mapfile -t pod_id < <(echo "$search" | grep -E "[[:space:]]$app_name([[:space:]]|-([-[:alnum:]])*[[:space:]])" | awk '{print $(NF)}')
2022-08-10 23:16:45 +00:00
count=0
for pod in "${pod_id[@]}"
do
mapfile -t containers < <(echo "$search" | grep "$pod" | awk '{print $4}')
2022-08-10 23:16:45 +00:00
((count++))
done
2022-08-10 22:39:42 +00:00
2022-08-10 23:16:45 +00:00
if [[ $count == 1 ]]; then
2022-08-10 22:39:42 +00:00
container=$(echo "$search" | grep "${pod_id[*]}" | awk '{print $4}')
container_id=$(echo "$search" | grep -E "[[:space:]]${container}[[:space:]]" | awk '{print $1}')
elif [[ "${#containers[@]}" == 0 ]]; then
2022-08-10 22:39:42 +00:00
echo -e "No containers available\nAre you sure the application in running?"
exit
2022-08-10 22:30:07 +00:00
else
while true
do
clear -x
title
2022-08-10 23:36:42 +00:00
2022-08-10 23:20:34 +00:00
for i in "${containers[@]}"
do
2022-08-10 23:20:34 +00:00
echo "$i"
done | nl -s ") " | column -t
2022-08-10 23:36:42 +00:00
2022-08-10 22:30:07 +00:00
echo
echo "0) Exit"
read -rt 120 -p "Choose a container by number: " selection || { echo -e "\nFailed to make a selection in time" ; exit; }
if [[ $selection == 0 ]]; then
echo "Exiting.."
exit
2022-08-10 23:11:01 +00:00
elif ! echo -e "$cont_search}" | grep -qs ^"$selection)" ; then
2022-08-10 22:30:07 +00:00
echo "Error: \"$selection\" was not an option.. Try again"
sleep 3
continue
else
break
fi
done
2022-08-10 23:09:30 +00:00
container=$(echo "$cont_search" | grep ^"$selection)" | awk '{print $2}')
2022-08-10 22:30:07 +00:00
container_id=$(echo "$search" | grep -E "[[:space:]]${container}[[:space:]]" | awk '{print $1}')
fi
2022-08-10 03:50:22 +00:00
while true
do
clear -x
title
echo "App Name: $app_name"
echo "Container: $container"
echo
echo "1) Run a single command"
echo "2) Open Shell"
echo
echo "0) Exit"
read -rt 120 -p "Please choose an option: " selection || { echo -e "\nFailed to make a selection in time" ; exit; }
case $selection in
0)
echo "Exiting.."
exit
;;
1)
clear -x
title
read -rt 120 -p "What command do you want to run?: " command || { echo -e "\nFailed to make a selection in time" ; exit; }
k3s crictl exec -it "$container_id" $command
break
;;
2)
clear -x
title
2022-08-10 04:16:49 +00:00
if ! k3s crictl exec -it "$container_id" /bin/bash 2>/dev/null; then
k3s crictl exec -it "$container_id" /bin/sh 2>/dev/null || echo "This container does not accept shell access, try a different one."
2022-08-10 03:50:22 +00:00
fi
break
;;
*)
echo "That was not an option.. Try again"
sleep 3
;;
esac
done
2022-08-09 04:17:15 +00:00
}
export -f cmd_to_container