# Correction du Problème de Vérification Réseau

**Date**: 2026-01-14  
**Problème**: Le script continuait même si le réseau ne fonctionnait pas  
**Statut**: ✅ **CORRIGÉ**

## Problème Identifié

Dans `deploy-service-native.sh` (lignes 146-152), la vérification réseau échouait silencieusement :

```bash
# AVANT (PROBLÉMATIQUE)
if incus exec ${CONTAINER_NAME} -- ping -c 2 -W 2 8.8.8.8 >/dev/null 2>&1; then
    echo "✅ Network connectivity verified"
else
    echo "⚠️  Warning: Network connectivity test failed, but continuing..."
fi
```

**Impact**: Le déploiement continuait même si le réseau ne fonctionnait pas, causant des échecs d'installation de packages et des services non fonctionnels.

## Solution Implémentée

### 1. Vérification Réseau Stricte

La vérification réseau est maintenant **obligatoire** et fait échouer le déploiement si elle échoue :

```bash
# APRÈS (CORRIGÉ)
# Verify network connectivity - CRITICAL: Do not continue if network fails
echo "Verifying network connectivity (CRITICAL - deployment will fail if this doesn't work)..."

# Test 1: Ping gateway
echo "  Testing gateway connectivity (10.10.10.1)..."
if ! incus exec ${CONTAINER_NAME} -- ping -c 3 -W 3 10.10.10.1 >/dev/null 2>&1; then
    echo "❌ ERROR: Cannot reach gateway (10.10.10.1)"
    echo "   Network configuration failed. Deployment aborted."
    exit 1
fi

# Test 2: Ping external DNS
echo "  Testing Internet connectivity (8.8.8.8)..."
if ! incus exec ${CONTAINER_NAME} -- ping -c 3 -W 3 8.8.8.8 >/dev/null 2>&1; then
    echo "❌ ERROR: Cannot reach Internet (8.8.8.8)"
    echo "   Internet connectivity is required for package installation."
    echo "   Check NAT configuration: incus network show ${NETWORK}"
    exit 1
fi

# Test 3: DNS resolution
echo "  Testing DNS resolution (google.com)..."
if ! incus exec ${CONTAINER_NAME} -- getent hosts google.com >/dev/null 2>&1; then
    echo "❌ ERROR: DNS resolution failed"
    echo "   Cannot resolve hostnames. DNS configuration failed."
    exit 1
fi

echo "✅ Network connectivity fully verified (gateway, Internet, DNS)"
```

### 2. Script Simple de Configuration de Base

Création de `setup-basic-incus.sh` pour configurer l'infrastructure Incus de base :

- Crée le réseau `veza-network` avec NAT et DHCP
- Crée le profil `veza-profile` avec root et network devices
- Vérifie que tout est correctement configuré

**Usage**:
```bash
./config/incus/setup-basic-incus.sh
```

### 3. Intégration dans deploy-service-native.sh

Le script de déploiement utilise maintenant automatiquement `setup-basic-incus.sh` :

```bash
# Ensure basic Incus infrastructure is set up
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
if [ -f "${SCRIPT_DIR}/setup-basic-incus.sh" ]; then
    echo "Ensuring basic Incus infrastructure is configured..."
    "${SCRIPT_DIR}/setup-basic-incus.sh" >/dev/null 2>&1 || {
        echo "❌ ERROR: Failed to setup basic Incus infrastructure"
        echo "   Run manually: ${SCRIPT_DIR}/setup-basic-incus.sh"
        exit 1
    }
fi
```

## Tests de Vérification

Le script effectue maintenant **3 tests obligatoires** :

1. **Gateway (10.10.10.1)** : Vérifie que le conteneur peut atteindre la passerelle
2. **Internet (8.8.8.8)** : Vérifie que le conteneur peut atteindre Internet (NAT fonctionne)
3. **DNS (google.com)** : Vérifie que la résolution DNS fonctionne

Si **n'importe lequel** de ces tests échoue, le déploiement est **aborté immédiatement**.

## Améliorations Apportées

1. ✅ **Vérification réseau stricte** : Le déploiement échoue si le réseau ne fonctionne pas
2. ✅ **Messages d'erreur clairs** : Indique exactement quel test a échoué et pourquoi
3. ✅ **Script de base simple** : `setup-basic-incus.sh` pour configurer l'infrastructure
4. ✅ **Configuration réseau robuste** : Gestion d'erreurs améliorée dans la configuration réseau
5. ✅ **Vérification pré-déploiement** : Vérifie que le réseau et le profil existent avant de créer le conteneur

## Impact

- **Avant** : Déploiements incomplets, services non fonctionnels, difficulté de débogage
- **Après** : Déploiements échouent rapidement si le réseau ne fonctionne pas, messages d'erreur clairs, infrastructure de base garantie

## Utilisation

### Configuration initiale
```bash
# Configurer l'infrastructure de base (une seule fois)
./config/incus/setup-basic-incus.sh
```

### Déploiement d'un service
```bash
# Le script vérifie automatiquement l'infrastructure et le réseau
./config/incus/deploy-service-native.sh backend-api
```

Si le réseau ne fonctionne pas, le déploiement échouera immédiatement avec un message d'erreur clair.
