Routage h7¶
L’allocation d’une IP dans djadhere provoque le routage de cette dernière sur h7.
Pour cela, un cron sur h7 s’occupe toute les minutes de répercuter les modifications effectuées sur djadhere.
Les scripts s’occupant du routage se trouvent dans le dossier h7:/root/routing
.
CRON¶
Le cron est installé via /etc/cron.d/routing
.
Il lance le script /root/routing/update-ip-ttnn
.
Ce script télécharge depuis djadhere la dernière version de ip_ttnn.txt
avec curl (et s’arrête là en cas d’erreur de curl).
Un git diff est effectué sur le fichier ip_ttnn.txt afin de tester s’il a été modifié.
Si c’est le cas, il est commité localement et le script check-routing ip_ttnn.txt
est lancé.
Le script de routage¶
root@h7:~/routing# ./check-routing --help usage: check-routing [-h] [--quiet] [--fix] [--force] db positional arguments: db the ip_ttnn.txt file optional arguments: -h, --help show this help message and exit --quiet do not print executed commands --fix run ip commands needed to fix the routing ; if absent, they are printed but not executed --force by-pass mad guard (more than 10 commands, change cluster's IPs route)
Le script de routage lis le fichier ip_ttnn.txt
passé en argument et vérifie pour toutes les IPs que les routes associées, IPv4 et IPv6, sont correctes.
Les routes custom
(géré à la main) et openstack
(géré par bird) ne sont pas vérifiées.
Les IPs connues comme appartenant à h7, définie dans IP_LOCALS
, sont ignorées ; un message d’erreur est affiché si leur route n’est ni custom
, ni reserved
.
ip route get
et, si nécessaire, ajoute les actions nécessaires à la liste CMDS
:
ip route add
si la route est manquanteip route delete
si elle ne devrait pas être présenteip route delete
puisip route add
si elle est incorrecte.
Si l’IP est actuellement routé sur le vlan openstack (eth3.3132
), l’action se voit ajouter un attribut « need --force ».
S’il y a plus de 10 actions nécessaires, le script refuse de continuer sans l’option --force
.
Finalement, pour chaque action, celle-ci est affiché.
Si le script est lancé avec --fix
, la commande est lancé (sauf si --force
est également nécessaire mais absent des aguments du script).
Et au démarrage ?¶
Le script /root/ip_ttnn.sh
, lancé par /etc/rc.local
s’en occupe.