61 lines
2.2 KiB
Bash
61 lines
2.2 KiB
Bash
#!/bin/bash
|
|||
|
|
# Подготовка хоста к запуску стенда.
|
||
|
|
#
|
||
|
|
# ./host-prereq.sh загрузить модуль openvswitch
|
||
|
|
# ./host-prereq.sh --shim дополнительно поднять macvlan-shim, чтобы стенд
|
||
|
|
# можно было проверять с самого хоста
|
||
|
|
# ./host-prereq.sh --shim-down снять shim
|
||
|
|
#
|
||
|
|
# Про shim: macvlan-интерфейс контейнера и физический интерфейс хоста не видят
|
||
|
|
# друг друга напрямую — это ограничение macvlan, а не стенда. Клиент из
|
||
|
|
# 192.168.5.0/24 обращается к стенду без всяких shim; shim нужен только если
|
||
|
|
# проверять хочется с самой машины 192.168.5.9.
|
||
|
|
set -euo pipefail
|
||
|
|
|
||
|
|
PARENT=${PARENT:-enp3s0}
|
||
|
|
SHIM=${SHIM:-hpnn-shim}
|
||
|
|
SHIM_IP=${SHIM_IP:-192.168.5.13/32}
|
||
|
|
LB_IP=${LB_IP:-192.168.5.20}
|
||
|
|
VIP=${VIP:-192.168.5.21}
|
||
|
|
|
||
|
|
log() { echo "[host-prereq] $*"; }
|
||
|
|
|
||
|
|
shim_up() {
|
||
|
|
if ! ip link show "$SHIM" >/dev/null 2>&1; then
|
||
|
|
ip link add "$SHIM" link "$PARENT" type macvlan mode bridge
|
||
|
|
log "создан $SHIM поверх $PARENT"
|
||
|
|
fi
|
||
|
|
ip addr replace "$SHIM_IP" dev "$SHIM"
|
||
|
|
ip link set "$SHIM" up
|
||
|
|
ip route replace "$LB_IP/32" dev "$SHIM"
|
||
|
|
ip route replace "$VIP/32" dev "$SHIM"
|
||
|
|
log "shim поднят: $SHIM_IP, маршруты на $LB_IP и $VIP"
|
||
|
|
}
|
||
|
|
|
||
|
|
shim_down() {
|
||
|
|
ip link del "$SHIM" 2>/dev/null && log "$SHIM удалён" || log "$SHIM отсутствует"
|
||
|
|
}
|
||
|
|
|
||
|
|
case "${1:-}" in
|
||
|
|
--shim-down)
|
||
|
|
shim_down
|
||
|
|
exit 0
|
||
|
|
;;
|
||
|
|
esac
|
||
|
|
|
||
|
|
if ! grep -q '^openvswitch ' /proc/modules; then
|
||
|
|
modprobe openvswitch
|
||
|
|
log "модуль openvswitch загружен"
|
||
|
|
else
|
||
|
|
log "модуль openvswitch уже загружен"
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Чтобы стенд переживал перезагрузку хоста.
|
||
|
|
if [ -d /etc/modules-load.d ] && [ ! -f /etc/modules-load.d/openvswitch.conf ]; then
|
||
|
|
echo openvswitch > /etc/modules-load.d/openvswitch.conf
|
||
|
|
log "модуль добавлен в автозагрузку (/etc/modules-load.d/openvswitch.conf)"
|
||
|
|
fi
|
||
|
|
|
||
|
|
[ "${1:-}" = "--shim" ] && shim_up
|
||
|
|
|
||
|
|
log "готово"
|