mirror of
https://github.com/jessfraz/dockerfiles.git
synced 2024-11-23 11:31:49 +01:00
remove clean registry
Signed-off-by: Jess Frazelle <acidburn@github.com>
This commit is contained in:
parent
12e77bc673
commit
37eb951c89
|
@ -1,15 +0,0 @@
|
||||||
FROM r.j3ss.co/reg as reg
|
|
||||||
FROM jess/gcloud
|
|
||||||
|
|
||||||
RUN apk add --no-cache \
|
|
||||||
ca-certificates \
|
|
||||||
bash \
|
|
||||||
jq \
|
|
||||||
parallel
|
|
||||||
|
|
||||||
WORKDIR /root
|
|
||||||
|
|
||||||
COPY clean-registry /usr/bin/clean-registry
|
|
||||||
COPY --from=reg /usr/bin/reg /usr/bin/reg
|
|
||||||
|
|
||||||
ENTRYPOINT ["clean-registry"]
|
|
|
@ -1,74 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
##############################################################################
|
|
||||||
# clean-registry
|
|
||||||
# -----------
|
|
||||||
# Deletes old registry blobs that are not used in the latest version of the tag.
|
|
||||||
# This script assumes your registry is hosted on Google Cloud Storage.
|
|
||||||
#
|
|
||||||
# Usage:
|
|
||||||
# clean-registry
|
|
||||||
#
|
|
||||||
# :authors: Jess Frazelle, @jessfraz
|
|
||||||
# :date: 20 September 2016
|
|
||||||
# :version: 0.0.1
|
|
||||||
##############################################################################
|
|
||||||
set -e
|
|
||||||
set -o pipefail
|
|
||||||
|
|
||||||
REPO_URL="${REPO_URL:-r.j3ss.co}"
|
|
||||||
BUCKET_PREFIX="gs://${REPO_URL}/docker/registry/v2"
|
|
||||||
JOBS=${JOBS:-10}
|
|
||||||
|
|
||||||
# get the repos
|
|
||||||
mapfile -t repos < <(gsutil ls "${BUCKET_PREFIX}/repositories/" | awk -F"/" '{print $(NF-1)}')
|
|
||||||
|
|
||||||
for repo in "${repos[@]}"; do
|
|
||||||
# get the tags
|
|
||||||
mapfile -t tags < <(gsutil ls "${BUCKET_PREFIX}/repositories/${repo}/_manifests/tags/" | awk -F"/" '{print $(NF-1)}')
|
|
||||||
|
|
||||||
for tag in "${tags[@]}"; do
|
|
||||||
echo "repo: $repo | tag: $tag"
|
|
||||||
|
|
||||||
# get the latest index for the tag
|
|
||||||
current=$(gsutil cat "${BUCKET_PREFIX}/repositories/${repo}/_manifests/tags/${tag}/current/link" || true)
|
|
||||||
if [[ "$current" == "true" ]]; then
|
|
||||||
# continue the loop since we cannot cat
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
# split on : since the link comes back as:
|
|
||||||
# sha256:97bf033cf680a2fe49a6f0df40ac76dba97bc71745aeb06018dbf9df5de74bd6
|
|
||||||
ha=${current%:*}
|
|
||||||
id=${current#*:}
|
|
||||||
|
|
||||||
# get the manifest
|
|
||||||
manifest=$(gsutil cat "${BUCKET_PREFIX}/blobs/sha256/${id:0:2}/${id}/data" || true)
|
|
||||||
if [[ "$manifest" == "true" ]]; then
|
|
||||||
# continue the loop since we cannot cat
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
manifest_media_type=$(echo "${manifest}" | jq -r '.mediaType')
|
|
||||||
echo "media-type: $manifest_media_type"
|
|
||||||
|
|
||||||
|
|
||||||
if [ "${manifest_media_type}" == "application/vnd.docker.distribution.manifest.list.v2+json" ] ; then
|
|
||||||
# we have a manifest list and fetch the referenced manifests
|
|
||||||
mapfile -t additional_manifests < <(echo "${manifest}" | jq -r '.["manifests"] | .[].digest' | cut -d: -f2)
|
|
||||||
|
|
||||||
echo "additional_manifests: ${additional_manifests[*]}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "repo: $repo | tag: $tag | current: ${ha}:${id}"
|
|
||||||
|
|
||||||
# get the shas
|
|
||||||
mapfile -t shas < <(gsutil ls "${BUCKET_PREFIX}/repositories/${repo}/_manifests/tags/${tag}/index/${ha}/" | awk -F"/" '{print $(NF-1)}')
|
|
||||||
|
|
||||||
# remove the current sha
|
|
||||||
shas=( "${shas[@]/$id}" )
|
|
||||||
|
|
||||||
# shellcheck disable=SC2199
|
|
||||||
if [[ "${shas[@]}" != "" ]] && [[ ! -z "${shas[@]}" ]]; then
|
|
||||||
echo "[to be removed]: ${shas[*]}"
|
|
||||||
#parallel -j"${JOBS}" reg rm "${REPO_URL}/${repo}@${ha}:{1}" ::: "${shas[@]}" || true
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
done
|
|
Loading…
Reference in New Issue
Block a user