Initialisation depot
This commit is contained in:
267
Migration/importDns.sh
Executable file
267
Migration/importDns.sh
Executable file
@@ -0,0 +1,267 @@
|
||||
#!/bin/bash
|
||||
# importDns.sh - Import DNS zones and records from CSV files to Samba4
|
||||
# Utilise les fichiers CSV générés par exportDns.ps1
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
# Configuration
|
||||
DNS_DIR="Transfert/Dns"
|
||||
ZONES_CSV="$DNS_DIR/dns_zones.csv"
|
||||
|
||||
# Couleurs pour l'affichage
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Fonction d'affichage avec couleurs
|
||||
log_info() {
|
||||
echo -e "${BLUE}[INFO]${NC} $1"
|
||||
}
|
||||
|
||||
log_success() {
|
||||
echo -e "${GREEN}[OK]${NC} $1"
|
||||
}
|
||||
|
||||
log_warning() {
|
||||
echo -e "${YELLOW}[WARNING]${NC} $1"
|
||||
}
|
||||
|
||||
log_error() {
|
||||
echo -e "${RED}[ERREUR]${NC} $1"
|
||||
}
|
||||
|
||||
# Vérifications préalables
|
||||
check_prerequisites() {
|
||||
log_info "Vérification des prérequis..."
|
||||
|
||||
# Vérifier que samba-tool est disponible
|
||||
if ! command -v samba-tool &> /dev/null; then
|
||||
log_error "samba-tool non trouvé. Assurez-vous que Samba4 est installé."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Vérifier que le répertoire DNS existe
|
||||
if [[ ! -d "$DNS_DIR" ]]; then
|
||||
log_error "Répertoire DNS non trouvé: $DNS_DIR"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Vérifier que le fichier des zones existe
|
||||
if [[ ! -f "$ZONES_CSV" ]]; then
|
||||
log_error "Fichier des zones non trouvé: $ZONES_CSV"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log_success "Prérequis validés"
|
||||
}
|
||||
|
||||
# Demander les credentials
|
||||
get_credentials() {
|
||||
log_info "Configuration des credentials Samba4"
|
||||
echo
|
||||
|
||||
read -p "Nom d'utilisateur administrateur Samba [Administrator]: " SAMBA_USER
|
||||
SAMBA_USER=${SAMBA_USER:-Administrator}
|
||||
|
||||
echo -n "Mot de passe pour $SAMBA_USER: "
|
||||
read -s SAMBA_PASSWORD
|
||||
echo
|
||||
echo
|
||||
|
||||
# Vérifier les credentials
|
||||
log_info "Test des credentials..."
|
||||
if ! samba-tool user show "$SAMBA_USER" --username="$SAMBA_USER" --password="$SAMBA_PASSWORD" &>/dev/null; then
|
||||
log_error "Credentials invalides ou utilisateur non autorisé"
|
||||
exit 1
|
||||
fi
|
||||
log_success "Credentials validés pour $SAMBA_USER"
|
||||
echo
|
||||
}
|
||||
|
||||
# Demander le mode d'exécution
|
||||
get_execution_mode() {
|
||||
echo "Modes d'exécution disponibles:"
|
||||
echo " 1. Dry-run (afficher les commandes sans les exécuter)"
|
||||
echo " 2. Import réel (exécuter les commandes)"
|
||||
echo
|
||||
|
||||
while true; do
|
||||
read -p "Choisissez le mode [1/2]: " MODE_CHOICE
|
||||
case $MODE_CHOICE in
|
||||
1)
|
||||
DRY_RUN=true
|
||||
log_info "Mode dry-run activé - aucune modification ne sera effectuée"
|
||||
break
|
||||
;;
|
||||
2)
|
||||
DRY_RUN=false
|
||||
log_info "Mode import réel activé"
|
||||
break
|
||||
;;
|
||||
*)
|
||||
echo "Choix invalide. Entrez 1 ou 2."
|
||||
;;
|
||||
esac
|
||||
done
|
||||
echo
|
||||
}
|
||||
|
||||
# Fonction pour exécuter les commandes samba-tool
|
||||
execute_samba_cmd() {
|
||||
local cmd="$1"
|
||||
local description="$2"
|
||||
|
||||
if [[ "$DRY_RUN" == "true" ]]; then
|
||||
echo " [DRY-RUN] $description"
|
||||
echo " → $cmd"
|
||||
else
|
||||
if eval "$cmd" &>/dev/null; then
|
||||
log_success "$description"
|
||||
else
|
||||
log_error "$description"
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Créer une zone DNS si elle n'existe pas
|
||||
create_zone_if_not_exists() {
|
||||
local zone_name="$1"
|
||||
|
||||
if [[ "$DRY_RUN" == "true" ]]; then
|
||||
echo " [DRY-RUN] Vérification/création de la zone: $zone_name"
|
||||
return 0
|
||||
fi
|
||||
|
||||
# Vérifier si la zone existe déjà
|
||||
if samba-tool dns query localhost "$zone_name" @ SOA --username="$SAMBA_USER" --password="$SAMBA_PASSWORD" &>/dev/null; then
|
||||
log_info "Zone $zone_name existe déjà"
|
||||
else
|
||||
log_info "Création de la zone: $zone_name"
|
||||
if samba-tool dns zonecreate localhost "$zone_name" --username="$SAMBA_USER" --password="$SAMBA_PASSWORD" &>/dev/null; then
|
||||
log_success "Zone $zone_name créée avec succès"
|
||||
else
|
||||
log_error "Impossible de créer la zone $zone_name"
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Traiter les enregistrements d'une zone
|
||||
process_zone_records() {
|
||||
local zone_name="$1"
|
||||
local records_file="$DNS_DIR/dns_records_${zone_name}.csv"
|
||||
|
||||
if [[ ! -f "$records_file" ]]; then
|
||||
log_warning "Fichier d'enregistrements non trouvé: $records_file"
|
||||
return 0
|
||||
fi
|
||||
|
||||
log_info "Traitement des enregistrements pour la zone: $zone_name"
|
||||
|
||||
local record_count=0
|
||||
local success_count=0
|
||||
|
||||
# Lire le fichier CSV ligne par ligne (en sautant l'en-tête)
|
||||
while IFS=',' read -r name type ttl value timestamp; do
|
||||
# Supprimer les guillemets
|
||||
name=$(echo "$name" | tr -d '"')
|
||||
type=$(echo "$type" | tr -d '"')
|
||||
ttl=$(echo "$ttl" | tr -d '"')
|
||||
value=$(echo "$value" | tr -d '"')
|
||||
|
||||
# Ignorer l'en-tête
|
||||
if [[ "$name" == "Name" ]]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
# Ignorer les enregistrements système et spéciaux
|
||||
if [[ "$name" == "@" ]] || [[ "$name" =~ ^_.*$ ]] || [[ "$type" == "SOA" ]] || [[ "$type" == "NS" ]]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
# Construire la commande samba-tool
|
||||
local cmd="samba-tool dns add localhost \"$zone_name\" \"$name\" $type \"$value\" --username=\"$SAMBA_USER\" --password=\"$SAMBA_PASSWORD\""
|
||||
local description="Ajout enregistrement: $name ($type) → $value"
|
||||
|
||||
((record_count++))
|
||||
|
||||
if execute_samba_cmd "$cmd" "$description"; then
|
||||
((success_count++))
|
||||
fi
|
||||
|
||||
done < "$records_file"
|
||||
|
||||
if [[ "$DRY_RUN" == "false" ]]; then
|
||||
log_info "Zone $zone_name: $success_count/$record_count enregistrements traités avec succès"
|
||||
fi
|
||||
echo
|
||||
}
|
||||
|
||||
# Fonction principale d'import
|
||||
import_dns_zones() {
|
||||
log_info "Début de l'import DNS depuis les fichiers CSV"
|
||||
echo
|
||||
|
||||
local total_zones=0
|
||||
local processed_zones=0
|
||||
|
||||
# Lire le fichier des zones (en sautant l'en-tête)
|
||||
while IFS=',' read -r zone_name zone_type is_reverse is_primary dynamic_update record_count; do
|
||||
# Supprimer les guillemets
|
||||
zone_name=$(echo "$zone_name" | tr -d '"')
|
||||
zone_type=$(echo "$zone_type" | tr -d '"')
|
||||
is_primary=$(echo "$is_primary" | tr -d '"')
|
||||
|
||||
# Ignorer l'en-tête
|
||||
if [[ "$zone_name" == "ZoneName" ]]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
# Traiter seulement les zones Forward Primary (pas les reverse)
|
||||
if [[ "$zone_type" != "Forward" ]] || [[ "$is_primary" != "True" ]]; then
|
||||
log_info "Ignorer la zone: $zone_name (Type: $zone_type, Primary: $is_primary)"
|
||||
continue
|
||||
fi
|
||||
|
||||
((total_zones++))
|
||||
|
||||
echo "==================================================================================="
|
||||
log_info "Traitement de la zone: $zone_name"
|
||||
echo
|
||||
|
||||
# Créer la zone si nécessaire
|
||||
if create_zone_if_not_exists "$zone_name"; then
|
||||
# Traiter les enregistrements de la zone
|
||||
process_zone_records "$zone_name"
|
||||
((processed_zones++))
|
||||
else
|
||||
log_error "Échec de la création/vérification de la zone: $zone_name"
|
||||
fi
|
||||
|
||||
done < "$ZONES_CSV"
|
||||
|
||||
echo "==================================================================================="
|
||||
log_success "Import terminé: $processed_zones/$total_zones zones traitées"
|
||||
}
|
||||
|
||||
# Fonction principale
|
||||
main() {
|
||||
echo "==================================================================================="
|
||||
echo " IMPORT DNS VERS SAMBA4"
|
||||
echo "==================================================================================="
|
||||
echo
|
||||
|
||||
check_prerequisites
|
||||
get_credentials
|
||||
get_execution_mode
|
||||
import_dns_zones
|
||||
|
||||
echo
|
||||
log_success "Script d'import DNS terminé avec succès !"
|
||||
}
|
||||
|
||||
# Exécution du script principal
|
||||
main "$@"
|
||||
Reference in New Issue
Block a user