From 193e40b4c3201a72568810583dd98821442fb642 Mon Sep 17 00:00:00 2001 From: Jose Diaz-Gonzalez Date: Thu, 18 Jul 2019 04:28:45 -0400 Subject: [PATCH] feat: scope cleanup to app when specified This will require changes in community plugins to properly add the specified labels to intermediate containers. Closes #3515 --- plugins/apps/functions | 1 + plugins/apps/subcommands/rename | 1 + plugins/common/functions | 47 +++++++++++++++---- .../scheduler-docker-cleanup | 38 +++++++++++---- 4 files changed, 69 insertions(+), 18 deletions(-) diff --git a/plugins/apps/functions b/plugins/apps/functions index 99ec92a3b..b891675b9 100755 --- a/plugins/apps/functions +++ b/plugins/apps/functions @@ -42,6 +42,7 @@ apps_destroy() { plugn trigger scheduler-stop "$DOKKU_SCHEDULER" "$APP" "$REMOVE_CONTAINERS" plugn trigger scheduler-post-delete "$DOKKU_SCHEDULER" "$APP" "$IMAGE_TAG" plugn trigger post-delete "$APP" "$IMAGE_TAG" + docker_cleanup "$APP" "true" } apps_exists() { diff --git a/plugins/apps/subcommands/rename b/plugins/apps/subcommands/rename index 8217f2afe..06ac56c12 100755 --- a/plugins/apps/subcommands/rename +++ b/plugins/apps/subcommands/rename @@ -30,6 +30,7 @@ apps_rename_cmd() { [[ -f "$DOKKU_ROOT/$NEW_APP/hooks/pre-receive" ]] && sed -i -e "s/git-hook $OLD_APP/git-hook $NEW_APP/g" "$DOKKU_ROOT/$NEW_APP/hooks/pre-receive" ps_rebuild "$NEW_APP" plugn trigger post-app-rename "$OLD_APP" "$NEW_APP" + docker_cleanup "$OLD_APP" "true" echo "Renaming $OLD_APP to $NEW_APP... done" } diff --git a/plugins/common/functions b/plugins/common/functions index cf74a1ba7..33c15d26a 100755 --- a/plugins/common/functions +++ b/plugins/common/functions @@ -264,6 +264,10 @@ get_app_scheduler() { declare APP="$1" local DOKKU_APP_SCHEDULER DOKKU_GLOBAL_SCHEDULER DOKKU_SCHEDULER + if [[ "$APP" == "--global" ]]; then + APP="" + fi + source "$PLUGIN_AVAILABLE_PATH/config/functions" [[ -n "$APP" ]] && DOKKU_APP_SCHEDULER="$(config_get "$APP" DOKKU_SCHEDULER || true)" DOKKU_GLOBAL_SCHEDULER="$(config_get --global DOKKU_SCHEDULER || true)" @@ -714,19 +718,44 @@ docker_cleanup() { dokku_log_info1 "Cleaning up..." local DOKKU_SCHEDULER=$(get_app_scheduler "$APP") + + if [[ "$APP" == "--global" ]]; then + APP="" + fi + plugn trigger scheduler-docker-cleanup "$DOKKU_SCHEDULER" "$APP" "$FORCE_CLEANUP" - # delete all non-running containers - # shellcheck disable=SC2046 - "$DOCKER_BIN" rm $("$DOCKER_BIN" ps -a -f "status=exited" -f "label=$DOKKU_CONTAINER_LABEL" -q) &>/dev/null || true + if [[ -n "$APP" ]]; then + # delete all non-running containers + # shellcheck disable=SC2046 + "$DOCKER_BIN" rm $("$DOCKER_BIN" ps -a -f "status=exited" -f "label=$DOKKU_CONTAINER_LABEL" -f "label=com.dokku.app-name=$APP" -q) &>/dev/null || true - # delete all dead containers - # shellcheck disable=SC2046 - "$DOCKER_BIN" rm $("$DOCKER_BIN" ps -a -f "status=dead" -f "label=$DOKKU_CONTAINER_LABEL" -q) &>/dev/null || true + # delete all dead containers + # shellcheck disable=SC2046 + "$DOCKER_BIN" rm $("$DOCKER_BIN" ps -a -f "status=dead" -f "label=$DOKKU_CONTAINER_LABEL" -f "label=com.dokku.app-name=$APP" -q) &>/dev/null || true - # delete unused images - # shellcheck disable=SC2046 - "$DOCKER_BIN" rmi $("$DOCKER_BIN" images -f 'dangling=true' -q) &>/dev/null & + # delete danging images + # shellcheck disable=SC2046 + "$DOCKER_BIN" rmi $("$DOCKER_BIN" images -f 'dangling=true' -f "label=com.dokku.app-name=$APP" -q) &>/dev/null & + + # delete unused images + docker image prune --all --filter "label=com.dokku.app-name=$APP" &>/dev/null & + else + # delete all non-running containers + # shellcheck disable=SC2046 + "$DOCKER_BIN" rm $("$DOCKER_BIN" ps -a -f "status=exited" -f "label=$DOKKU_CONTAINER_LABEL" -q) &>/dev/null || true + + # delete all dead containers + # shellcheck disable=SC2046 + "$DOCKER_BIN" rm $("$DOCKER_BIN" ps -a -f "status=dead" -f "label=$DOKKU_CONTAINER_LABEL" -q) &>/dev/null || true + + # delete danging images + # shellcheck disable=SC2046 + "$DOCKER_BIN" rmi $("$DOCKER_BIN" images -f 'dangling=true' -q) &>/dev/null & + + # delete unused images + docker image prune --all &>/dev/null & + fi } get_available_port() { diff --git a/plugins/scheduler-docker-local/scheduler-docker-cleanup b/plugins/scheduler-docker-local/scheduler-docker-cleanup index 5e89ef8cd..e47bc9d9b 100755 --- a/plugins/scheduler-docker-local/scheduler-docker-cleanup +++ b/plugins/scheduler-docker-local/scheduler-docker-cleanup @@ -12,17 +12,37 @@ scheduler-docker-local-scheduler-docker-cleanup() { return fi - # delete all non-running containers - # shellcheck disable=SC2046 - "$DOCKER_BIN" rm $("$DOCKER_BIN" ps -a -f "status=exited" -f "label=$DOKKU_CONTAINER_LABEL" -q) &>/dev/null || true + if [[ -n "$APP" ]]; then + # delete all non-running containers + # shellcheck disable=SC2046 + "$DOCKER_BIN" rm $("$DOCKER_BIN" ps -a -f "status=exited" -f "label=$DOKKU_CONTAINER_LABEL" -f "label=com.dokku.app-name=$APP" -q) &>/dev/null || true - # delete all dead containers - # shellcheck disable=SC2046 - "$DOCKER_BIN" rm $("$DOCKER_BIN" ps -a -f "status=dead" -f "label=$DOKKU_CONTAINER_LABEL" -q) &>/dev/null || true + # delete all dead containers + # shellcheck disable=SC2046 + "$DOCKER_BIN" rm $("$DOCKER_BIN" ps -a -f "status=dead" -f "label=$DOKKU_CONTAINER_LABEL" -f "label=com.dokku.app-name=$APP" -q) &>/dev/null || true - # delete unused images - # shellcheck disable=SC2046 - "$DOCKER_BIN" rmi $("$DOCKER_BIN" images -f 'dangling=true' -q) &>/dev/null & + # delete danging images + # shellcheck disable=SC2046 + "$DOCKER_BIN" rmi $("$DOCKER_BIN" images -f 'dangling=true' -f "label=com.dokku.app-name=$APP" -q) &>/dev/null & + + # delete unused images + docker image prune --all --filter "label=com.dokku.app-name=$APP" &>/dev/null & + else + # delete all non-running containers + # shellcheck disable=SC2046 + "$DOCKER_BIN" rm $("$DOCKER_BIN" ps -a -f "status=exited" -f "label=$DOKKU_CONTAINER_LABEL" -q) &>/dev/null || true + + # delete all dead containers + # shellcheck disable=SC2046 + "$DOCKER_BIN" rm $("$DOCKER_BIN" ps -a -f "status=dead" -f "label=$DOKKU_CONTAINER_LABEL" -q) &>/dev/null || true + + # delete danging images + # shellcheck disable=SC2046 + "$DOCKER_BIN" rmi $("$DOCKER_BIN" images -f 'dangling=true' -q) &>/dev/null & + + # delete unused images + docker image prune --all &>/dev/null & + fi } scheduler-docker-local-scheduler-docker-cleanup "$@"