Guest User

Untitled

a guest
Jan 16th, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.79 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. set -o pipefail # the exit status of the last failed command gets returned
  4. set -o nounset # exit when using undeclared variables
  5.  
  6. # Defaults
  7. REPO=""
  8. VERBOSE=0
  9. PROFILE="default"
  10. KEEP_IMAGES=3
  11.  
  12.  
  13. function show_help() {
  14. cat > /dev/stdout << END
  15. ${0} -r <repo> [-n <number of images>] [-p <profile>] [-v] [-h]
  16.  
  17. REQUIRED ARGS:
  18. -r - ecr repository name, eg vaola/fog (required)
  19.  
  20. OPTIONAL ARGS:
  21. -n - number of images to keep (default=${KEEP_IMAGES})
  22. -p - aws profile (default=${PROFILE})
  23. -v - verbose logging (default off)
  24. -h - show help
  25. END
  26. }
  27.  
  28. while getopts "h?v:n:p:r:" opt
  29. do
  30. case "${opt}" in
  31. h|\?)
  32. show_help
  33. exit 0
  34. ;;
  35. v) VERBOSE=1 ;;
  36. n) KEEP_IMAGES=${OPTARG} ;;
  37. p) PROFILE=${OPTARG} ;;
  38. r) REPO=${OPTARG} ;;
  39. esac
  40. done
  41.  
  42. shift "$((OPTIND-1))"
  43.  
  44. if [[ ${REPO} = "" ]]
  45. then
  46. show_help
  47. exit 1
  48. fi
  49.  
  50. if [[ ${VERBOSE} -gt 0 ]]
  51. then
  52. set -x
  53. fi
  54.  
  55. BUILD_DIR_BASE=$(mktemp -d "${TMPDIR:-/tmp/}$(basename $0).XXXXXXXXXXXX")
  56. mkdir -p "${BUILD_DIR_BASE}"
  57. RAW_FILE="${BUILD_DIR_BASE}/raw"
  58. IMAGES_FILE="${BUILD_DIR_BASE}/images"
  59. IMAGES_SORTED_FILE="${BUILD_DIR_BASE}/images_sorted"
  60.  
  61.  
  62. function cleanup() {
  63. rm -fr "${BUILD_DIR_BASE}"
  64. }
  65.  
  66. trap cleanup TERM INT QUIT
  67.  
  68. aws ecr describe-images --repository-name ${REPO} --profile ${PROFILE} --output text > $RAW_FILE
  69.  
  70. while read line; do
  71. rows=($line)
  72. if [[ "${rows[0]}" != "IMAGEDETAILS" ]]; then
  73. continue
  74. fi
  75.  
  76. echo "${rows[2]} ${rows[5]} ${rows[1]}" >> ${IMAGES_FILE}
  77. done < ${RAW_FILE}
  78.  
  79. sort -ro ${IMAGES_SORTED_FILE} ${IMAGES_FILE}
  80.  
  81. COUNT=0
  82. while read line; do
  83. rows=($line)
  84. if [ "$COUNT" -ge "${KEEP_IMAGES}" ]; then
  85. aws ecr batch-delete-image --repository-name ${rows[1]} --profile ${PROFILE} --image-ids imageDigest=${rows[2]}
  86. fi
  87. (( COUNT++ ))
  88. done < ${IMAGES_SORTED_FILE}
  89.  
  90. cleanup
Add Comment
Please, Sign In to add comment