create base package 'osm_ro_plugin' for plugin
[osm/RO.git] / test-docker / test-gen-devops.sh
index 3d04c1f..a869031 100755 (executable)
 # contact with: nfvlabs@tid.es
 ##
 
-# Generates the debian packages; and then generates a docker image base on Dockerfile-devops and update a
-# running docker stack with the generated image
+[[ "$*" == *--help* ]] && echo \
+"This script tests docker build based on debian packages. It generates a docker image bases on Dockerfile-devops, " \
+"prints package information and if desired updates OSM RO docker with the generated image.
+Generated packages are stored at './temp' folder.
+Options:
+  --help        show this help
+  --no-cache    Use if found problems looking for packages
+  --update      Use to update OSM, RO docker with this image" && exit 0
+
+[[ "$*" == *--no-cache* ]] && no_cache="--no_cache" || no_cache=""
+[[ "$*" == *--update* ]] && update_osm="k8s" || update_osm=""
 
 HERE=$(dirname $(readlink -f ${BASH_SOURCE[0]}))
 export RO_BASE=$(dirname $HERE)
@@ -29,11 +38,11 @@ rm -rf $HERE/temp/*
 find $RO_BASE  -name "*.pyc" -exec rm {} ";"
 mkdir -p $HERE/temp
 
-echo -e "\n\n[STAGE 1] Builind dockerfile userd for the package generation"
+echo -e "\n\n[STAGE 1] Building dockerfile used for the package generation"
 docker build $RO_BASE -f $RO_BASE/Dockerfile  -t opensourcemano/ro_pkg
 sleep 2
 
-echo "[STAGE 1.1] Generting packages inside docker ro_pkg"
+echo "[STAGE 1.1] Generating packages inside docker ro_pkg"
 docker run -d --name ro_pkg opensourcemano/ro_pkg bash -c 'sleep 3600'
 docker cp $RO_BASE ro_pkg:/RO
 docker exec ro_pkg bash -c 'cd /RO;  ./devops-stages/stage-build.sh'
@@ -44,23 +53,33 @@ echo $deb_files
 echo -e "\n\n[STAGE 1.2] Print package information and copy to '$HERE/temp/'"
 # print package information and copy to "$HERE/temp/"
 for deb_file in $deb_files ; do
-   echo; echo; echo
-   echo $deb_file info:
-   echo "===========================" 
-   docker cp ro_pkg:/RO/deb_dist/$deb_file $HERE/temp/
-   dpkg -I $HERE/temp/$(basename $deb_file)
+    echo; echo; echo
+    echo $deb_file info:
+    echo "==========================="
+    docker cp ro_pkg:/RO/deb_dist/$deb_file $HERE/temp/
+    dpkg -I $HERE/temp/$(basename $deb_file)
 done
 
 # docker rm -f ro_pkg
 echo -e "\n\n[STAGE 2] Building docker image opensourcemano/ro:py3_devops based on debian packages"
-docker build $HERE -f $HERE/Dockerfile-devops  -t opensourcemano/ro:py3_devops ||
+docker build $HERE -f $HERE/Dockerfile-devops  -t opensourcemano/ro:py3_devops $no_cache ||
     ! echo "error generating devops dockerfile" >&2 || exit 1
+
+[[ -z "$update_osm" ]] && exit 0
 sleep 2
-# docker run -d --name ro_devops opensourcemano/ro:py3_devops
-# docker run -ti exec ro_devops ro tenant-list  || ! echo "Cannot exec ro client to get server tenants" >&2 || exit 1
 
 echo -e "\n\n[STAGE 3] Update service osm_ro with generated docker image"
-docker service update osm_ro --force --image opensourcemano/ro:py3_devops
-sleep 2
-docker container prune -f
+# try docker swarm. If fails try kebernetes
+if docker service update osm_ro --force --image opensourcemano/ro:py3_devops 2>/dev/null
+then
+    sleep 2
+    docker container prune -f
+elif kubectl -n osm patch deployment ro --patch \
+        '{"spec": {"template": {"spec": {"containers": [{"name": "ro", "image": "opensourcemano/ro:py3_devops"}]}}}}'
+then
+    kubectl -n osm scale deployment ro --replicas=0
+    kubectl -n osm scale deployment ro --replicas=1
+else
+    echo "Cannot update OSM" && exit 1
+fi
 docker service logs osm_ro