diff --git a/ifdown.sh b/ifdown.sh index 7a703c8..d93e0cb 100755 --- a/ifdown.sh +++ b/ifdown.sh @@ -1,4 +1,60 @@ #!/bin/bash -#echo "$1 éteint." >> /tmp/$1 -#ip link del ${1}_h +# Script de suppression des interfaces réseau d'un conteneur Systemd-nspawn + +if [[ -n "${1}" ]]; then + nom_conteneur="${1}" +else + echo "Erreur: aucun nom de conteneur renseigné." + exit 1 +fi + +genCmdIntRzo(){ + # Fonction exécuté en deuxième. Permet la génération de commandes pour la suppression d'interfaces réseau. + if [[ "${interface_init}" -eq 1 ]]; then + commandes_a_executer+=( "ip link delete ${interface}" ) + + # Réinitialisation des variables témoins + interface_init=0 + fi +} + +recupParams(){ + # Fonction exécuté en premier. Récuppère les paramètres du fichier de configuration du conteneur + declare -a params_int=( $(grep -B 2 "^Interface" /etc/systemd/nspawn/"${nom_conteneur}".nspawn | sed "/^--/d") ) + nb_params="${#params_int[*]}" + + for ((i=0 ; "${nb_params}" - "${i}" ; i++)); do + nom_param=$(echo "${params_int[${i}]}" | sed "s/=.*//" | sed "s/#//") + val_param=$(echo "${params_int[${i}]}" | sed "s/.*=//") + + # Récupération des données d'après le fichier de configuration + if [ "${nom_param}" == "Interface" ]; then + if [[ $(ip link show "${val_param}" 2> /dev/null) ]]; then + interface="${val_param}" + interface_init=1 + else + echo "Erreur: l'interface ${val_param} n'est pas existante. Arrêt immédiat du script \"${0}\" sans aucune modification du système." + exit 1 + fi + fi + + # Génération des commandes de création des interfaces réseau du conteneur + genCmdIntRzo + done +} + +execCmdIntRzo(){ + for ((i=0 ; "${#commandes_a_executer[*]}" - "${i}"; i++)); do + ${commandes_a_executer["${i}"]} + done +} + +principale(){ + # Fonction d'exécution du script de création d'interfaces réseau pour le conteneur en cours. + recupParams + execCmdIntRzo +} + +principale +echo "toto $(date)" > /tmp/toto.date