Manage the routing of additional prefixes on VMs

This commit is contained in:
Alarig Le Lay 2019-09-29 22:17:30 +02:00
parent e41806ae48
commit 0d9ba4deef
1 changed files with 19 additions and 4 deletions

View File

@ -85,7 +85,8 @@ fi
# Fonction d'aide # Fonction d'aide
usage() { usage() {
printf "Usage: ./creationRoutesVM.sh <VM_ID>\n" printf "Usage: ./creationRoutesVM.sh <VM_ID>\n"
printf "VM_ID est l'id d'une VM dans PROXMOX, un entier supérieur à zéro\n" printf "VM_ID est lid dune VM dans PROXMOX, un entier supérieur à"
printf "zéro\n"
printf "option : \t-h, --help Affiche ce message daide\n" printf "option : \t-h, --help Affiche ce message daide\n"
} }
@ -138,7 +139,8 @@ else
FEED_CACHE=1 FEED_CACHE=1
fi fi
# Mise du TOKEN dans une variable et retrait des éventuelles guillemets ajoutées lors de la récupération via jq # Mise du TOKEN dans une variable et retrait des éventuelles guillemets ajoutées
# lors de la récupération via jq
if [ ${FEED_CACHE} = 1 ]; then if [ ${FEED_CACHE} = 1 ]; then
write_log DEBUG 'Getting token' write_log DEBUG 'Getting token'
TOKEN=$(echo ${RES_AUTHENT} | jq -r '.data.token') TOKEN=$(echo ${RES_AUTHENT} | jq -r '.data.token')
@ -191,13 +193,15 @@ MAC=$(grep 'vmbr1$' /etc/pve/nodes/*/qemu-server/${VM_ID}.conf | \
# Pour chaque subnet V4 # Pour chaque subnet V4
for ID_RANGE_V4 in ${ID_RANGES_V4}; do for ID_RANGE_V4 in ${ID_RANGES_V4}; do
# Récupération des informations V4 en cache pour cet ID de subnet si le fichier de cache associé existe # Récupération des informations V4 en cache pour cet ID de subnet si le
# fichier de cache associé existe
if [ ! -f "${CHEMIN_CACHE}/${ID_RANGE_V4}" ]; then if [ ! -f "${CHEMIN_CACHE}/${ID_RANGE_V4}" ]; then
write_log FATAL "File not found: ${CHEMIN_CACHE}/${ID_RANGE_V4}" write_log FATAL "File not found: ${CHEMIN_CACHE}/${ID_RANGE_V4}"
exit 1 exit 1
fi fi
VM_IPV4=$(jq -r ".data[] | select(.custom_vm_id==\"${VM_ID}\") | .ip" ${CHEMIN_CACHE}/${ID_RANGE_V4}) VM_IPV4=$(jq -r ".data[] | select(.custom_vm_id==\"${VM_ID}\") | .ip" ${CHEMIN_CACHE}/${ID_RANGE_V4})
ADD_IPV4=$(jq -r ".data[] | select(.custom_vm_id==\"${VM_ID}\") | .custom_add_range" ${CHEMIN_CACHE}/${ID_RANGE_V4})
# Wait for the migration to finish # Wait for the migration to finish
sleep 5 sleep 5
@ -218,11 +222,17 @@ for ID_RANGE_V4 in ${ID_RANGES_V4}; do
# En cas d'echec, on continue de parcourir les autres RANGES # En cas d'echec, on continue de parcourir les autres RANGES
write_log WARN 'Empty value or doent correspond to an IPv4' write_log WARN 'Empty value or doent correspond to an IPv4'
fi fi
if [ -n "${ADD_IPV4}" ]; then
# Dont know why bird needs “onlink” to learn the route…
ip route add ${ADD_IPV4} via ${VM_IPV4} dev ${IFACE} onlink
fi
done done
# Pour chaque subnet V6 # Pour chaque subnet V6
for ID_RANGE_V6 in ${ID_RANGES_V6}; do for ID_RANGE_V6 in ${ID_RANGES_V6}; do
# Récupération des informations V6 en cache pour cet ID de subnet si le fichier de cache associé existe # Récupération des informations V6 en cache pour cet ID de subnet si le
# fichier de cache associé existe
if [ ! -f "${CHEMIN_CACHE}/${ID_RANGE_V6}" ]; then if [ ! -f "${CHEMIN_CACHE}/${ID_RANGE_V6}" ]; then
write_log FATAL "File not found: ${CHEMIN_CACHE}/${ID_RANGE_V4}" write_log FATAL "File not found: ${CHEMIN_CACHE}/${ID_RANGE_V4}"
exit 1 exit 1
@ -231,6 +241,7 @@ for ID_RANGE_V6 in ${ID_RANGES_V6}; do
# Recherche des informations correspondants à la VM_ID # Recherche des informations correspondants à la VM_ID
VM_IPV6=$(jq -r ".data[] | select(.custom_vm_id==\"${VM_ID}\") | .subnet" ${CHEMIN_CACHE}/${ID_RANGE_V6}) VM_IPV6=$(jq -r ".data[] | select(.custom_vm_id==\"${VM_ID}\") | .subnet" ${CHEMIN_CACHE}/${ID_RANGE_V6})
VM_NH=$(jq -r ".data[] | select(.custom_vm_id==\"${VM_ID}\") | .\"Next-hop\"" ${CHEMIN_CACHE}/${ID_RANGE_V6}) VM_NH=$(jq -r ".data[] | select(.custom_vm_id==\"${VM_ID}\") | .\"Next-hop\"" ${CHEMIN_CACHE}/${ID_RANGE_V6})
ADD_IPV6=$(jq -r ".data[] | select(.custom_vm_id==\"${VM_ID}\") | .custom_add_range" ${CHEMIN_CACHE}/${ID_RANGE_V6})
# Si la valeur n'est pas vide et correspond à un range IPV6 # Si la valeur n'est pas vide et correspond à un range IPV6
if [ -n "${VM_IPV6}" ]; then if [ -n "${VM_IPV6}" ]; then
if [ ${VM_NH} = 'null' ]; then if [ ${VM_NH} = 'null' ]; then
@ -266,6 +277,10 @@ for ID_RANGE_V6 in ${ID_RANGES_V6}; do
# En cas d'echec, on continue de parcourir les autres RANGES # En cas d'echec, on continue de parcourir les autres RANGES
echo "Valeur vide ou ne correspond pas à un range IPV6" echo "Valeur vide ou ne correspond pas à un range IPV6"
fi fi
if [ -n "${ADD_IPV6}" ]; then
ip -6 route add ${ADD_IPV6} via ${VM_NH} dev ${IFACE}
fi
done done
write_log INFO 'Script ended' write_log INFO 'Script ended'