Dynamic preload docker images script 59/24859/8
authormayankg2703 <mayank.gupta@amdocs.com>
Wed, 22 Nov 2017 11:34:59 +0000 (11:34 +0000)
committerAlexis de Talhouët <alexis.de_talhouet@bell.ca>
Tue, 9 Jan 2018 13:11:41 +0000 (13:11 +0000)
Issue-ID: OOM-328

Change-Id: I7a646f53df0ac11cf3c1895243f905b7fe210b3c
Signed-off-by: mayankg2703 <mayank.gupta@amdocs.com>
kubernetes/config/prepull_docker.sh [new file with mode: 0755]

diff --git a/kubernetes/config/prepull_docker.sh b/kubernetes/config/prepull_docker.sh
new file mode 100755 (executable)
index 0000000..e456c3e
--- /dev/null
@@ -0,0 +1,145 @@
+#!/bin/bash
+
+#function to provide help
+#desc: this function provide help menu
+#argument: -h for help, -p for path, -r for repository
+#calling syntax: options
+
+options() {
+  cat <<EOF
+Usage: $0 [PARAMs]
+-h                  : help
+-l (Location)           : path for searching values.yaml
+                      [in case no path is provided then is will scan current directories for values.yml]
+-r (Repository)     : name of image repository
+                      [format [repository name/url]:(port)]
+                      [in case no repository is provided then defualt image repository will be nexus3.onap.org:10001]
+-u (User)           : user name for login
+                      [in case no user name is provided then default user will be docker]
+-p (Password)       : password for login
+                      [in case no password is provided then default user will be docker]
+EOF
+}
+
+#function to parse yaml file
+#desc: this function convert yaml file to dotted notion
+#argument: yaml file
+#calling syntax: parse_yaml <yaml_file_name>
+
+function parse_yaml {
+   local prefix=$2
+   local s='[[:space:]]*' w='[a-zA-Z0-9_]*' fs=$(echo @|tr @ '\034')
+   sed -ne "s|^\($s\):|\1|" \
+        -e "s|^\($s\)\($w\)$s:$s[\"']\(.*\)[\"']$s\$|\1$fs\2$fs\3|p" \
+        -e "s|^\($s\)\($w\)$s:$s\(.*\)$s\$|\1$fs\2$fs\3|p"  $1 |
+   awk -F$fs '{
+      indent = length($1)/2;
+      vname[indent] = $2;
+      for (i in vname) {if (i > indent) {delete vname[i]}}
+      if (length($3) > 0) {
+         vn=""; for (i=0; i<indent; i++) {vn=(vn)(vname[i])(".")}
+         printf("%s%s%s=\"%s\"\n", "'$prefix'",vn, $2, $3);
+      }
+   }'
+}
+
+#algorithmic steps
+#start
+#scan all values.yaml files
+#parse yaml file into dotted format
+#for each lines check there is image tag in line
+#store image name and check next line for version information
+#if in next line version is not present as a subtag then call docker pull with imageName
+#if version is present in next line then call docker pull with imageName and imageVersion
+#end
+
+
+#start processing for finding images and version
+IMAGE_TEXT="image"
+IMAGE_VERSION_TEXT="Version"
+LOCATION="."
+VALUES_FILE_NAME="values.yaml"
+IMAGE_REPOSITORY="nexus3.onap.org:10001"
+USER_NAME="docker"
+PASSWORD="docker"
+
+#scan for options menu
+while getopts ":h:l:r:u:p:" PARAM; do
+  case $PARAM in
+    h)
+      options
+      exit 1
+      ;;
+    l)
+      LOCATION=${OPTARG}
+      ;;
+    r)
+      IMAGE_REPOSITORY=${OPTARG}
+      ;;
+    u)
+      USER_NAME=${OPTARG}
+      ;;
+    p)
+      PASSWORD=${OPTARG}
+      ;;
+    ?)
+      options
+      exit
+      ;;
+  esac
+done
+
+
+#docker login to nexus repo
+echo docker login -u $USER_NAME -p $PASSWORD $IMAGE_REPOSITORY
+docker login -u $USER_NAME -p $PASSWORD $IMAGE_REPOSITORY
+
+#scan all values.yaml files recursively
+for filename in `find $LOCATION -name $VALUES_FILE_NAME`
+do
+        imageNameWithVersion=" ";
+        #parse yaml files
+        for line in  `parse_yaml $filename`
+        do
+                #find all image subtag inside converted values.yaml file's lines
+                if echo $line | grep -q $IMAGE_TEXT ; then
+                        #find imageName inside line
+                        imageName=`echo $line | awk -F "=" '{print $2}'`
+                        #remove attional prefix and postfix
+                        imageNameFinal=`echo "$imageName" | sed -e 's/^"//' -e 's/"$//' `
+
+                        #check if line contain Version as a subtag in lines if yes then call docker pull with version
+                        if echo $line | grep -q $IMAGE_VERSION_TEXT ; then
+                                echo docker pull "$imageNameWithVersion":"$imageNameFinal"
+                                docker pull $imageNameWithVersion:$imageNameFinal &
+                                imageNameWithVersion=" "
+                        else
+                                #check Version is not in subtag and old scanned value is present then call docker pull without version
+                                if [ "$imageNameWithVersion" != " " ]; then
+                                        echo docker pull "$imageNameWithVersion"
+                                        docker pull $imageNameWithVersion &
+                                        imageNameWithVersion=$imageNameFinal
+                                else
+                                        imageNameWithVersion=$imageNameFinal
+                                fi
+                        fi
+
+
+                fi
+
+
+        done
+done
+# complete processing
+echo "finished launching pulls"
+#MAX_WAIT_INTERVALS=300
+INTERVAL_COUNT=300
+while [  $(ps -ef | grep docker | grep pull | grep -v $0 | wc -l) -gt 0 ]; do
+  sleep 10
+  INTERVAL_COUNT=$((INTERVAL_COUNT - 1))
+  echo "waiting for last pull"
+  if [ "$INTERVAL_COUNT" -eq 0 ]; then
+    break
+  fi
+done
+