From 804696ccb91e70a4904ae5e796aaca0c691468cb Mon Sep 17 00:00:00 2001 From: infogulch Date: Thu, 6 May 2021 19:08:40 -0500 Subject: [PATCH] Clean up local var decls; list_json takes split image & token args --- docker-artifact.sh | 36 ++++++++++++++++-------------------- 1 file changed, 16 insertions(+), 20 deletions(-) diff --git a/docker-artifact.sh b/docker-artifact.sh index d918b3c..0bb06bf 100755 --- a/docker-artifact.sh +++ b/docker-artifact.sh @@ -53,28 +53,29 @@ function main { } function list { - local list="$(list_json "$@" | jq -r 'keys | .[]' | sed 's_^_ _')" + local registry repo tag token list + { read -r registry; read -r repo; read -r tag; } <<< "$(image_parts "$1")" + token="$(get_token "$registry" "$repo")" + list="$(list_json "$registry" "$repo" "$tag" "$token")" echo " ** The following files are available to download from $1: " - echo "$list" + echo "$(jq -r 'keys | .[]' <<< "$list" | sed 's_^_ _')" } function list_json { - { read -r registry; read -r repo; read -r tag; } <<< "$(image_parts "$1")" - local token="$(get_token "$registry" "$repo")" + local registry="$1" repo="$2" tag="$3" token="$4" manifest labels LOG "Querying manifest to extract labels for '$registry/$repo:$tag" - local manifest="$(curl --silent \ + manifest="$(curl --silent \ -H "Accept:application/vnd.docker.container.image.v1+json" \ -H "Authorization: Bearer $token" \ "https://$registry/v2/$repo/manifests/$tag")" # >&2 jq <<< "$manifest" - local labels="$(jq -r '.history[].v1Compatibility' <<< "$manifest" | jq --slurp '[.[].config | select(.Labels != null) | .Labels] | add')" + labels="$(jq -r '.history[].v1Compatibility' <<< "$manifest" | jq --slurp '[.[].config | select(.Labels != null) | .Labels] | add')" jq <<< "$labels" } function image_parts { - local image="$1" - local regex='^([-_a-z\.]+)/([-_a-z]+)(:([-_a-z]+))?$' - if [[ $image =~ $regex ]] ; then + local image="$1" regex='^([-_a-z\.]+)/([-_a-z]+)(:([-_a-z]+))?$' + if [[ "$image" =~ $regex ]] ; then local registry="${BASH_REMATCH[1]}" local repo="${BASH_REMATCH[2]}" local tag="${BASH_REMATCH[4]:-latest}" @@ -94,8 +95,7 @@ function image_parts { } function get_token { - local registry="$1" - local image="$2" + local registry="$1" image="$2" if [[ ! -z "$REGISTRY_TOKEN" ]] ; then echo "$REGISTRY_TOKEN" return @@ -112,13 +112,12 @@ function get_token { *.dkr.ecr.*.amazonaws.com) aws ecr get-authorization-token | jq -r '.authorizationData[0].authorizationToken' ;; + esac } function label { - local image="$1" - local searchpath="$2" - local tarfile="$(mktemp).tar" + local image="$1" searchpath="$2" tarfile="$(mktemp).tar" # check to see if image exists locally. If not, Docker already prints an error so just exit if ! docker image inspect "$image" > /dev/null ; then @@ -170,14 +169,11 @@ function label { } function _search_layer { - local idmap="$1" - local imagetar="$2" - local layertar="$3" - local search="$4" + local idmap="$1" imagetar="$2" layertar="$3" search="$4" # look up digest associated with layer path local digest="$(jq --arg key "$layertar" -r '.[$key]' <<< "$idmap")" # extract layer from image | list files in layer | add / prefix | search for file | append =$digest to each found file - tar -f "$imagetar" -x "$layertar" -O | tar -t | sed s_^_/_ | grep -wx "$search" | sed 's_.$_\0='"$digest"'_' + tar -f "$imagetar" -x "$layertar" -O | tar -t | sed s_^_/_ | grep -wxF "$search" | sed 's_.$_\0='"$digest"'_' } function delete_files { @@ -189,7 +185,7 @@ function LOG { [ $verbose ] && >&2 echo -e "$(tput setaf 4) => $@$(tput sgr0)" } -# run in subshell to allow sourcing this file while not stomping on parents' namespace +# run in subshell to allow sourcing this file without stomping on parents' namespace ( # Exports used in subshells export verbose=1