diff --git a/ansible/roles/destroy/tasks/cleanup_images.yml b/ansible/roles/destroy/tasks/cleanup_images.yml index 83ecb68635..ea8f8715c9 100644 --- a/ansible/roles/destroy/tasks/cleanup_images.yml +++ b/ansible/roles/destroy/tasks/cleanup_images.yml @@ -1,5 +1,5 @@ --- - name: Removing Kolla images - command: /tmp/kolla-cleanup/tools/cleanup-images + command: /tmp/kolla-cleanup/tools/cleanup-images --all when: - destroy_include_images | bool diff --git a/doc/operating-kolla.rst b/doc/operating-kolla.rst index 7aec11025c..3f796ec415 100644 --- a/doc/operating-kolla.rst +++ b/doc/operating-kolla.rst @@ -79,7 +79,7 @@ triggered on the Docker host when the neutron-agents containers are launched. This can be useful when you want to do a new clean deployment, particularly one changing the network topology. -``tools/cleanup-images`` is used to remove all Docker images built by Kolla +``tools/cleanup-images --all`` is used to remove all Docker images built by Kolla from the local Docker cache. ``kolla-ansible -i INVENTORY deploy`` is used to deploy and start all Kolla diff --git a/tools/cleanup-images b/tools/cleanup-images index 255c337919..5d2c30f2ae 100755 --- a/tools/cleanup-images +++ b/tools/cleanup-images @@ -6,11 +6,73 @@ cd "$(dirname "$REAL_PATH")/.." . tools/validate-docker-execute.sh -KOLLA_IMAGES=$(docker images -a --filter "label=kolla_version" --format "{{.ID}}") +function process_cmd { + if [[ -z "$KOLLA_IMAGES" ]]; then + echo "No images to cleanup, exit now." + exit 0 + fi -if [[ -z "$KOLLA_IMAGES" ]]; then - echo "No images to cleanup, exit now." - exit 0 -fi + $CMD -docker rmi -f $@ $KOLLA_IMAGES + if [[ $? -ne 0 ]]; then + echo "Command failed $CMD" + exit 1 + fi +} + +function usage { + cat < Delete selected images + --image-version Set Kolla image version +EOF +} + +SHORT_OPTS="ahi:" +LONG_OPTS="all,dangling,help,image:,image-version:" +ARGS=$(getopt -o "${SHORT_OPTS}" -l "${LONG_OPTS}" --name "$0" -- "$@") || { usage >&2; exit 2; } + +eval set -- "$ARGS" + +case "$1" in + + (--all|-a) + KOLLA_IMAGES="$(docker images -a --filter "label=kolla_version" --format "{{.ID}}")" + shift + ;; + + (--dangling) + KOLLA_IMAGES="$(docker images -a --filter dangling=true --format "{{.ID}}")" + shift + ;; + + (--image|-i) + KOLLA_IMAGES="$(docker images -a --filter "label=kolla_version" --format "{{.Repository}}\t{{.ID}}" | grep -E "$2" | awk '{print $2}')" + shift 2 + ;; + + (--image-version) + KOLLA_IMAGES="$(docker images -a --filter "label=kolla_version=${2}" --format "{{.ID}}")" + shift 2 + ;; + + (--help|-h) + usage + shift + exit 0 + ;; + + (--) + shift + break + ;; + +esac + +CMD="docker rmi -f $@ $KOLLA_IMAGES" +process_cmd diff --git a/tools/releasenotes/notes/add-cleanup-images-cli-options-dd5c43fcc683b8e0.yaml b/tools/releasenotes/notes/add-cleanup-images-cli-options-dd5c43fcc683b8e0.yaml new file mode 100644 index 0000000000..59ada4baf3 --- /dev/null +++ b/tools/releasenotes/notes/add-cleanup-images-cli-options-dd5c43fcc683b8e0.yaml @@ -0,0 +1,6 @@ +--- +features: + - | + Cleanup-images support advanced features such as remove all kolla + images, remove dangling images, delete user selected images and + remove images from specific kolla_version.