diff --git a/tools/pve/lxc-delete.sh b/tools/pve/lxc-delete.sh index 8cadfda0..290f97d0 100644 --- a/tools/pve/lxc-delete.sh +++ b/tools/pve/lxc-delete.sh @@ -50,19 +50,23 @@ if [ -z "$containers" ]; then exit 1 fi -menu_items=("ALL" "Delete ALL containers" "OFF") # Add as first option -FORMAT="%-10s %-15s %-10s" +menu_items=("ALL" "Delete ALL containers" "OFF") +FORMAT="%-10s %-10s %-10s %-10s" while read -r container; do container_id=$(echo $container | awk '{print $1}') container_name=$(echo $container | awk '{print $2}') container_status=$(echo $container | awk '{print $3}') - formatted_line=$(printf "$FORMAT" "$container_name" "$container_status") + container_os=$(echo $container | awk '{print $4}') + protected=$(pct config $container_id | grep -i '^protection:' | awk '{print $2}') + is_protected="No" + [[ "$protected" == "1" ]] && is_protected="Yes" + formatted_line=$(printf "$FORMAT" "$container_name" "$container_status" "$container_os" "$is_protected") menu_items+=("$container_id" "$formatted_line" "OFF") done <<<"$containers" CHOICES=$(whiptail --title "LXC Container Delete" \ - --checklist "Select LXC containers to delete:" 25 60 13 \ + --checklist "Select LXC containers to delete:\n\nNAME STATUS OS PROTECTED" 25 70 15 \ "${menu_items[@]}" 3>&2 2>&1 1>&3) if [ -z "$CHOICES" ]; then @@ -76,17 +80,32 @@ DELETE_MODE=${DELETE_MODE:-m} selected_ids=$(echo "$CHOICES" | tr -d '"' | tr -s ' ' '\n') -# If "ALL" is selected, override with all container IDs +# Wenn ALL ausgewählt ist, überschreiben if echo "$selected_ids" | grep -q "^ALL$"; then selected_ids=$(echo "$containers" | awk '{print $1}') fi for container_id in $selected_ids; do - status=$(pct status $container_id) + status=$(pct status "$container_id") + protected=$(pct config "$container_id" | grep -i '^protection:' | awk '{print $2}') + is_protected="No" + [[ "$protected" == "1" ]] && is_protected="Yes" + + if [[ "$is_protected" == "Yes" && "$DELETE_MODE" == "a" ]]; then + echo -e "${BL}[Info]${RD} Skipping protected container $container_id (auto mode).${CL}" + continue + fi if [ "$status" == "status: running" ]; then + if [[ "$is_protected" == "Yes" && "$DELETE_MODE" == "m" ]]; then + read -p "⚠️ Container $container_id is PROTECTED. Delete anyway? (y/N): " CONFIRM_PROTECTED + [[ ! "$CONFIRM_PROTECTED" =~ ^[Yy]$ ]] && { + echo -e "${BL}[Info]${RD} Skipping protected container $container_id...${CL}" + continue + } + fi echo -e "${BL}[Info]${GN} Stopping container $container_id...${CL}" - pct stop $container_id & + pct stop "$container_id" & sleep 5 echo -e "${BL}[Info]${GN} Container $container_id stopped.${CL}" fi @@ -96,15 +115,30 @@ for container_id in $selected_ids; do pct destroy "$container_id" -f & pid=$! spinner $pid - [ $? -eq 0 ] && echo "Container $container_id deleted." || whiptail --title "Error" --msgbox "Failed to delete container $container_id." 10 60 + if [ $? -eq 0 ]; then + echo "Container $container_id deleted." + else + whiptail --title "Error" --msgbox "Failed to delete container $container_id." 10 60 + fi else read -p "Delete container $container_id? (y/N): " CONFIRM if [[ "$CONFIRM" =~ ^[Yy]$ ]]; then + if [[ "$is_protected" == "Yes" ]]; then + read -p "⚠️ Container $container_id is PROTECTED. Delete anyway? (y/N): " CONFIRM_PROTECTED + [[ ! "$CONFIRM_PROTECTED" =~ ^[Yy]$ ]] && { + echo -e "${BL}[Info]${RD} Skipping protected container $container_id...${CL}" + continue + } + fi echo -e "${BL}[Info]${GN} Deleting container $container_id...${CL}" pct destroy "$container_id" -f & pid=$! spinner $pid - [ $? -eq 0 ] && echo "Container $container_id deleted." || whiptail --title "Error" --msgbox "Failed to delete container $container_id." 10 60 + if [ $? -eq 0 ]; then + echo "Container $container_id deleted." + else + whiptail --title "Error" --msgbox "Failed to delete container $container_id." 10 60 + fi else echo -e "${BL}[Info]${RD} Skipping container $container_id...${CL}" fi