ajout de ensure-vip
This commit is contained in:
parent
ae7ffeb7b1
commit
4400ba758a
|
@ -0,0 +1,122 @@
|
|||
#!/bin/bash
|
||||
# -*- coding: utf-8 mode: sh -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8
|
||||
source "$(dirname "$0")/lib/ulib/ulib" || exit 1
|
||||
urequire DEFAULTS ipcalc
|
||||
|
||||
function display_help() {
|
||||
uecho "$scriptname: s'assurer que l'hôte courant a l'adresse IP spécifiée
|
||||
|
||||
USAGE
|
||||
$scriptname IPs...
|
||||
|
||||
NB: ce script ne supporte que la modification d'interfaces qui ne sont pas des
|
||||
bridges. il est conçu avant tout pour utilisation sur un serveur, pas un poste
|
||||
de travail.
|
||||
|
||||
OPTIONS
|
||||
-i, --ignore-iface IFACE
|
||||
Ajouter une interface à la liste des interfaces à ignorer. Si cette
|
||||
option est utilisée, la liste par défaut n'est pas utilisée, sauf si
|
||||
l'option -d est utilisée aussi.
|
||||
-d, --defaults
|
||||
Ajouter les valeurs suivantes à liste des interfaces à ignorer:
|
||||
${DEFAULT_IGNORE_IFACES[*]}
|
||||
Cette option est automatiquement activée si l'option -i n'est pas
|
||||
utilisée
|
||||
-n, --fake
|
||||
Afficher simplement les modification à effectuer"
|
||||
}
|
||||
|
||||
DEFAULT_IGNORE_IFACES=(
|
||||
"docker*"
|
||||
"br-*"
|
||||
"veth*"
|
||||
)
|
||||
DEFAULT_PROFILES=(prod test devel)
|
||||
|
||||
ignore_ifaces=()
|
||||
fake=
|
||||
args=(
|
||||
--help '$exit_with display_help'
|
||||
-i:,--ignore-iface: ignore_ifaces
|
||||
-d,--defaults '$array_extend ignore_ifaces DEFAULT_IGNORE_IFACES'
|
||||
-n,--fake fake=1
|
||||
)
|
||||
parse_args "$@"; set -- "${args[@]}"
|
||||
|
||||
require_debian
|
||||
|
||||
for vip in "$@"; do
|
||||
[ "${vip%/*}" != "$vip" ] || vip="$vip/32"
|
||||
vips+=("$vip")
|
||||
done
|
||||
|
||||
array_fix_paths ignore_ifaces
|
||||
[ ${#ignore_ifaces[*]} -gt 0 ] || ignore_ifaces=("${DEFAULT_IGNORE_IFACES[@]}")
|
||||
|
||||
if [ -n "$fake" ]; then
|
||||
set_verbosity --debug
|
||||
__NETWORK_DEVEL_SHOW_MODIFS=1
|
||||
__DEBIAN_NETWORK_DEVEL_SHOW_MODIFS=1
|
||||
fi
|
||||
|
||||
################################################################################
|
||||
# réimplémentation "corrigée" de network_config_partial()
|
||||
|
||||
nifile="$__DEBIAN_NETWORK_INTERFACES"
|
||||
|
||||
network_set_confips
|
||||
network_set_confbrs
|
||||
tmpconfips=()
|
||||
for confip in "${confips[@]}"; do
|
||||
network_parse_confip "$confip" iface gateway ipsuffixes
|
||||
continue=
|
||||
for ignore_iface in "${ignore_ifaces[@]}"; do
|
||||
if eval "[[ \"\$iface\" == $(qwc "$ignore_iface") ]]"; then
|
||||
continue=1
|
||||
break
|
||||
fi
|
||||
done
|
||||
[ -n "$continue" ] && continue
|
||||
|
||||
tmpconfips+=("$confip")
|
||||
network_parse_ipsuffix "${ipsuffixes[0]}" mainip suffix
|
||||
for vip in "${vips[@]}"; do
|
||||
if [ "${vip%.*}" == "${mainip%.*}" ]; then
|
||||
tmpconfips+=("$iface:$vip")
|
||||
fi
|
||||
done
|
||||
done
|
||||
confips=("${tmpconfips[@]}")
|
||||
confbrs=()
|
||||
network_fix_confs
|
||||
|
||||
network_config "" confips confbrs || exit 0
|
||||
|
||||
# des modifications ont eu lieu, tenter de configurer les nouvelles adresses
|
||||
# d'abord calculer les adresses ips qui sont activées
|
||||
network_set_confips
|
||||
for confip in "${confips[@]}"; do
|
||||
network_parse_confip "$confip" iface gateway ipsuffixes
|
||||
for ipsuffix in "${ipsuffixes[@]}"; do
|
||||
network_parse_ipsuffix "$ipsuffix" ip suffix
|
||||
array_addu ips "$ip"
|
||||
done
|
||||
done
|
||||
# puis lister les commandes correspondant aux adresses ips non activées
|
||||
array_from_lines ups "$(awkrun <"$nifile" -f ips[@] '
|
||||
$1 == "up" && $2 == "ip" && $3 == "addr" && $4 == "add" {
|
||||
ip = $5; sub(/(\/[0-9.]+)?$/, "", ip) # enlever suffixe
|
||||
if (! in_array(ip, ips)) {
|
||||
$1 = ""
|
||||
print
|
||||
}
|
||||
}')"
|
||||
if [ ${#ups[*]} -gt 0 ]; then
|
||||
etitle "Configuration des nouvelles adresses"
|
||||
for up in "${ups[@]}"; do
|
||||
estep "$up"
|
||||
eval "$up"
|
||||
done
|
||||
eend
|
||||
fi
|
Loading…
Reference in New Issue