diff options
-rwxr-xr-x | kud/hosting_providers/vagrant/cleanup.sh | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/kud/hosting_providers/vagrant/cleanup.sh b/kud/hosting_providers/vagrant/cleanup.sh new file mode 100755 index 00000000..75e6de11 --- /dev/null +++ b/kud/hosting_providers/vagrant/cleanup.sh @@ -0,0 +1,87 @@ +#!/bin/bash + +# options: +# remove stopped containers and untagged images +# $ ./cleanup +# remove all stopped|running containers and untagged images +# $ ./cleanup --reset +# remove containers|images| matching {repository:tag} +# pattern and untagged images +# $ ./cleanup --purge {image} +# everything +# $ ./cleanup --nuclear + +function _clean_docker { +local matchExp="" +if [ "$1" == "--reset" ]; then + # Remove all containers regardless of state + docker rm -vf $(docker ps -a -q) 2>/dev/null || \ + echo "No more containers to remove." + exit 0 +elif [ "$1" == "--purge" ]; then + if [ -z "$2" ]; then + echo "Cannot purge. Please provide image name to purge." + exit 0 + fi + matchExp=$2 + # Attempt to remove running containers that are using the images we're trying to purge first. + if [[ $(docker ps --filter "name=$matchExp") ]]; then + echo "Removing running containers using the \"$2\" container image" + docker rm -vf $(docker ps -a --format "{{.Image}} {{.Names}}" | \ + awk '$0 ~ matchExp {print $2}') 2>/dev/null + else + echo "No running containers using the \"$2\" container image" + fi + echo "Continue to purge container images..." + # Remove all images matching arg given after "--purge"` + docker images -q --format "{{.Repository}}:{{.Tag}}" | grep "$matchExp" + returnVal=$? + if [ $returnVal -ne 0 ]; then + echo "No \"$2\" container image found." + exit 0 + else + echo "Removing all the \"$2\" container images." + docker images --format "{{.Repository}}:{{.Tag}}" | grep "$matchExp" |\ + awk '$0 ~ matchExp {print $1}' | xargs docker rmi 2>/dev/null + exit 0 + fi +else + # This alternate only removes "stopped" containers + docker rm -vf $(docker ps -a | grep "Exited" | \ + awk '{print $2}') 2>/dev/null || echo "No stopped containers to remove." +fi + +if [ "$1" == "--nuclear" ]; then + docker rm -vf $(docker ps -a -q) 2>/dev/null || \ + echo "No more containers to remove." + docker rmi $(docker images -q) 2>/dev/null || \ + echo "No more images to remove." + echo "Preparing to uninstall docker ....." + dpkg -l | grep Docker | awk '{print $2}' > /tmp/docker-list.txt + while read list; do + sudo apt-get remove $list -y + done </tmp/docker-list.txt + rm /tmp/docker-list.txt + else + # Remove all images which are not used by existing container + docker image prune -a || echo "No untagged images to delete." +fi + +} + +function _clean_ansible { +if [ "$1" == "--nuclear" ]; then +version=$(grep "ansible_version" ${kud_playbooks}/kud-vars.yml | \ +awk -F ': ' '{print $2}') +sudo pip uninstall ansible==$version +fi +} + +#Defining config path +INSTALLER_DIR="$(readlink -f "$(dirname "${BASH_SOURCE[0]}")")" +kud_folder=${INSTALLER_DIR} +kud_infra_folder=$kud_folder/../../deployment_infra +kud_playbooks=$kud_infra_folder/playbooks + +_clean_docker $@ +_clean_ansible $1 |