dk: support des mappings d'hôtes

This commit is contained in:
Jephté Clain 2021-02-03 17:30:54 +04:00
parent 543d2d2f79
commit b3983edd2a
2 changed files with 116 additions and 45 deletions

146
dk
View File

@ -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
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

View File

@ -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}")