From 44fcaf048a3994d47ef96ec0d2a767a0c35db763 Mon Sep 17 00:00:00 2001 From: Zhe Huang Date: Tue, 27 Aug 2019 12:55:57 -0400 Subject: [PATCH] Add scripts to prepull and preload the docker images Signed-off-by: Zhe Huang Change-Id: If575a192cbba59becc1571058ca682ab4f58e585 --- bin/preload-images | 76 ++++++++++++++++++++++++++++++++ bin/prepull-images | 127 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 203 insertions(+) create mode 100755 bin/preload-images create mode 100755 bin/prepull-images diff --git a/bin/preload-images b/bin/preload-images new file mode 100755 index 00000000..a8b6a4f5 --- /dev/null +++ b/bin/preload-images @@ -0,0 +1,76 @@ +#!/bin/bash +############################################################################## +# +# Copyright (c) 2019 AT&T Intellectual Property. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +############################################################################## + +# Installs well-known RIC charts then verifies specified helm chart +# Requires chart tgz archives in /tmp + + +while [ -n "$1" ]; do # while loop starts + + case "$1" in + + -d) DOCKER_REGISTRY=$2 + shift + ;; + + -p) IMAGE_DIRECTORY_PATH=$2 + shift + ;; + + *) echo "Option $1 not recognized. Please specify the docker registry path with the -d option and specify the directory path of the images with the -p option." + ;; # In case you typed a different option other than -d or -p + + esac + + shift + +done + +if [ -z $DOCKER_REGISTRY ]; then + echo "Please specify the docker registry path with the -d option." + exit 1 +fi + +if [ -z $IMAGE_DIRECTORY_PATH ]; then + echo "Please specify the directory path of the images with the -p option." + exit 1 +fi + + + + +for image in $IMAGE_DIRECTORY_PATH/*; do + OUTPUT=$(docker load -i $image) + IMAGE_PATH_ORIGINAL=$(echo $OUTPUT | grep image: | awk '{print $3}' ) + IMAGENAME=$(echo $IMAGE_PATH_ORIGINAL | awk '{ n=split($0, a, "/"); print a[n] }') + echo "************************************************************" + echo "Loading image $IMAGENAME" + docker tag $IMAGE_PATH_ORIGINAL $DOCKER_REGISTRY/$IMAGENAME + RESULT=$(docker push $DOCKER_REGISTRY/$IMAGENAME 2>&1) + LOGIN_ERROR=$(echo $RESULT |& grep "no basic auth credentials" ) + if [ ! -z "$LOGIN_ERROR" ]; then + echo "You are not logined to $DOCKER_REGISTRY. Please login by running \"docker login $DOCKER_REGISTRY\"" + exit 1 + fi + ACCESS_ERROR=$(echo $RESULT |& grep "denied: requested access to the resource is denied" ) + if [ ! -z "$ACCESS_ERROR" ]; then + echo "Failed to push image to docker registry: <$DOCKER_REGISTRY>. Please check if it is a typo." + exit 1 + fi +done diff --git a/bin/prepull-images b/bin/prepull-images new file mode 100755 index 00000000..71afe003 --- /dev/null +++ b/bin/prepull-images @@ -0,0 +1,127 @@ +#!/bin/bash +############################################################################## +# +# Copyright (c) 2019 AT&T Intellectual Property. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +############################################################################## + +# Installs well-known RIC charts then verifies specified helm chart +# Requires chart tgz archives in /tmp + + +while [ -n "$1" ]; do # while loop starts + + case "$1" in + + -f) OVERRIDEYAML=$2 + shift + ;; + + + -d) IMAGE_DIRECTORY_PATH=$2 + shift + ;; + + + *) echo "Option $1 not recognized. Please use -f to specify the recipe path." ;; # In case you typed a different option other than a,b,c + + esac + + shift + +done + +if [ -z $OVERRIDEYAML ]; then + echo "Deploy recipe is missing. Please use -f to specify the recipe path." + exit 1 +fi + +if [ -z $IMAGE_DIRECTORY_PATH ]; then + IMAGE_DIRECTORY_PATH=/tmp/ric_image + rm -rf $IMAGE_DIRECTORY_PATH + mkdir -p $IMAGE_DIRECTORY_PATH +fi + + +ROOT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )" +TEMP_DIR=/tmp +rm -rf $TEMP_DIR/imagelist +touch $TEMP_DIR/imagelist +CHART_ARRAY=() +while IFS= read -r -d $'\0'; do + CHART_ARRAY+=("$REPLY") +done < <(find $ROOT_DIR/../ -name Chart.yaml -printf '%h\0') + +rm -fr $TEMP_DIR/ric-common*.tgz + +helm package -d $TEMP_DIR $ROOT_DIR/../ric-common/Common-Template/helm/ric-common +echo "***************************************" + + + +for dir in "${CHART_ARRAY[@]}" +do + + #rm -rf $dir/charts + rm -rf $dir/tmpcharts + echo "Analyzing Chart $(echo $dir | awk '{n=split($0, a, "/"); print a[n]}')" + echo $dir + mkdir -p $dir/charts + cp $TEMP_DIR/ric-common*.tgz $dir/charts/ + + helm dep up $dir > /dev/null 2>&1 + + + if [ -z $OVERRIDEYAML ]; then + IMAGE_ARRAY=$(helm template $dir | grep "image:" | awk '{ gsub(/.*image: /, "", $0); gsub(/"/, "", $0); print $0}') + else + IMAGE_ARRAY=$(helm template -f $OVERRIDEYAML $dir | grep "image:" | awk '{ gsub(/.*image: /, "", $0); gsub(/"/, "", $0); print $0}' ) + fi + + for f in $IMAGE_ARRAY; do + if [ ! -z $f ]; then + FOUND=$(grep $f $TEMP_DIR/imagelist) + if [ -z $FOUND ]; then + echo "Found unique docker image $f." + echo $f >> $TEMP_DIR/imagelist + fi + fi + done + + echo "***************************************" +done + + +while IFS= read -r image +do + IMAGENAME=$(echo $image | awk '{ n=split($0, a, "/"); print a[n] }') + + echo "Pulling image $image" + RESULT=$(docker pull $image |& grep "no basic auth credentials" ) + if [ ! -z "$RESULT" ]; then + echo "You are not logined to docker registry. Please login by running \"docker login DOCKER_REGISTRY\"" + exit 1 + fi + + echo "Saving image $image" + docker save $image -o $IMAGE_DIRECTORY_PATH/$IMAGENAME + + echo "************************************************************" + + +done < "$TEMP_DIR/imagelist" + + + -- 2.16.6