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
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]
24 #function to parse yaml file
25 #desc: this function convert yaml file to dotted notion
27 #calling syntax: parse_yaml <yaml_file_name>
37 fs=$(echo @|tr @ '\034')
39 sed -ne "s|^\($s\):|\1|" \
40 -e "s|^\($s\)\($w\)$s:$s[\"']\(.*\)[\"']$s\$|\1$fs\2$fs\3|p" \
41 -e "s|^\($s\)\($w\)$s:$s\(.*\)$s\$|\1$fs\2$fs\3|p" $1 |
43 indent = length($1)/2;
45 for (i in vname) {if (i > indent) {delete vname[i]}}
47 vn=""; for (i=0; i<indent; i++) {vn=(vn)(vname[i])(".")}
48 printf("%s%s%s=\"%s\"\n", "'$prefix'",vn, $2, $3);
55 #scan all values.yaml files
56 #parse yaml file into dotted format
57 #for each lines check there is image tag in line
58 #store image name and check next line for version information
59 #if in next line version is not present as a subtag then call docker pull with imageName
60 #if version is present in next line then call docker pull with imageName and imageVersion
64 #start processing for finding images and version
66 IMAGE_VERSION_TEXT="Version"
68 VALUES_FILE_NAME="values.yaml"
69 IMAGE_REPOSITORY="nexus3.onap.org:10001"
73 #scan for options menu
74 while getopts ":h:l:r:u:p:" PARAM; do
84 IMAGE_REPOSITORY=${OPTARG}
100 #docker login to nexus repo
101 echo docker login -u $USER_NAME -p $PASSWORD $IMAGE_REPOSITORY
102 docker login -u $USER_NAME -p $PASSWORD $IMAGE_REPOSITORY
104 #scan all values.yaml files recursively
105 for filename in `find $LOCATION -name $VALUES_FILE_NAME`
107 imageNameWithVersion=" ";
109 for line in `parse_yaml $filename`
111 #skiping commented line
112 if echo "$line" | grep -v '^#' >/dev/null; then
113 #find all image subtag inside converted values.yaml file's lines
114 if echo $line | grep -q $IMAGE_TEXT ; then
115 #find imageName inside line
116 imageName=`echo $line | awk -F "=" '{print $2}'`
117 #remove attional prefix and postfix
118 imageNameFinal=`echo "$imageName" | sed -e 's/^"//' -e 's/"$//' `
120 #check if line contain Version as a subtag in lines if yes then call docker pull with version
121 if echo $line | grep -q $IMAGE_VERSION_TEXT ; then
122 echo docker pull "$imageNameWithVersion":"$imageNameFinal"
123 docker pull $imageNameWithVersion:$imageNameFinal &
124 imageNameWithVersion=" "
126 #check Version is not in subtag and old scanned value is present then call docker pull without version
127 if [ "$imageNameWithVersion" != " " ]; then
128 echo docker pull "$imageNameWithVersion"
129 docker pull $imageNameWithVersion &
130 imageNameWithVersion=$imageNameFinal
132 imageNameWithVersion=$imageNameFinal
139 # complete processing
140 echo "finished launching pulls"
141 #MAX_WAIT_INTERVALS=300
143 while [ $(ps -ef | grep docker | grep pull | grep -v $0 | wc -l) -gt 0 ]; do
145 INTERVAL_COUNT=$((INTERVAL_COUNT - 1))
146 echo "waiting for last pull"
147 if [ "$INTERVAL_COUNT" -eq 0 ]; then