diff --git a/manage-tenant.sh b/manage-tenant.sh index 8751655..c3f3469 100755 --- a/manage-tenant.sh +++ b/manage-tenant.sh @@ -872,81 +872,94 @@ case "$COMMAND" in ;; remove) - FORCE_REMOVE=false - TENANT_ARG="${2:-}" + FORCE_REMOVE=false - if [ "$TENANT_ARG" = "--yes" ] || [ "$TENANT_ARG" = "-y" ]; then - FORCE_REMOVE=true - TENANT_ID="${3:-}" - else - TENANT_ID="$TENANT_ARG" + # Fix: Prüfe sowohl Position 2 als auch 3 auf das -y Flag + if [ "${2:-}" = "--yes" ] || [ "${2:-}" = "-y" ]; then + FORCE_REMOVE=true + TENANT_ID="${3:-}" + elif [ "${3:-}" = "--yes" ] || [ "${3:-}" = "-y" ]; then + FORCE_REMOVE=true + TENANT_ID="${2:-}" + else + TENANT_ID="${2:-}" + fi + + if [ -z "$TENANT_ID" ]; then + echo "Error: Please provide a tenant_id to remove." + exit 1 + fi + + if [ "$FORCE_REMOVE" != true ]; then + echo -n "WARNING: Are you sure you want to permanently delete all data for tenant '$TENANT_ID'? (y/N) " + read confirm + if [ "$confirm" != "y" ] && [ "$confirm" != "Y" ]; then + echo "Removal canceled." + exit 0 fi + fi - if [ -z "$TENANT_ID" ]; then - echo "Error: Please provide a tenant_id to remove." - exit 1 - fi + echo "Removing tenant '$TENANT_ID'..." + APP_CONTAINER=$(docker ps -qf "name=app" | head -n 1) + port_to_remove="" - if [ "$FORCE_REMOVE" != true ]; then - echo -n "WARNING: Are you sure you want to permanently delete all data for tenant '$TENANT_ID'? (y/N) " - read confirm - if [ "$confirm" != "y" ] && [ "$confirm" != "Y" ]; then - echo "Removal canceled." - exit 0 - fi - fi + if [ -n "$APP_CONTAINER" ]; then + # MongoDB-Datenbank via PyMongo direkt im Container droppen + # Fix 1: Wir hängen '|| true' an, damit das Skript nicht abstürzt, falls der Befehl fehlschlägt. + docker exec -i "$APP_CONTAINER" python3 -c ' +import sys, os +try: + import pymongo + tenant_id = sys.argv[1] + # In Docker Compose heißt der Host oft "mongodb" statt "localhost" + mongo_uri = os.environ.get("MONGO_URI", "mongodb://mongodb:27017/") + client = pymongo.MongoClient(mongo_uri, serverSelectionTimeoutMS=2000) - echo "Removing tenant '$TENANT_ID'..." - APP_CONTAINER=$(docker ps -qf "name=app" | head -n 1) - port_to_remove="" + # Fix 2: Wir versuchen beide Formate zu löschen, da "list" zeigt, dass sie "test" und nicht "inventar_test" heißen. + dbs_to_drop = [f"inventar_{tenant_id}", tenant_id] + existing_dbs = client.list_database_names() - if [ -n "$APP_CONTAINER" ]; then - # MongoDB-Datenbank via PyMongo direkt im Container droppen - docker exec -i "$APP_CONTAINER" python3 -c ' - import sys, os - try: - import pymongo - tenant_id = sys.argv[1] - mongo_uri = os.environ.get("MONGO_URI", "mongodb://localhost:27017/") - client = pymongo.MongoClient(mongo_uri, serverSelectionTimeoutMS=2000) - db_name = f"inventar_{tenant_id}" - if db_name in client.list_database_names(): + for db_name in dbs_to_drop: + if db_name in existing_dbs: client.drop_database(db_name) print(f"Dropped database: {db_name}") - except Exception as e: - print(f"Error dropping database: {e}", file=sys.stderr) - ' "$TENANT_ID" > /dev/null 2>&1 +except Exception as e: + print(f"Error dropping database: {e}", file=sys.stderr) +' "$TENANT_ID" > /dev/null 2>&1 || true - # Konfiguration und Port via Host-Funktion bereinigen und Port ermitteln - if port_to_remove="$(remove_tenant_port "$TENANT_ID" 2>/dev/null)"; then - : - else - port_to_remove="" - fi - - echo "Tenant '$TENANT_ID' database and config removed." + # Konfiguration und Port via Host-Funktion bereinigen und Port ermitteln + if port_to_remove="$(remove_tenant_port "$TENANT_ID" 2>/dev/null)"; then + : else - echo "Warning: Application container not running. Tenant database may still exist in MongoDB." - if port_to_remove="$(remove_tenant_port "$TENANT_ID" 2>/dev/null)"; then - : - else - echo "Warning: tenant '$TENANT_ID' was not configured in config.json or could not be removed." - fi + port_to_remove="" fi - if [ -n "$port_to_remove" ]; then - remove_runtime_port "$port_to_remove" - fi - remove_tenant_nginx_config "$TENANT_ID" - sync_tenant_port_map - if [ -n "$(docker ps -qf 'name=app' | head -n 1)" ]; then - restart_app_container - fi - if [ -n "$port_to_remove" ]; then - echo "Removed tenant '$TENANT_ID' and cleaned runtime port $port_to_remove." + echo "Tenant '$TENANT_ID' database and config removed." + else + echo "Warning: Application container not running. Tenant database may still exist in MongoDB." + if port_to_remove="$(remove_tenant_port "$TENANT_ID" 2>/dev/null)"; then + : else - echo "Removed tenant '$TENANT_ID'. No port mapping was present." + echo "Warning: tenant '$TENANT_ID' was not configured in config.json or could not be removed." fi + fi + + if [ -n "$port_to_remove" ]; then + remove_runtime_port "$port_to_remove" 2>/dev/null || true + fi + + remove_tenant_nginx_config "$TENANT_ID" + sync_tenant_port_map + + if [ -n "$(docker ps -qf 'name=app' | head -n 1)" ]; then + restart_app_container || true + fi + + if [ -n "$port_to_remove" ]; then + echo "Removed tenant '$TENANT_ID' and cleaned runtime port $port_to_remove." + else + echo "Removed tenant '$TENANT_ID'. No port mapping was present." + fi ;; restart-tenant)