Add scripts to prepull and preload the docker images 16/816/2
authorZhe Huang <zhehuang@research.att.com>
Tue, 27 Aug 2019 16:55:57 +0000 (12:55 -0400)
committerZhe Huang <zhehuang@research.att.com>
Wed, 4 Sep 2019 19:56:29 +0000 (15:56 -0400)
Signed-off-by: Zhe Huang <zhehuang@research.att.com>
Change-Id: If575a192cbba59becc1571058ca682ab4f58e585

bin/preload-images [new file with mode: 0755]
bin/prepull-images [new file with mode: 0755]

diff --git a/bin/preload-images b/bin/preload-images
new file mode 100755 (executable)
index 0000000..a8b6a4f
--- /dev/null
@@ -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 (executable)
index 0000000..71afe00
--- /dev/null
@@ -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"
+
+
+