From fb572342634ca251aa73387b9de4b43255e2a1a2 Mon Sep 17 00:00:00 2001 From: tteckster Date: Wed, 6 Sep 2023 00:34:31 -0400 Subject: [PATCH] Update clean-lxcs.sh add a new menu that allows you to choose which containers you want to exclude from the cleaning process. --- misc/clean-lxcs.sh | 66 ++++++++++++++++++++++++++++++---------------- 1 file changed, 44 insertions(+), 22 deletions(-) diff --git a/misc/clean-lxcs.sh b/misc/clean-lxcs.sh index 447d8076..38bffa21 100644 --- a/misc/clean-lxcs.sh +++ b/misc/clean-lxcs.sh @@ -10,10 +10,10 @@ function header_info() { cat <<"EOF" ________ __ _ ________ / ____/ /__ ____ _____ / / | |/ / ____/ - / / / / _ \/ __ `/ __ \ / / | / / -/ /___/ / __/ /_/ / / / / / /___/ / /___ -\____/_/\___/\__,_/_/ /_/ /_____/_/|_\____/ - + / / / / _ \/ __ `/ __ \ / / | / / +/ /___/ / __/ /_/ / / / / / /___/ / /___ +\____/_/\___/\__,_/_/ /_/ /_____/_/|_\____/ + EOF } set -e @@ -33,6 +33,21 @@ while true; do esac done clear +TITLE="Containers on node" +while read -r line; do + TAG=$(echo "$line" | awk '{print $1}') + ITEM=$(echo "$line" | awk '{print substr($0,36)}') + OFFSET=2 + if [[ $((${#ITEM} + $OFFSET)) -gt ${MSG_MAX_LENGTH:-} ]]; then + MSG_MAX_LENGTH=$((${#ITEM} + $OFFSET)) + fi + CTID_MENU+=("$TAG" "$ITEM " "OFF") +done < <(pct list | awk 'NR>1') +excluded_containers=$(whiptail --title "$TITLE" --checklist \ + "\nSelect containers to skip from cleaning:\n" \ + 16 $(($MSG_MAX_LENGTH + 23)) 6 \ + "${CTID_MENU[@]}" 3>&1 1>&2 2>&3 | tr -d '"') || exit + function clean_container() { container=$1 header_info @@ -40,29 +55,36 @@ function clean_container() { echo -e "${BL}[Info]${GN} Cleaning ${name} ${CL} \n" pct exec $container -- bash -c "apt-get -y --purge autoremove && apt-get -y autoclean && bash <(curl -fsSL https://github.com/tteck/Proxmox/raw/main/misc/clean.sh) && rm -rf /var/lib/apt/lists/* && apt-get update" } - for container in $(pct list | awk '{if(NR>1) print $1}'); do - os=$(pct config "$container" | awk '/^ostype/ {print $2}') - if [ "$os" != "debian" ] && [ "$os" != "ubuntu" ]; then + if [[ " ${excluded_containers[@]} " =~ " $container " ]]; then header_info - echo -e "${BL}[Info]${GN} Skipping ${name} ${RD}$container is not Debian or Ubuntu ${CL} \n" + echo -e "${BL}[Info]${GN} Skipping ${BL}$container${CL}" sleep 1 - continue - fi - status=$(pct status $container) - template=$(pct config $container | grep -q "template:" && echo "true" || echo "false") - if [ "$template" == "false" ] && [ "$status" == "status: stopped" ]; then - echo -e "${BL}[Info]${GN} Starting${BL} $container ${CL} \n" - pct start $container - echo -e "${BL}[Info]${GN} Waiting For${BL} $container${CL}${GN} To Start ${CL} \n" - sleep 5 - clean_container $container - echo -e "${BL}[Info]${GN} Shutting down${BL} $container ${CL} \n" - pct shutdown $container & - elif [ "$status" == "status: running" ]; then - clean_container $container + else + os=$(pct config "$container" | awk '/^ostype/ {print $2}') + if [ "$os" != "debian" ] && [ "$os" != "ubuntu" ]; then + header_info + echo -e "${BL}[Info]${GN} Skipping ${name} ${RD}$container is not Debian or Ubuntu ${CL} \n" + sleep 1 + continue + fi + + status=$(pct status $container) + template=$(pct config $container | grep -q "template:" && echo "true" || echo "false") + if [ "$template" == "false" ] && [ "$status" == "status: stopped" ]; then + echo -e "${BL}[Info]${GN} Starting${BL} $container ${CL} \n" + pct start $container + echo -e "${BL}[Info]${GN} Waiting For${BL} $container${CL}${GN} To Start ${CL} \n" + sleep 5 + clean_container $container + echo -e "${BL}[Info]${GN} Shutting down${BL} $container ${CL} \n" + pct shutdown $container & + elif [ "$status" == "status: running" ]; then + clean_container $container + fi fi done + wait header_info echo -e "${GN} Finished, Containers Cleaned. ${CL} \n"