f-50: lab: rôles des nœuds, adresses du lien, loopback et installation de FRR #50
Signed-off-by: GnomeZworc <nicolas.boufidjeline@g3e.fr>
This commit is contained in:
parent
32940c57b4
commit
b348652995
21 changed files with 962 additions and 58 deletions
|
|
@ -28,14 +28,16 @@ usage: ${0##*/} <commande> [arguments]
|
|||
|
||||
plan résout l'offre horaire, l'OS et les clés SSH, affiche la requête de création
|
||||
et le prix ; ne crée rien
|
||||
up crée le serveur de lab, attend la fin de son installation et son SSH
|
||||
up crée le serveur de lab, attend la fin de son installation et son SSH,
|
||||
puis le prépare (voir prepare)
|
||||
status liste les serveurs de lab du projet
|
||||
ssh [commande] se connecte au serveur de lab ; avec une commande, un terminal n'est demandé
|
||||
que si l'entrée standard en est un
|
||||
prepare installe sur le serveur ce dont lab a besoin (qemu, genisoimage), vérifie
|
||||
/dev/kvm et la virtualisation imbriquée ; lancé aussi par up
|
||||
push <topologie> compile cmd/lab pour linux/amd64 et dépose sur le serveur ~/lab et
|
||||
~/<topologie> ; ensuite : ssh './lab up <topologie>'
|
||||
push <topologie> compile cmd/lab pour linux/amd64 et dépose sur le serveur ~/lab et le
|
||||
répertoire de la topologie dans ~/topology/ (avec les fichiers qu'elle
|
||||
référence) ; ensuite : ssh './lab up topology/<topologie>'
|
||||
down supprime tous les serveurs de lab du projet et attend leur disparition
|
||||
session [cmd] up, puis la commande distante (ou un shell), puis down quoi qu'il arrive
|
||||
|
||||
|
|
@ -332,6 +334,12 @@ push_file () {
|
|||
ssh_run -- "cat > '${TARGET}.part' && chmod ${MODE} '${TARGET}.part' && mv '${TARGET}.part' '${TARGET}'" < "${SOURCE}"
|
||||
}
|
||||
|
||||
push_dir () {
|
||||
local SOURCE="${1}"
|
||||
COPYFILE_DISABLE=1 tar --no-xattrs -C "${SOURCE}" -cf - . \
|
||||
| ssh_run -- "rm -rf topology.part && mkdir topology.part && tar -C topology.part -xf - && rm -rf topology && mv topology.part topology"
|
||||
}
|
||||
|
||||
cmd_push () {
|
||||
local TOPOLOGY="${1:-}"
|
||||
local NAME="${TOPOLOGY##*/}"
|
||||
|
|
@ -344,8 +352,8 @@ cmd_push () {
|
|||
(cd "${REPO_DIR}" && CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o "${BINARY}" ./cmd/lab) \
|
||||
|| die "compilation de lab échouée"
|
||||
push_file "${BINARY}" lab 755 || die "envoi de lab échoué"
|
||||
push_file "${TOPOLOGY}" "${NAME}" 644 || die "envoi de ${NAME} échoué"
|
||||
info "déposés sur le serveur : ~/lab, ~/${NAME} — ensuite : ${0##*/} ssh './lab up ${NAME}'"
|
||||
push_dir "$(dirname "${TOPOLOGY}")" || die "envoi du répertoire de ${NAME} échoué"
|
||||
info "déposés sur le serveur : ~/lab, ~/topology/ — ensuite : ${0##*/} ssh './lab up topology/${NAME}'"
|
||||
}
|
||||
|
||||
delete_server () {
|
||||
|
|
|
|||
|
|
@ -147,7 +147,7 @@ case "$*" in
|
|||
*"bash -s"*)
|
||||
cat > "${FAKE_DIR}/prepare.sh"
|
||||
exit "${FAKE_PREPARE_RC:-0}" ;;
|
||||
*"cat > "*)
|
||||
*"cat > "*|*"-xf -"*)
|
||||
N=$(ls "${FAKE_DIR}" | grep -c '^pushed\.')
|
||||
cat > "${FAKE_DIR}/pushed.$(( N + 1 ))"
|
||||
exit "${FAKE_PUSH_RC:-0}" ;;
|
||||
|
|
@ -659,18 +659,27 @@ test_prepare_without_known_server_is_refused () {
|
|||
}
|
||||
|
||||
test_push_builds_for_linux_and_sends_binary_and_topology () {
|
||||
setup "push : compile lab pour linux/amd64, envoie le binaire et la topologie"
|
||||
setup "push : compile lab pour linux/amd64, envoie le binaire et le répertoire de la topologie"
|
||||
known_server
|
||||
printf 'name: evpn-2hv\n' > "${WORK}/evpn-2hv.yml"
|
||||
run_lab push "${WORK}/evpn-2hv.yml" || fail "code de sortie $?"
|
||||
local REPO
|
||||
mkdir -p "${WORK}/conf/frr"
|
||||
printf 'name: evpn-2hv\n' > "${WORK}/conf/evpn-2hv.yml"
|
||||
printf 'hostname rr1\n' > "${WORK}/conf/frr/rr1.conf"
|
||||
xattr -w com.apple.test lab "${WORK}/conf/evpn-2hv.yml" 2>/dev/null || true
|
||||
run_lab push "${WORK}/conf/evpn-2hv.yml" || fail "code de sortie $?"
|
||||
local REPO LISTING
|
||||
REPO="$(cd "$(dirname "${SCRIPT}")/.." && pwd)"
|
||||
[[ $(cat "${WORK}/go.log") == "${REPO}|build -o ${WORK}/.cache/two-lab/lab ./cmd/lab|CGO_ENABLED=0 GOOS=linux GOARCH=amd64" ]] \
|
||||
|| fail "compilation : $(cat "${WORK}/go.log")"
|
||||
grep -q "debian@203.0.113.7 cat > 'lab.part' && chmod 755 'lab.part' && mv 'lab.part' 'lab'" "${WORK}/ssh.log" || fail "envoi de lab absent"
|
||||
grep -q "debian@203.0.113.7 cat > 'evpn-2hv.yml.part' && chmod 644 'evpn-2hv.yml.part' && mv 'evpn-2hv.yml.part' 'evpn-2hv.yml'" "${WORK}/ssh.log" || fail "envoi de la topologie absent"
|
||||
grep -q "debian@203.0.113.7 rm -rf topology.part && mkdir topology.part && tar -C topology.part -xf - && rm -rf topology && mv topology.part topology" "${WORK}/ssh.log" \
|
||||
|| fail "envoi du répertoire absent"
|
||||
[[ $(cat "${WORK}/pushed.1") == "binaire-lab" ]] || fail "contenu de lab : $(cat "${WORK}/pushed.1")"
|
||||
[[ $(cat "${WORK}/pushed.2") == "name: evpn-2hv" ]] || fail "contenu de la topologie : $(cat "${WORK}/pushed.2")"
|
||||
LISTING=$(tar -tf "${WORK}/pushed.2" | sed 's|^\./||' | grep -v '/$' | grep -v '^$' | sort | tr '\n' ' ')
|
||||
[[ "${LISTING}" == "evpn-2hv.yml frr/rr1.conf " ]] || fail "contenu de l'archive : ${LISTING}"
|
||||
grep -aq 'LIBARCHIVE.xattr' "${WORK}/pushed.2" && fail "attributs étendus macOS dans l'archive"
|
||||
mkdir "${WORK}/x" && tar -C "${WORK}/x" -xf "${WORK}/pushed.2"
|
||||
[[ $(cat "${WORK}/x/frr/rr1.conf") == "hostname rr1" ]] || fail "frr/rr1.conf altéré"
|
||||
grep -q "ssh './lab up topology/evpn-2hv.yml'" "${WORK}/out.log" || fail "consigne finale absente"
|
||||
teardown
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue