From b3983edd2ac9f892a58c7dee1e2272bb0bd06251 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Wed, 3 Feb 2021 17:30:54 +0400 Subject: [PATCH] =?UTF-8?q?dk:=20support=20des=20mappings=20d'h=C3=B4tes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dk | 146 ++++++++++++++++++++++++++++++++++--------------- lib/default/dk | 15 ++++- 2 files changed, 116 insertions(+), 45 deletions(-) diff --git a/dk b/dk index a7697cf..6b6255c 100755 --- a/dk +++ b/dk @@ -341,7 +341,9 @@ OPTIONS build DEFAULT_ORIGIN= # origine par défaut des branches CLEAN= # fonction de nettoyage APPS=() # applications à mettre à jour + HOST_MAPPINGS=() # mappings d'hôtes pour les builds docker ## valeurs par défaut pour les projets composer + COMPOSER_DEVEL_SRCDIR= # répertoire de base des projets composer COMPOSER_ACTION= # action projet composer (install|update|none) COMPOSER_ARGS=() # arguments de composer install|update COMPOSER_PHP= @@ -350,6 +352,7 @@ OPTIONS build COMPOSER_CMD= COMPOSER_SETUP= ## valeurs par défaut pour les projets maven + MAVEN_DEVEL_SRCDIR= # répertoire de base des projets maven MAVEN_ACTION= # action projet maven (package|none) MAVEN_ARGS=() # arguments de mvn MAVEN_JAVA= @@ -391,6 +394,7 @@ OPTIONS build Certaines valeurs peuvent être valuées selon le profil {profile}_CLEAN= {profile}_APPS=() + {profile}_HOST_MAPPINGS=() {profile}_COMPOSER_ACTION= {profile}_COMPOSER_ARGS=() {profile}_COMPOSER_PHP= @@ -418,7 +422,8 @@ OPTIONS build -w, --ww, --update-apps-devel Faire la mise à jour en mode devel: le projet ainsi que ses fichiers des répertoires vendor/lib et vendor/ur sont synchronisés via rsync depuis - \$DEFAULT_DEVEL_SRCDIR qui vaut par défaut \$HOME/wop/php + \$DEFAULT_DEVEL_SRCDIR, \$COMPOSER_DEVEL_SRCDIR ou \$MAVEN_DEVEL_SRCDIR + en fonction du type de projet --uo, --update-apps-origin ORIGIN Spécifier l'origine par défaut pour update-apps --ub, --update-apps-branch BRANCH @@ -437,8 +442,8 @@ VARIABLES de update-apps.conf checkout, mais le répertoire destination pour la synchro DEVEL_SRCDIR répertoire source pour le mode devel. attention, il s'agit du répertoire - du projet, alors que DEFAULT_DEVEL_SRCDIR est le répertoire de base par - défaut des projets + du projet, alors que DEFAULT_DEVEL_SRCDIR, COMPOSER_DEVEL_SRCDIR et + MAVEN_DEVEL_SRCDIR sont les répertoires de base par défaut des projets ORIGIN vaut 'origin' par défaut BRANCH @@ -450,8 +455,13 @@ VARIABLES de update-apps.conf - si un fichier composer.json existe, vaut 'composer' par défaut - si un fichier pom.xml existe, vaut 'maven' par défaut - sinon vaut 'none' par défaut + BEFORE_BUILD + Cette variable est une liste de commandes à lancer après le clonage (ou + la mise à jour) du dépôt et avant le build, en fonction du type de + projet. La syntaxe à utiliser est la même que pour AFTER_UPDATE AFTER_UPDATE Cette variable est une liste de commandes à lancer après la maj du dépôt + et le build éventuel du projet - si le chemin est absolu ou relatif, lancer la commande telle quelle - s'il n'y a pas de chemin, alors ce doit être le nom d'une fonction existante auquel on enlève le préfixe update_apps_func_ @@ -470,14 +480,23 @@ VARIABLES de update-apps.conf TYPE= # type de projet (composer|none) COMPOSER_ACTION vaut 'install' par défaut. Indique ce qu'il faut faire pour un projet de - type 'composer' après avoir lancé les commandes de AFTER_UPDATE. Les - directives supportées sont 'install', 'update' et 'none' + type 'composer' après avoir lancé les commandes de BEFORE_BUILD et avant + les commandes de AFTER_UPDATE. Les directives supportées sont 'install', + 'update' et 'none' COMPOSER_ARGS - options à utiliser avec composer install|update. La valeur par défaut - dépend du profil: + options à utiliser avec 'composer \$COMPOSER_ACTION'. La valeur par + défaut dépend du profil: prod: --no-dev -o test: --no-dev -o autres: (pas d'options) + MAVEN_ACTION + vaut 'package' par défaut. Indique ce qu'il faut faire pour un projet de + type 'maven' après avoir lancé les commandes de BEFORE_BUILD et avant + les commandes de AFTER_UPDATE. Les directives supportées sont 'package' + (alias de 'clean package'), 'package_only' qui ne lance pas de clean + avant le build, et 'none' + MAVEN_ARGS + options à utiliser avec la commande 'mvn \$MAVEN_ACTION' FONCTIONS de update-apps.conf sqlmig [DESTDIR [SRCDIR [NOFIX]]] @@ -807,6 +826,7 @@ function update_apps_func_pff() { } function update_apps_func_mvn() { + # XXX obsolète: remplacé par le support natif des projets maven local cwd="$(pwd)" cd "$DEST" mvn "$@" || die @@ -818,17 +838,16 @@ function build_update_apps() { [ -f update-apps.conf ] || return 0 # charger le fichier de configuration - local DEFAULT_ORIGIN DEFAULT_BRANCH APPS + local DEFAULT_ORIGIN DEFAULT_BRANCH + local -a APPS DEFAULT_ORIGIN="$UPDATE_APPS_ORIGIN" [ -z "$DEFAULT_ORIGIN" ] && DEFAULT_ORIGIN=origin DEFAULT_BRANCH="$UPDATE_APPS_BRANCH" #XXX à terme, ne déployer en prod que la branche master [ -z "$DEFAULT_BRANCH" -a "$PROFILE" == prod ] && DEFAULT_BRANCH=develop #XXX master [ -z "$DEFAULT_BRANCH" ] && DEFAULT_BRANCH=develop - DEFAULT_DEVEL_SRCDIR="$HOME/wop/php" - DEFAULT_COMPOSER_ACTION=install - APPS=() CLEAN= + APPS=() [ -f update-apps.conf ] && source ./update-apps.conf local apps # liste des applications spécifique au profil @@ -869,11 +888,6 @@ function build_update_apps() { fi fi - DEVEL_SRCDIR="${var}_DEVEL_SRCDIR"; DEVEL_SRCDIR="${!DEVEL_SRCDIR}" - if [ -z "$DEVEL_SRCDIR" -a -n "$URL" ]; then - DEVEL_SRCDIR="$DEFAULT_DEVEL_SRCDIR/${URL##*/}" - fi - DEST="${var}_DEST"; DEST="${!DEST}" [ -n "$DEST" ] || DEST="$app/b" @@ -899,6 +913,16 @@ function build_update_apps() { # calculer le type maintenant, on en a besoin pour le mode devel TYPE="${var}_TYPE"; TYPE="${!TYPE}" + DEVEL_SRCDIR="${var}_DEVEL_SRCDIR"; DEVEL_SRCDIR="${!DEVEL_SRCDIR}" + if [ -z "$DEVEL_SRCDIR" -a -n "$URL" ]; then + case "$TYPE" in + composer) DEVEL_SRCDIR="${COMPOSER_DEVEL_SRCDIR:-$DEFAULT_DEVEL_SRCDIR}";; + maven) DEVEL_SRCDIR="${MAVEN_DEVEL_SRCDIR:-$DEFAULT_DEVEL_SRCDIR}";; + *) DEVEL_SRCDIR="$DEFAULT_DEVEL_SRCDIR";; + esac + DEVEL_SRCDIR="$DEVEL_SRCDIR/${URL##*/}" + fi + if [ -n "$BUILD_UPDATE_DEVEL" -a -n "$DEVEL_SRCDIR" ]; then mkdir -p "$DEST" || { eend; return 1; } DEST="$DEST/$NAME" @@ -1068,7 +1092,7 @@ function build_update_apps() { composer_action="${var}_${PROFILE}_COMPOSER_ACTION"; composer_action="${!composer_action}" [ -n "$composer_action" ] || { composer_action="${var}_COMPOSER_ACTION"; composer_action="${!composer_action}"; } [ -n "$composer_action" ] || { composer_action="${PROFILE}_COMPOSER_ACTION"; composer_action="${!composer_action}"; } - [ -n "$composer_action" ] || composer_action="$COMPOSER_ACTION" + [ -n "$composer_action" ] || composer_action="${COMPOSER_ACTION:-install}" composer_args="${var}_${PROFILE}_COMPOSER_ARGS" is_defined "$composer_args" || composer_args="${var}_COMPOSER_ARGS" @@ -1077,7 +1101,7 @@ function build_update_apps() { composer_args="${composer_args}[@]"; composer_args=("${!composer_args}") if [ -z "$BUILD_UPDATE_DEVEL" ]; then - case "${composer_action:-install}" in + case "$composer_action" in i|install) composer_action=install;; u|update) composer_action=update;; none|nop) composer_action=;; @@ -1107,7 +1131,7 @@ function build_update_apps() { maven_action="${var}_${PROFILE}_MAVEN_ACTION"; maven_action="${!maven_action}" [ -n "$maven_action" ] || { maven_action="${var}_MAVEN_ACTION"; maven_action="${!maven_action}"; } [ -n "$maven_action" ] || { maven_action="${PROFILE}_MAVEN_ACTION"; maven_action="${!maven_action}"; } - [ -n "$maven_action" ] || maven_action="$MAVEN_ACTION" + [ -n "$maven_action" ] || maven_action="${MAVEN_ACTION:-package}" maven_args="${var}_${PROFILE}_MAVEN_ARGS" is_defined "$maven_args" || maven_args="${var}_MAVEN_ARGS" @@ -1116,10 +1140,9 @@ function build_update_apps() { maven_args="${maven_args}[@]"; maven_args=("${!maven_args}") if [ -z "$BUILD_UPDATE_DEVEL" ]; then - case "${maven_action:-p}" in - c|clean) maven_action=clean;; - po|package_only) maven_action=package;; - p|package) maven_action="clean package";; + case "$maven_action" in + package_only|po) maven_action="package";; + "clean package"|package|cp|p) maven_action="clean package";; none|nop) maven_action=;; *) ewarn "$maven_action: action invalide"; maven_action=;; esac @@ -1926,7 +1949,7 @@ function default_docker_composer() { esac setx args=qvals "$@" - local -a basecmd cmd setupscript runscript + local -a basecmd setupscript runscript cmd basecmd=( -e user="$user" -e group="$group" @@ -1934,8 +1957,11 @@ function default_docker_composer() { -e setup="$COMPOSER_SETUP" -e composer="$COMPOSER_CMD" -e args="$args" - -v "$HOME:$HOME" ) + for host_mapping in "${HOST_MAPPINGS[@]}"; do + basecmd+=(--add-host "$host_mapping") + done + basecmd+=(-v "$HOME:$HOME") if [ "${projdir#$HOME/}" == "$projdir" ]; then # si le répertoire de projet ne se trouve pas dans $HOME, le monter aussi cmd+=(-v "$projdir:$projdir") @@ -1999,6 +2025,12 @@ fi function local_composer() { default_local_composer "$@"; } function docker_composer() { default_docker_composer "$@"; } function auto_composer() { + # mappings d'hôtes + if [ -z "$HOST_MAPPINGS" ]; then + HOST_MAPPINGS="${PROFILE}_HOST_MAPPINGS[@]"; HOST_MAPPINGS=("${!HOST_MAPPINGS}") + [ ${#HOST_MAPPINGS[*]} -gt 0 ] || HOST_MAPPINGS=("${DEFAULT_HOST_MAPPINGS[@]}") + fi + local COMPOSER_PHP= local COMPOSER_PHP_MAX= local COMPOSER_IMAGE="$DEFAULT_COMPOSER_IMAGE" @@ -2009,13 +2041,14 @@ function auto_composer() { # les premiers arguments peuvent servir à redéfinir les variables while [ $# -gt 0 ]; do case "$1" in - COMPOSER_PHP=*) setv "$1"; shift;; - COMPOSER_PHP_MAX=*) setv "$1"; shift;; - COMPOSER_IMAGE=*) setv "$1"; shift;; - COMPOSER_MACHINE=*) setv "$1"; shift;; - COMPOSER_CMD=*) setv "$1"; shift;; - COMPOSER_SETUP=*) setv "$1"; shift;; - COMPOSER_*=*) shift;; # ignorer variable inconnue + COMPOSER_*=*) + setv "$1" + shift + ;; + HOST_MAPPING=*) + HOST_MAPPINGS+=("${1#HOST_MAPPING=}") + shift + ;; *) break;; esac done @@ -2127,7 +2160,7 @@ function default_docker_maven() { esac setx args=qvals "$@" - local -a basecmd cmd setupscript runscript + local -a basecmd host_mapping setupscript runscript cmd basecmd=( -e user="$user" -e group="$group" @@ -2136,11 +2169,14 @@ function default_docker_maven() { -e maven="$MAVEN_CMD" -e args="$args" ${MAVEN_JAVA:+-e JAVA="$MAVEN_JAVA"} - -v "$HOME:$HOME" ) + for host_mapping in "${HOST_MAPPINGS[@]}"; do + basecmd+=(--add-host "$host_mapping") + done + basecmd+=(-v "$HOME:$HOME") if [ "${projdir#$HOME/}" == "$projdir" ]; then # si le répertoire de projet ne se trouve pas dans $HOME, le monter aussi - cmd+=(-v "$projdir:$projdir") + basecmd+=(-v "$projdir:$projdir") fi setupscript='eval "$setup"' runscript=' @@ -2196,6 +2232,12 @@ cd "$projdir" function local_maven() { default_local_maven "$@"; } function docker_maven() { default_docker_maven "$@"; } function auto_maven() { + # mappings d'hôtes + if [ -z "$HOST_MAPPINGS" ]; then + HOST_MAPPINGS="${PROFILE}_HOST_MAPPINGS[@]"; HOST_MAPPINGS=("${!HOST_MAPPINGS}") + [ ${#HOST_MAPPINGS[*]} -gt 0 ] || HOST_MAPPINGS=("${DEFAULT_HOST_MAPPINGS[@]}") + fi + local MAVEN_JAVA= local MAVEN_IMAGE="$DEFAULT_MAVEN_IMAGE" local MAVEN_MACHINE=-u @@ -2205,12 +2247,14 @@ function auto_maven() { # les premiers arguments peuvent servir à redéfinir les variables while [ $# -gt 0 ]; do case "$1" in - MAVEN_JAVA=*) setv "$1"; shift;; - MAVEN_IMAGE=*) setv "$1"; shift;; - MAVEN_MACHINE=*) setv "$1"; shift;; - MAVEN_CMD=*) setv "$1"; shift;; - MAVEN_SETUP=*) setv "$1"; shift;; - MAVEN_*=*) shift;; # ignorer variable inconnue + MAVEN_*=*) + setv "$1" + shift + ;; + HOST_MAPPING=*) + HOST_MAPPINGS+=("${1#HOST_MAPPING=}") + shift + ;; *) break;; esac done @@ -2330,15 +2374,27 @@ else DOCKER=docker fi DEFAULT_PROFILE=devel -DEFAULT_COMPOSER_IMAGE=docker.univ-reunion.fr/image/phpbuilder -DEFAULT_MAVEN_IMAGE=docker.univ-reunion.fr/image/javabuilder PROFILE= DM_ALIASES=() DM_PROFILES=() CLUSTERDIRS=() +DEFAULT_DEVEL_SRCDIR="$HOME/wop" +COMPOSER_DEVEL_SRCDIR="$HOME/wop/php" +MAVEN_DEVEL_SRCDIR="$HOME/wop/sn" +DEFAULT_COMPOSER_IMAGE=docker.univ-reunion.fr/image/phpbuilder +DEFAULT_MAVEN_IMAGE=docker.univ-reunion.fr/image/javabuilder +DEFAULT_HOST_MAPPINGS=() +prod_HOST_MAPPINGS=( + docker.univ-reunion.fr:10.82.70.154 + repos.univ-reunion.fr:10.82.70.246 + git.univ-reunion.fr:10.82.70.247 +) +test_HOST_MAPPINGS=("${prod_HOST_MAPPINGS}") set_defaults dk export PROFILE +HOST_MAPPINGS=() + chdir= CONFIG= DM_SET_MACHINE= @@ -2855,6 +2911,8 @@ NR == 1 { print; next } while [ $# -gt 0 -a "$1" != -- ]; do if [[ "$1" == COMPOSER_*=* ]]; then args+=("$1"); shift + elif [[ "$1" == HOST_MAPPING=* ]]; then + args+=("$1"); shift else break fi @@ -2878,6 +2936,8 @@ NR == 1 { print; next } while [ $# -gt 0 -a "$1" != -- ]; do if [[ "$1" == MAVEN_*=* ]]; then args+=("$1"); shift + elif [[ "$1" == HOST_MAPPING=* ]]; then + args+=("$1"); shift else break fi diff --git a/lib/default/dk b/lib/default/dk index 3bdacea..156c98d 100644 --- a/lib/default/dk +++ b/lib/default/dk @@ -14,5 +14,16 @@ # d'aliases #CLUSTERDIRS=(~/wop/containers/*.univ.run) -# Image à utiliser pour lancer composer -#COMPOSER_IMAGE=docker.univ-reunion.fr/image/apache-php-myiccas-utils:d10 +# Répertoire de base par défaut des projets en mode devel +#DEFAULT_DEVEL_SRCDIR="$HOME/wop" +#COMPOSER_DEVEL_SRCDIR="$HOME/wop/php" +#MAVEN_DEVEL_SRCDIR="$HOME/wop/sn" + +# Image à utiliser pour les builds +#DEFAULT_COMPOSER_IMAGE=docker.univ-reunion.fr/image/phpbuilder:d10 +#DEFAULT_MAVEN_IMAGE=docker.univ-reunion.fr/image/javabuilder:d10 + +# Mappings d'hôtes à activer pour les builds à base d'image +#DEFAULT_HOST_MAPPINGS=() +#prod_HOST_MAPPINGS=(docker.univ-reunion.fr:10.82.70.154 repos.univ-reunion.fr:10.82.70.246 git.univ-reunion.fr:10.82.70.247) +#test_HOST_MAPPINGS=("${prod_HOST_MAPPINGS}")