f-37: script: clean commentaries
Signed-off-by: GnomeZworc <nicolas.boufidjeline@g3e.fr>
This commit is contained in:
parent
3d2e42d9f1
commit
64438d64e6
1 changed files with 0 additions and 71 deletions
|
|
@ -11,7 +11,6 @@ esac
|
||||||
|
|
||||||
SCRIPT_PATH="scripts/deploy.sh"
|
SCRIPT_PATH="scripts/deploy.sh"
|
||||||
UNIT_DIR="/etc/systemd/system"
|
UNIT_DIR="/etc/systemd/system"
|
||||||
# Copies locales des scripts de bootstrap, déposées à la main sur l'host.
|
|
||||||
SCRIPTS_DIR="/opt/two/scripts"
|
SCRIPTS_DIR="/opt/two/scripts"
|
||||||
|
|
||||||
info () { echo "== ${1}"; }
|
info () { echo "== ${1}"; }
|
||||||
|
|
@ -33,10 +32,6 @@ exec_with_dry_run () {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
# `set -e` est inopérant dans main : bash désactive errexit dans le corps d'une
|
|
||||||
# fonction appelée depuis une liste `||` (cf. dernières lignes du fichier), y
|
|
||||||
# compris dans les fonctions qu'elle appelle. Les étapes qui ne doivent pas
|
|
||||||
# échouer silencieusement passent donc par run().
|
|
||||||
run () {
|
run () {
|
||||||
exec_with_dry_run "${1}" "${2}" || die "échec : ${2}"
|
exec_with_dry_run "${1}" "${2}" || die "échec : ${2}"
|
||||||
}
|
}
|
||||||
|
|
@ -52,8 +47,6 @@ check_latest_script () {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
# Liste les units actives correspondant à un motif, une par ligne.
|
|
||||||
# Sortie vide si aucune ne tourne — ce n'est pas une erreur.
|
|
||||||
list_active_units () {
|
list_active_units () {
|
||||||
PATTERN="${1}"
|
PATTERN="${1}"
|
||||||
systemctl list-units --state=active --no-legend --plain "${PATTERN}" 2>/dev/null \
|
systemctl list-units --state=active --no-legend --plain "${PATTERN}" 2>/dev/null \
|
||||||
|
|
@ -72,9 +65,6 @@ profile_main_units () {
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
# Instances actives des templates du profil (dnsmasq@vpc_br, metadata@i-xxx).
|
|
||||||
# À relever AVANT l'arrêt : c'est la seule façon de savoir lesquelles
|
|
||||||
# redémarrer ensuite.
|
|
||||||
active_instances () {
|
active_instances () {
|
||||||
for unit in $(profile_units "${1}")
|
for unit in $(profile_units "${1}")
|
||||||
do
|
do
|
||||||
|
|
@ -89,8 +79,6 @@ stop_services () {
|
||||||
PROFILE="${2}"
|
PROFILE="${2}"
|
||||||
INSTANCES="${3}"
|
INSTANCES="${3}"
|
||||||
|
|
||||||
# Les units principales en premier : sur le profil kvm, l'agent pilote les
|
|
||||||
# autres units, on ne veut pas qu'il observe leur disparition.
|
|
||||||
for unit in $(profile_main_units "${PROFILE}")
|
for unit in $(profile_main_units "${PROFILE}")
|
||||||
do
|
do
|
||||||
run "${DRY_RUN}" "systemctl stop '${unit}'"
|
run "${DRY_RUN}" "systemctl stop '${unit}'"
|
||||||
|
|
@ -107,9 +95,6 @@ start_services () {
|
||||||
PROFILE="${2}"
|
PROFILE="${2}"
|
||||||
INSTANCES="${3}"
|
INSTANCES="${3}"
|
||||||
|
|
||||||
# Ordre inverse de l'arrêt : les dépendances d'abord, les units principales
|
|
||||||
# en dernier. Une instance qui refuse de repartir (VM disparue entre-temps)
|
|
||||||
# ne doit pas empêcher le redémarrage de l'agent, d'où le simple warn.
|
|
||||||
for unit in ${INSTANCES}
|
for unit in ${INSTANCES}
|
||||||
do
|
do
|
||||||
exec_with_dry_run "${DRY_RUN}" "systemctl start '${unit}'" \
|
exec_with_dry_run "${DRY_RUN}" "systemctl start '${unit}'" \
|
||||||
|
|
@ -122,17 +107,6 @@ start_services () {
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
# ------------------------------------------------------------------- profils
|
|
||||||
#
|
|
||||||
# Un profil décrit ce qu'un host doit recevoir : ses units systemd, ses
|
|
||||||
# exécutables et son script de préparation. Rien n'est déployé qui ne soit
|
|
||||||
# listé par le profil — un host intel ne reçoit pas l'agent kvm. Ajouter un
|
|
||||||
# profil = ajouter une branche dans les trois fonctions ci-dessous et livrer un
|
|
||||||
# bootstrap_<profil>.sh exposant bootstrap_host().
|
|
||||||
#
|
|
||||||
# kvm hyperviseur QEMU/KVM : agent + metadata + dnsmasq, bridges, br_netfilter
|
|
||||||
# intel réservé, non implémenté
|
|
||||||
|
|
||||||
profile_units () {
|
profile_units () {
|
||||||
case "${1}" in
|
case "${1}" in
|
||||||
kvm) echo "agent.service dnsmasq@.service metadata@.service" ;;
|
kvm) echo "agent.service dnsmasq@.service metadata@.service" ;;
|
||||||
|
|
@ -141,9 +115,6 @@ profile_units () {
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
# Noms courts des exécutables, tels qu'ils apparaîtront dans /opt/two/bin.
|
|
||||||
# Un asset de release les porte soit à l'identique (run-dnsmasq-in-netns.sh),
|
|
||||||
# soit suffixé par la plateforme (agent → agent_linux_amd64).
|
|
||||||
profile_binaries () {
|
profile_binaries () {
|
||||||
case "${1}" in
|
case "${1}" in
|
||||||
kvm) echo "agent metadata run-dnsmasq-in-netns.sh" ;;
|
kvm) echo "agent metadata run-dnsmasq-in-netns.sh" ;;
|
||||||
|
|
@ -152,9 +123,6 @@ profile_binaries () {
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
# Script de préparation de l'host, sourcé par run_bootstrap. Vide = le profil
|
|
||||||
# n'a rien à préparer. Paquets, kernel et réseau appartiennent au profil, pas à
|
|
||||||
# deploy.sh.
|
|
||||||
profile_bootstrap () {
|
profile_bootstrap () {
|
||||||
case "${1}" in
|
case "${1}" in
|
||||||
kvm) echo "bootstrap_kvm.sh" ;;
|
kvm) echo "bootstrap_kvm.sh" ;;
|
||||||
|
|
@ -163,18 +131,6 @@ profile_bootstrap () {
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
# Charge le script de bootstrap du profil et lui passe la main.
|
|
||||||
#
|
|
||||||
# Même logique que ./libs/shflags : copie locale d'abord, dépôt ensuite.
|
|
||||||
# 1. /opt/two/scripts/<nom> — déposé à la main sur l'host, permet de figer ou
|
|
||||||
# de patcher un profil sans toucher au dépôt
|
|
||||||
# 2. la branche demandée — cas courant sur un host neuf
|
|
||||||
#
|
|
||||||
# Le fichier ne contenant que des définitions de fonctions, il supporte l'`eval`
|
|
||||||
# — au contraire de deploy.sh, dont la garde BASH_SOURCE finale déclencherait
|
|
||||||
# main(). `curl --fail` reste indispensable : sans lui, le corps d'un 404
|
|
||||||
# (« Not found. ») serait évalué comme du shell. En cas d'échec, curl ne produit
|
|
||||||
# rien, l'eval est un no-op et c'est le contrôle de bootstrap_host() qui tranche.
|
|
||||||
run_bootstrap () {
|
run_bootstrap () {
|
||||||
DRY_RUN="${1}"
|
DRY_RUN="${1}"
|
||||||
PROFILE="${2}"
|
PROFILE="${2}"
|
||||||
|
|
@ -198,8 +154,6 @@ run_bootstrap () {
|
||||||
"${FLAGS_uplink}" "${FLAGS_bridge}" "${FLAGS_pub_bridge}" "${FLAGS_rollback}"
|
"${FLAGS_uplink}" "${FLAGS_bridge}" "${FLAGS_pub_bridge}" "${FLAGS_rollback}"
|
||||||
}
|
}
|
||||||
|
|
||||||
# ------------------------------------------------------------------- release
|
|
||||||
|
|
||||||
resolve_tag () {
|
resolve_tag () {
|
||||||
TAG="${1}"
|
TAG="${1}"
|
||||||
GIT_SERVER="${2}"
|
GIT_SERVER="${2}"
|
||||||
|
|
@ -209,7 +163,6 @@ resolve_tag () {
|
||||||
curl --silent "${GIT_SERVER}api/v1/repos/${REPO_PATH}releases/?limit=1" | jq -r '.[0].tag_name'
|
curl --silent "${GIT_SERVER}api/v1/repos/${REPO_PATH}releases/?limit=1" | jq -r '.[0].tag_name'
|
||||||
}
|
}
|
||||||
|
|
||||||
# Assets de la release, un objet JSON compact par ligne.
|
|
||||||
release_assets () {
|
release_assets () {
|
||||||
GIT_SERVER="${1}"
|
GIT_SERVER="${1}"
|
||||||
REPO_PATH="${2}"
|
REPO_PATH="${2}"
|
||||||
|
|
@ -218,8 +171,6 @@ release_assets () {
|
||||||
curl --silent "${GIT_SERVER}api/v1/repos/${REPO_PATH}releases/tags/${RELEASE_TAG}" | jq -c '.assets[]'
|
curl --silent "${GIT_SERVER}api/v1/repos/${REPO_PATH}releases/tags/${RELEASE_TAG}" | jq -c '.assets[]'
|
||||||
}
|
}
|
||||||
|
|
||||||
# Nom complet de l'asset correspondant à un nom court : exact, ou suffixé par la
|
|
||||||
# plateforme (agent → agent_linux_amd64). Vide si absent de la release.
|
|
||||||
asset_name () {
|
asset_name () {
|
||||||
echo "${1}" | jq -r --arg s "${2}" 'select(.name == $s or (.name | startswith($s + "_"))) | .name' | head -1
|
echo "${1}" | jq -r --arg s "${2}" 'select(.name == $s or (.name | startswith($s + "_"))) | .name' | head -1
|
||||||
}
|
}
|
||||||
|
|
@ -228,9 +179,6 @@ asset_url () {
|
||||||
echo "${1}" | jq -r --arg n "${2}" 'select(.name == $n) | .browser_download_url' | head -1
|
echo "${1}" | jq -r --arg n "${2}" 'select(.name == $n) | .browser_download_url' | head -1
|
||||||
}
|
}
|
||||||
|
|
||||||
# Télécharge dans les répertoires versionnés les seuls assets réclamés par le
|
|
||||||
# profil. Aucun impact sur les services en cours, donc aucune raison de les
|
|
||||||
# arrêter pendant ce temps.
|
|
||||||
fetch_assets () {
|
fetch_assets () {
|
||||||
DRY_RUN="${1}"
|
DRY_RUN="${1}"
|
||||||
PROFILE="${2}"
|
PROFILE="${2}"
|
||||||
|
|
@ -259,9 +207,6 @@ fetch_assets () {
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
# Installe les units du profil depuis la release. Les templates (dnsmasq@,
|
|
||||||
# metadata@) ne sont pas activés : l'agent les instancie au fil des subnets et
|
|
||||||
# des VMs.
|
|
||||||
install_units () {
|
install_units () {
|
||||||
DRY_RUN="${1}"
|
DRY_RUN="${1}"
|
||||||
PROFILE="${2}"
|
PROFILE="${2}"
|
||||||
|
|
@ -291,8 +236,6 @@ install_units () {
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
# Bascule des liens symboliques, services arrêtés : c'est la seule fenêtre
|
|
||||||
# d'indisponibilité réelle.
|
|
||||||
switch_binaries () {
|
switch_binaries () {
|
||||||
DRY_RUN="${1}"
|
DRY_RUN="${1}"
|
||||||
PROFILE="${2}"
|
PROFILE="${2}"
|
||||||
|
|
@ -317,8 +260,6 @@ switch_binaries () {
|
||||||
start_services "${DRY_RUN}" "${PROFILE}" "${INSTANCES}"
|
start_services "${DRY_RUN}" "${PROFILE}" "${INSTANCES}"
|
||||||
}
|
}
|
||||||
|
|
||||||
# ----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
main () {
|
main () {
|
||||||
[[ -f ./libs/shflags ]] && . ./libs/shflags || eval "$(curl --silent https://git.g3e.fr/H6N/tools/raw/branch/main/libs/shflags)"
|
[[ -f ./libs/shflags ]] && . ./libs/shflags || eval "$(curl --silent https://git.g3e.fr/H6N/tools/raw/branch/main/libs/shflags)"
|
||||||
|
|
||||||
|
|
@ -342,14 +283,6 @@ main () {
|
||||||
|
|
||||||
profile_units "${FLAGS_profile}" >/dev/null || die "profil inconnu : ${FLAGS_profile}"
|
profile_units "${FLAGS_profile}" >/dev/null || die "profil inconnu : ${FLAGS_profile}"
|
||||||
|
|
||||||
# --noup_script court-circuite la vérification : seul moyen de dérouler un
|
|
||||||
# script en cours de modification, encore absent de la branche.
|
|
||||||
#
|
|
||||||
# L'ancien idiome `check_latest_script || ( ... ; exit 1 )` ne s'arrêtait pas
|
|
||||||
# réellement : le `exit 1` d'un sous-shell placé en fin de liste `||` est
|
|
||||||
# ignoré parce qu'errexit est désactivé dans le corps de main. Le script
|
|
||||||
# s'écrasait puis continuait à exécuter sa version périmée en mémoire. D'où
|
|
||||||
# le die() explicite.
|
|
||||||
if [[ ${FLAGS_up_script} -eq ${FLAGS_TRUE} ]]
|
if [[ ${FLAGS_up_script} -eq ${FLAGS_TRUE} ]]
|
||||||
then
|
then
|
||||||
SCRIPT_URL="${FLAGS_git_server}${FLAGS_repo_path}raw/branch/${FLAGS_branch}${SCRIPT_PATH}"
|
SCRIPT_URL="${FLAGS_git_server}${FLAGS_repo_path}raw/branch/${FLAGS_branch}${SCRIPT_PATH}"
|
||||||
|
|
@ -360,8 +293,6 @@ main () {
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Préparation de l'host avant tout téléchargement : elle ne dépend pas de la
|
|
||||||
# release, et les paquets comme le réseau conditionnent la suite.
|
|
||||||
[[ ${FLAGS_bootstrap} -eq ${FLAGS_TRUE} ]] && \
|
[[ ${FLAGS_bootstrap} -eq ${FLAGS_TRUE} ]] && \
|
||||||
run_bootstrap "${FLAGS_dryrun}" "${FLAGS_profile}" "${FLAGS_git_server}" "${FLAGS_repo_path}" "${FLAGS_branch}"
|
run_bootstrap "${FLAGS_dryrun}" "${FLAGS_profile}" "${FLAGS_git_server}" "${FLAGS_repo_path}" "${FLAGS_branch}"
|
||||||
|
|
||||||
|
|
@ -377,8 +308,6 @@ main () {
|
||||||
|
|
||||||
fetch_assets "${FLAGS_dryrun}" "${FLAGS_profile}" "${ASSETS}"
|
fetch_assets "${FLAGS_dryrun}" "${FLAGS_profile}" "${ASSETS}"
|
||||||
|
|
||||||
# Les units sont installées avant la bascule : stop_services arrête les
|
|
||||||
# units principales du profil, qui doivent donc déjà exister.
|
|
||||||
install_units "${FLAGS_dryrun}" "${FLAGS_profile}"
|
install_units "${FLAGS_dryrun}" "${FLAGS_profile}"
|
||||||
switch_binaries "${FLAGS_dryrun}" "${FLAGS_profile}" "${ASSETS}"
|
switch_binaries "${FLAGS_dryrun}" "${FLAGS_profile}" "${ASSETS}"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue