mayankg2703 | c3071cc | 2017-11-22 11:34:59 +0000 | [diff] [blame] | 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 | |
Guillaume Lambert | 785bc38 | 2021-03-09 21:41:30 +0100 | [diff] [blame] | 29 | parse_yaml () { |
mayankg2703 | c3071cc | 2017-11-22 11:34:59 +0000 | [diff] [blame] | 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 |
mayankg2703 | ce1912d | 2018-01-31 14:09:38 +0000 | [diff] [blame] | 104 | #skiping commented line |
Guillaume Lambert | 42f91fc | 2021-03-10 14:02:13 +0100 | [diff] [blame] | 105 | if echo "$line" | grep -v '^#' >/dev/null; then |
mayankg2703 | ce1912d | 2018-01-31 14:09:38 +0000 | [diff] [blame] | 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/"$//' ` |
mayankg2703 | c3071cc | 2017-11-22 11:34:59 +0000 | [diff] [blame] | 112 | |
mayankg2703 | ce1912d | 2018-01-31 14:09:38 +0000 | [diff] [blame] | 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=" " |
mayankg2703 | c3071cc | 2017-11-22 11:34:59 +0000 | [diff] [blame] | 118 | else |
mayankg2703 | ce1912d | 2018-01-31 14:09:38 +0000 | [diff] [blame] | 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 |
mayankg2703 | c3071cc | 2017-11-22 11:34:59 +0000 | [diff] [blame] | 127 | fi |
| 128 | fi |
mayankg2703 | c3071cc | 2017-11-22 11:34:59 +0000 | [diff] [blame] | 129 | fi |
mayankg2703 | c3071cc | 2017-11-22 11:34:59 +0000 | [diff] [blame] | 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 | |