54d7a2d7ffdfb251596934c9d14c0c481c20b45d
[oom.git] / kubernetes / config / prepull_docker.sh
1 #!/bin/bash
2
3 #function to provide help
4 #desc: this function provide help menu
5 #argument: -h for help, -p for path, -r for repository
6 #calling syntax: options
7
8 options() {
9   cat <<EOF
10 Usage: $0 [PARAMs]
11 -h                  : help
12 -l (Location)           : path for searching values.yaml
13                       [in case no path is provided then is will scan current directories for values.yml]
14 -r (Repository)     : name of image repository
15                       [format [repository name/url]:(port)]
16                       [in case no repository is provided then defualt image repository will be nexus3.onap.org:10001]
17 -u (User)           : user name for login
18                       [in case no user name is provided then default user will be docker]
19 -p (Password)       : password for login
20                       [in case no password is provided then default user will be docker]
21 EOF
22 }
23
24 #function to parse yaml file
25 #desc: this function convert yaml file to dotted notion
26 #argument: yaml file
27 #calling syntax: parse_yaml <yaml_file_name>
28
29 parse_yaml () {
30    local prefix=$2
31    local s='[[:space:]]*' w='[a-zA-Z0-9_]*' fs=$(echo @|tr @ '\034')
32    sed -ne "s|^\($s\):|\1|" \
33         -e "s|^\($s\)\($w\)$s:$s[\"']\(.*\)[\"']$s\$|\1$fs\2$fs\3|p" \
34         -e "s|^\($s\)\($w\)$s:$s\(.*\)$s\$|\1$fs\2$fs\3|p"  $1 |
35    awk -F$fs '{
36       indent = length($1)/2;
37       vname[indent] = $2;
38       for (i in vname) {if (i > indent) {delete vname[i]}}
39       if (length($3) > 0) {
40          vn=""; for (i=0; i<indent; i++) {vn=(vn)(vname[i])(".")}
41          printf("%s%s%s=\"%s\"\n", "'$prefix'",vn, $2, $3);
42       }
43    }'
44 }
45
46 #algorithmic steps
47 #start
48 #scan all values.yaml files
49 #parse yaml file into dotted format
50 #for each lines check there is image tag in line
51 #store image name and check next line for version information
52 #if in next line version is not present as a subtag then call docker pull with imageName
53 #if version is present in next line then call docker pull with imageName and imageVersion
54 #end
55
56
57 #start processing for finding images and version
58 IMAGE_TEXT="image"
59 IMAGE_VERSION_TEXT="Version"
60 LOCATION="."
61 VALUES_FILE_NAME="values.yaml"
62 IMAGE_REPOSITORY="nexus3.onap.org:10001"
63 USER_NAME="docker"
64 PASSWORD="docker"
65
66 #scan for options menu
67 while getopts ":h:l:r:u:p:" PARAM; do
68   case $PARAM in
69     h)
70       options
71       exit 1
72       ;;
73     l)
74       LOCATION=${OPTARG}
75       ;;
76     r)
77       IMAGE_REPOSITORY=${OPTARG}
78       ;;
79     u)
80       USER_NAME=${OPTARG}
81       ;;
82     p)
83       PASSWORD=${OPTARG}
84       ;;
85     ?)
86       options
87       exit
88       ;;
89   esac
90 done
91
92
93 #docker login to nexus repo
94 echo docker login -u $USER_NAME -p $PASSWORD $IMAGE_REPOSITORY
95 docker login -u $USER_NAME -p $PASSWORD $IMAGE_REPOSITORY
96
97 #scan all values.yaml files recursively
98 for filename in `find $LOCATION -name $VALUES_FILE_NAME`
99 do
100         imageNameWithVersion=" ";
101         #parse yaml files
102         for line in  `parse_yaml $filename`
103         do
104                 #skiping commented line
105                 if echo "$line" | grep -v '^#' >/dev/null; then
106                         #find all image subtag inside converted values.yaml file's lines
107                         if echo $line | grep -q $IMAGE_TEXT ; then
108                                 #find imageName inside line
109                                 imageName=`echo $line | awk -F "=" '{print $2}'`
110                                 #remove attional prefix and postfix
111                                 imageNameFinal=`echo "$imageName" | sed -e 's/^"//' -e 's/"$//' `
112
113                                 #check if line contain Version as a subtag in lines if yes then call docker pull with version
114                                 if echo $line | grep -q $IMAGE_VERSION_TEXT ; then
115                                         echo docker pull "$imageNameWithVersion":"$imageNameFinal"
116                                         docker pull $imageNameWithVersion:$imageNameFinal &
117                                         imageNameWithVersion=" "
118                                 else
119                                         #check Version is not in subtag and old scanned value is present then call docker pull without version
120                                         if [ "$imageNameWithVersion" != " " ]; then
121                                                 echo docker pull "$imageNameWithVersion"
122                                                 docker pull $imageNameWithVersion &
123                                                 imageNameWithVersion=$imageNameFinal
124                                         else
125                                                 imageNameWithVersion=$imageNameFinal
126                                         fi
127                                 fi
128                         fi
129                 fi
130         done
131 done
132 # complete processing
133 echo "finished launching pulls"
134 #MAX_WAIT_INTERVALS=300
135 INTERVAL_COUNT=300
136 while [  $(ps -ef | grep docker | grep pull | grep -v $0 | wc -l) -gt 0 ]; do
137   sleep 10
138   INTERVAL_COUNT=$((INTERVAL_COUNT - 1))
139   echo "waiting for last pull"
140   if [ "$INTERVAL_COUNT" -eq 0 ]; then
141     break
142   fi
143 done
144