diff --git a/dk b/dk index 77e7389..410aff5 100755 --- a/dk +++ b/dk @@ -23,8 +23,8 @@ veut dire qu'elle n'aura pas la même sématique. COMMANDES get-profile Afficher le profil courant - b|build [SERVICE] - Construire les images + b|build [NAME=VALUE...] [SERVICE] + Construire les images. Les variables NAME=VALUE sont des 'build args' p|push p|push [SERVICES...] La première syntaxe est utilisable avec un projet docker. Elle permet de @@ -56,31 +56,31 @@ COMMANDES x|exec SERVICE COMMAND Lancer une commande dans le container correspondant au service spécifié, qui doit être en fonctionnement - d|brd + d|brd [NAME=VALUE...] Construire les images (comme avec build), démarrer les services et suivre les logs de façon interactive (comme avec up). Dès que l'on arrête l'affichage des logs avec Ctrl+C, arrêter les services et supprimer l'environnement (comme avec down) Vaguement équivalent à -- build -- start [args] -- logs suivi de -- down - bs + bs [NAME=VALUE...] Construire les images (comme avec build) puis démarrer les services (comme avec start) Equivalent à -- build -- start [args] - br SERVICE [COMMAND] + br [NAME=VALUE...] SERVICE [COMMAND] Construire les images (comme avec build) puis démarrer le service avec la commande spécifiée (comme avec run) - Equivalent à -- build -- run [args] + Equivalent à -- build [NAME=VALUE...] -- run [args] y|deploy [args...] (Re)déployer un stack. Cette commande ne fonctionne qu'en mode swarm. Implique --stack - by|bd [args...] - Equivalent à --stack -- build -- deploy args... + by|bd [NAME=VALUE...] [args...] + Equivalent à --stack -- build [NAME=VALUE...] -- deploy args... Utilisable notamment en développement - bp [args...] - Equivalent à --stack -- build -- push args... - bpy|bpd [args...] - Equivalent à --stack -- build -- push -- deploy args... + bp [NAME=VALUE...] [args...] + Equivalent à --stack -- build [NAME=VALUE...] -- push args... + bpy|bpd [NAME=VALUE...] [args...] + Equivalent à --stack -- build [NAME=VALUE...] -- push -- deploy args... ser|service COMMAND SERVICE [args...] Frontend pour 'docker service COMMAND args... SERVICE' Cette commande ne fonctionne qu'en mode swarm. Il n'est pas nécessaire @@ -840,11 +840,11 @@ function default_update_build_env() { [ -n "$VERSION" ] || docker_add_build_arg VERSION "$(get_version)" [ -n "$VERSION" ] && TAGS+=("$VERSION") # Variables en ligne de commande - for var in "${VARS[@]}"; do + for var in "${VARS[@]}" "$@"; do docker_add_build_arg "${var%%=*}" "${var#*=}" done } -function update_build_env() { default_update_build_env; } +function update_build_env() { default_update_build_env "$@"; } function default_compose_build() { ${FAKE:+qvals} docker-compose \ @@ -873,24 +873,42 @@ function docker_build() { [ -n "$BUILD_BUILD" ] || return 0 default_docker_build "$@" } +function __parse_bargs() { + bargs=() + args=() + while [ $# -gt 0 ]; do + [[ "$1" == *=* ]] && bargs+=("$1") || args+=("$1") + shift + done +} function auto_build() { local -a replace_env_args env_args local -a replace_build_args build_args initialize_build_env + + local -a args bargs; local barg + __parse_bargs "$@" + set -- "${args[@]}" + if [ -f docker-compose.yml ]; then compose_set_env_args - update_build_env + update_build_env "${bargs[@]}" build_update_apps || return 1 compose_build "$@" elif [ -f Dockerfile ]; then docker_parse_env_args docker_check_name docker_add_build_arg build_date "$(date +%y%m%d)" - update_build_env + update_build_env "${bargs[@]}" build_update_apps || return 1 docker_build "$@" else - ${FAKE:+qvals} "$DOCKER" build ${NO_CACHE:+--no-cache} "$@" + for barg in "${bargs[@]}"; do + replace_build_args+=(--build-arg "$barg") + done + ${FAKE:+qvals} "$DOCKER" build \ + ${NO_CACHE:+--no-cache} \ + "${replace_build_args[@]}" "$@" fi } @@ -1078,7 +1096,7 @@ function compose_run() { default_compose_run "$@"; } function docker_run() { default_docker_run "$@"; } function auto_run() { eval "$(utools_local parse_opts)" - local detach no_deps rm=1 service_ports use_aliases volume + local detach no_deps rm=1 service_ports use_aliases volume disable_tty local -a envs labels local var for var in "${VARS[@]}"; do @@ -1096,6 +1114,7 @@ function auto_run() { --service-ports service_ports=1 --use-aliases use_aliases=1 -v:,--volume: volume= + -T disable_tty=1 @ args -- "$@" ) parse_opts "${args[@]}" && set -- "${args[@]}" || { eerror "$args"; return 1; } @@ -1114,6 +1133,7 @@ function auto_run() { ${service_ports:+--service-ports} ${use_aliases:+--use-aliases} ${volume:+-v "$volume"} + ${disable_tty:+-T} ) compose_run "$@" elif [ -f Dockerfile ]; then @@ -1840,7 +1860,8 @@ while [ $# -gt 0 ]; do args+=("$1"); shift done enote "Profil $PROFILE" - if auto_build; then + __parse_bargs "${args[@]}" + if auto_build "${bargs[@]}"; then auto_up "${args[@]}" && auto_logs || die else do_auto_down= @@ -1856,7 +1877,8 @@ while [ $# -gt 0 ]; do args+=("$1"); shift done enote "Profil $PROFILE" - auto_build && auto_up "${args[@]}" + __parse_bargs "${args[@]}" + auto_build "${bargs[@]}" && auto_up "${args[@]}" || die ;; br) build_set_options "$update_apps_mode" "$update_apps_origin" "$update_apps_branch" @@ -1868,7 +1890,8 @@ while [ $# -gt 0 ]; do args+=("$1"); shift done enote "Profil $PROFILE" - auto_build && auto_run "${args[@]}" + __parse_bargs "${args[@]}" + auto_build "${bargs[@]}" && auto_run "${args[@]}" || die ;; y|deploy) USE_STACK=1 @@ -1889,7 +1912,8 @@ while [ $# -gt 0 ]; do args+=("$1"); shift done enote "Profil $PROFILE" - auto_build && auto_deploy "${args[@]}" + __parse_bargs "${args[@]}" + auto_build "${bargs[@]}" && auto_deploy "${args[@]}" || die ;; bp) build_set_options "$update_apps_mode" "$update_apps_origin" "$update_apps_branch" @@ -1900,7 +1924,8 @@ while [ $# -gt 0 ]; do args+=("$1"); shift done enote "Profil $PROFILE" - auto_build && auto_push "${args[@]}" + __parse_bargs "${args[@]}" + auto_build "${bargs[@]}" && auto_push "${args[@]}" || die ;; bpy|bpd) build_set_options "$update_apps_mode" "$update_apps_origin" "$update_apps_branch" @@ -1911,7 +1936,8 @@ while [ $# -gt 0 ]; do args+=("$1"); shift done enote "Profil $PROFILE" - auto_build && auto_push && auto_deploy "${args[@]}" + __parse_bargs "${args[@]}" + auto_build "${bargs[@]}" && auto_push && auto_deploy "${args[@]}" || die ;; ser|service) args=()