From 386fc0d070da14df7c0cc825c4fdbdbc18906788 Mon Sep 17 00:00:00 2001 From: Jephte Clain Date: Wed, 5 Jun 2019 10:13:20 +0400 Subject: [PATCH] =?UTF-8?q?impl=C3=A9menter=20service,=20update,=20scale?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dk | 125 +++++++++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 105 insertions(+), 20 deletions(-) diff --git a/dk b/dk index f0e0a3f..0245668 100755 --- a/dk +++ b/dk @@ -41,18 +41,32 @@ COMMANDES Construire les images (comme avec build) puis démarrer les services (comme avec start) Equivalent à -- build -- start [args] - y|deploy - (Re)déployer un service. Cette commande ne fonctionne qu'en mode swarm - avec docker-compose. Implique --stack - S'il existe un fichier docker-stack.yml, il est utilisé de préférence à - la place de docker-compose.yml. De même, les fichiers de profil de la - forme docker-stack.PROFILE.yml sont utilisés de préférence à - docker-compose.PROFILE.yml - by|bd - Equivalent à --stack -- build -- deploy [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... Utilisable notamment en développement - bpy|bpd - Equivalent à --stack -- build -- push -- deploy [args] + bp [args...] + Equivalent à --stack -- build -- push args... + bpy|bpd [args...] + Equivalent à --stack -- build -- push -- deploy args... + 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 + de préfixer le nom du service avec le nom du stack, pour être cohérent + avec les autres commandes + IMPORTANT: notez que les arguments sont placés avant le nom du service. + Celà signifie qu'on ne peut spécifier que des options à la commande. + Penser aussi à protéger ces options de l'analyse eg. + $scriptname -- service logs web -f + Pour des cas d'utilisation plus complexe, il faut lancer directement + docker service + u|update SERVICE [args...] + Mettre à jour un service, équivalent à 'service update SERVICE' + scale SERVICE=REPLICAS [args...] + Mettre à jour le nom de réplicas d'un service, équivalent à la commande + 'service scale SERVICE=REPLICAS' ip|show-ip [SERVICE] Afficher l'adresse IP interne du service x|exec SERVICE COMMAND @@ -89,10 +103,12 @@ OPTIONS build (ces options ne sont valides que pour les commandes build, brd, bs, bd, bpd) --stack Indiquer que le build est fait pour un déploiement avec deploy. - Les fichiers de la forme docker-stack[.PROFILE].yml s'ils existent sont - utilisés de préférence à docker-compose[.PROFILE].yml - Cette option n'est nécessaire que si on fait uniquement le build puisque - les commandes deploy, bd, et bpd impliquent --stack + S'il existe un fichier docker-stack.yml, il est utilisé de préférence à + la place de docker-compose.yml. De même, les fichiers de profil de la + forme docker-stack.PROFILE.yml sont utilisés de préférence aux fichiers + docker-compose.PROFILE.yml + Cette option n'est nécessaire qu'avec build puisque les commandes + deploy, bd, bpd et update impliquent --stack -j, --no-cache Ne pas utiliser le cache lors du build -g, --ug, --no-update-apps @@ -236,7 +252,7 @@ function compose_set_env_args() { compose_set_project_name "$@" } -function compose_set_deploy_args() { +function docker_set_deploy_args() { if [ -n "$USE_STACK" -a -f docker-stack.yml ]; then replace_deploy_args+=(-c docker-stack.yml) else @@ -671,21 +687,55 @@ function auto_down() { fi } -function default_compose_deploy() { +function default_docker_deploy() { ${FAKE:+qvals} docker \ stack deploy \ "${replace_deploy_args[@]}" "${deploy_args[@]}" \ "$container_name" "$@" } -function compose_deploy() { default_compose_deploy "$@"; } +function docker_deploy() { default_docker_deploy "$@"; } function auto_deploy() { local -a replace_env_args env_args local -a replace_deploy_args deploy_args local project_name container_name if [ -f docker-compose.yml -o -f docker-stack.yml ]; then - compose_set_deploy_args set_container_name + docker_set_deploy_args set_container_name [ -n "$WITH_REGISTRY_AUTH" ] && replace_deploy_args+=(--with-registry-auth) - compose_deploy "$@" + docker_deploy "$@" + else + die "Impossible de trouver ni docker-compose.yml ni docker-stack.yml" + fi +} + +function default_docker_service() { + ${FAKE:+qvals} docker service "$@" +} +function docker_service() { default_docker_service "$@"; } +function auto_service() { + local -a replace_env_args env_args + local -a replace_deploy_args deploy_args + local project_name container_name + if [ -f docker-compose.yml -o -f docker-stack.yml ]; then + local command="$1"; shift + [ -n "$command" ] || { + eerror "Vous devez spécifier la commande" + return 1 + } + case "$command" in + ls) # ces commandes n'ont pas besoin du nom de service + docker_service "$command" "$@" + ;; + *) # ces commandes ont besoin du nom du service + local service="$1"; shift + [ -n "$service" ] || { + eerror "Vous devez spécifier le nom du service" + return 1 + } + docker_set_deploy_args set_container_name + service="${container_name}_${service#${container_name}_}" + docker_service "$command" "$@" "$service" + ;; + esac else die "Impossible de trouver ni docker-compose.yml ni docker-stack.yml" fi @@ -1025,6 +1075,17 @@ while [ $# -gt 0 ]; do enote "Profil $PROFILE" auto_build && auto_deploy "${args[@]}" ;; + bp) + build_set_options "$update_apps_mode" "$update_apps_origin" "$update_apps_branch" + [ -f .build.scripts.sh ] && source ./.build.scripts.sh + [ -f build.scripts.sh ] && source ./build.scripts.sh + args=() + while [ $# -gt 0 -a "$1" != -- ]; do + args+=("$1"); shift + done + enote "Profil $PROFILE" + auto_build && auto_push "${args[@]}" + ;; bpy|bpd) build_set_options "$update_apps_mode" "$update_apps_origin" "$update_apps_branch" [ -f .build.scripts.sh ] && source ./.build.scripts.sh @@ -1036,6 +1097,30 @@ while [ $# -gt 0 ]; do enote "Profil $PROFILE" auto_build && auto_push && auto_deploy "${args[@]}" ;; + service) + args=() + while [ $# -gt 0 -a "$1" != -- ]; do + args+=("$1"); shift + done + enote "Profil $PROFILE" + auto_service "${args[@]}" || die + ;; + u|update) + args=() + while [ $# -gt 0 -a "$1" != -- ]; do + args+=("$1"); shift + done + enote "Profil $PROFILE" + auto_service update "${args[@]}" || die + ;; + scale) + args=() + while [ $# -gt 0 -a "$1" != -- ]; do + args+=("$1"); shift + done + enote "Profil $PROFILE" + auto_service scale "${args[@]}" || die + ;; ip|show-ip) args=() while [ $# -gt 0 -a "$1" != -- ]; do