blob: 590d651f8736d80c62d6eedab852e2d5fb87c44a [file] [log] [blame]
#!/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>
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
#skiping commented line
if [ "${line:0:1}" != '#' ]; then
#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
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