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
usage() {
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"
}
@ -138,7 +139,8 @@ else
FEED_CACHE=1
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
write_log DEBUG 'Getting 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
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
write_log FATAL "File not found: ${CHEMIN_CACHE}/${ID_RANGE_V4}"
exit 1
fi
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
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
write_log WARN 'Empty value or doent correspond to an IPv4'
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
# Pour chaque subnet V6
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
write_log FATAL "File not found: ${CHEMIN_CACHE}/${ID_RANGE_V4}"
exit 1
@ -231,6 +241,7 @@ for ID_RANGE_V6 in ${ID_RANGES_V6}; do
# 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_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
if [ -n "${VM_IPV6}" ]; 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
echo "Valeur vide ou ne correspond pas à un range IPV6"
fi
if [ -n "${ADD_IPV6}" ]; then
ip -6 route add ${ADD_IPV6} via ${VM_NH} dev ${IFACE}
fi
done
write_log INFO 'Script ended'