From 6f4ab35abce8c418777023c741cf759218c7f9a5 Mon Sep 17 00:00:00 2001 From: Mark Burnett Date: Tue, 7 Nov 2017 15:35:22 -0600 Subject: [PATCH] Add a basic cleanup script Change-Id: Ifb3995500d7326f344f96d645561ef133c3f9a8a --- tools/cleanup.sh | 115 +++++++++++++++++++++++++++++++++++++++++++++ tools/lint_gate.sh | 2 +- 2 files changed, 116 insertions(+), 1 deletion(-) create mode 100755 tools/cleanup.sh diff --git a/tools/cleanup.sh b/tools/cleanup.sh new file mode 100755 index 00000000..9479deb2 --- /dev/null +++ b/tools/cleanup.sh @@ -0,0 +1,115 @@ +#!/bin/bash + +set -eux + +log () { + printf "$(date)\t%s\n" "${1}" +} + + +TO_RM=( + "/etc/cni" + "/etc/coredns" + "/etc/etcd" + "/etc/genesis" + "/etc/kubernetes" + "/etc/systemd/system/kubelet.service" + "/home/ceph" + "/var/lib/etcd" + "/var/lib/kubelet/pods" + "/var/lib/openstack-helm" + "/var/log/containers" + "/var/log/pods" +) + + +prune_docker() { + log "Docker prune" + docker volume prune -f + docker system prune -a -f +} + +remove_containers() { + log "Remove all Docker containers" + docker ps -aq 2> /dev/null | xargs --no-run-if-empty docker rm -fv +} + +remove_files() { + for item in "${TO_RM[@]}"; do + log "Removing ${item}" + rm -rf "${item}" + done +} + +reset_docker() { + log "Remove all local Docker images" + docker images -qa | xargs --no-run-if-empty docker rmi -f + + log "Remove remaining Docker files" + systemctl stop docker + if ! rm -rf /var/lib/docker/*; then + log "Failed to cleanup some files in /var/lib/docker" + find /var/lib/docker + fi + systemctl start docker +} + +stop_kubelet() { + log "Stop Kubelet and clean pods" + systemctl stop kubelet || true + + # Issue with orhan PODS + # https://github.com/kubernetes/kubernetes/issues/38498 + find /var/lib/kubelet/pods 2> /dev/null | while read orphan_pod; do + if [[ ${orphan_pod} == *io~secret/* ]] || [[ ${orphan_pod} == *empty-dir/* ]]; then + umount "${orphan_pod}" || true + rm -rf "${orphan_pod}" + fi + done +} + + +FORCE=0 +RESET_DOCKER=0 + +while getopts "fk" opt; do + case "${opt}" in + f) + FORCE=1 + ;; + k) + RESET_DOCKER=1 + ;; + *) + echo "Unknown option" + exit 1 + ;; + esac +done + +if [[ $FORCE == "0" ]]; then + echo Warning: This cleanup script is very aggresive. Run with -f to avoid this prompt. + while true; do + read -p "Are you sure you wish to proceed with aggressive cleanup?" yn + case $yn in + [Yy]*) + RESET_DOCKER=1 + break + ;; + *) + echo Exitting. + exit 1 + esac + done +fi + +stop_kubelet +remove_containers +remove_files +prune_docker + +systemctl daemon-reload + +if [[ $RESET_DOCKER == "1" ]]; then + reset_docker +fi diff --git a/tools/lint_gate.sh b/tools/lint_gate.sh index 75e0a36f..9bb1a7cb 100755 --- a/tools/lint_gate.sh +++ b/tools/lint_gate.sh @@ -12,7 +12,7 @@ done if [[ -x $(which shellcheck) ]]; then echo Checking shell scripts.. - shellcheck -s bash -e SC2029 "${WORKSPACE}"/tools/*gate*.sh "${WORKSPACE}"/tools/g2/stages/* "${WORKSPACE}"/tools/g2/lib/* + shellcheck -s bash -e SC2029 "${WORKSPACE}"/tools/cleanup.sh "${WORKSPACE}"/tools/*gate*.sh "${WORKSPACE}"/tools/g2/stages/* "${WORKSPACE}"/tools/g2/lib/* else echo No shellcheck executable found. Please, install it. exit 1