Remove specific installation of some pip packages during install_osmclient
[osm/devops.git] / tools / local-build.sh
index f471e03..829649d 100755 (executable)
 # limitations under the License.
 #######################################################################################
 
+APT_PROXY=""
 DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
-HTTPDDIR="$( cd "${HOME}/snap/qhttp/common" &> /dev/null && pwd )"
-HTTPPORT=11480
+HTTPDDIR="${HOME}/.osm/httpd"
+HTTPPORT=8000
 KUBECFG="~/.osm/microk8s-config.yaml"
 NO_CACHE=""
 OPENSTACKRC="/var/snap/microstack/common/etc/microstack.rc"
@@ -30,11 +31,13 @@ function check_arguments(){
     while [ $# -gt 0 ] ; do
         case $1 in
             --debug) set -x ;;
+            --apt-proxy) APT_PROXY="$2" && shift ;;
             --help | -h) show_help && exit 0 ;;
-            --httpddir) HTTPDIR="$2" && shift;;
+            --httpddir) HTTPDDIR="$2" && shift;;
             --install-local-registry) 'install_local_registry' ;;
             --install-microstack) 'install_microstack' ;;
             --install-qhttpd) INSTALL_HTTPD='install_qhttpd' ;;
+            --run-httpserver) INSTALL_HTTPD='run_httpserver' ;;
             --kubecfg) KUBECFG="$2" && shift ;;
             --module) TARGET_MODULE="$2" && shift;;
             --no-cache) NO_CACHE="--no-cache" ;;
@@ -67,10 +70,12 @@ same process as Jenkins.
 
 OPTIONS:
   --help                        display this help message
+  --apt-proxy                   provide an apt proxy to docker build steps
   --debug                       enable set -x for this script
-  --install-local-registry     install and enable Microk8s local registry on port 32000
+  --install-local-registry      install and enable Microk8s local registry on port 32000
   --install-microstack          install Microstack and configure to run robot tests
-  --install-qhttpd              install QHTTPD as an HTTP server on port ${HTTPPORT}
+  --install-qhttpd              (deprecated, use --run-httpserver instead) install QHTTPD as an HTTP server on port ${HTTPPORT}
+  --run-httpserver              run HTTP server on port ${HTTPPORT}
   --kubecfg                     path to kubecfg.yaml (uses Charmed OSM by default)
   --no-cache                    do not use any cache when building docker images
   --module                      only build this comma delimited list of modules
@@ -85,6 +90,34 @@ OPTIONS:
   install-osm                   perform full installation of Charmed OSM from registry
   start-robot                   start the Robot test container and leave you at prompt
   update-install                update Charmed OSM with new module container
+
+A typical use could be the following:
+
+Let's assume that we have different repos cloned in the folder workspace:
+
+  cd workspace
+  git clone https://osm.etsi.org/gerrit/osm/devops
+  git clone https://osm.etsi.org/gerrit/osm/NBI
+  git clone https://osm.etsi.org/gerrit/osm/LCM
+  git clone "https://osm.etsi.org/gerrit/osm/RO
+  git clone "https://osm.etsi.org/gerrit/osm/common
+  git clone "https://osm.etsi.org/gerrit/osm/IM
+  git clone "https://osm.etsi.org/gerrit/osm/N2VC
+
+First we run a light HTTP server to serve the artifacts:
+
+  devops/tools/local-build.sh --run-httpserver
+
+Then we generate the artifacts (debian packages) for the different repos: common, IM, N2VC, RO, LCM, NBI
+
+  devops/tools/local-build.sh --module common,IM,N2VC,RO,LCM,NBI stage-2
+
+Then new docker images are generated locally with the tag "devel" (e.g.: opensourcemano/lcm:devel):
+
+  devops/tools/local-build.sh --module RO,LCM,NBI stage-3
+
+Finally, the deployment of OSM will have to be updated to use the new docker images.
+
 EOF
 }
 
@@ -135,18 +168,30 @@ function install_microstack() {
          --disk-format=qcow2 ubuntu20.04
 }
 
+function create_httpddir() {
+    mkdir -p ${HTTPDDIR}
+}
+
 function install_qhttpd() {
     sudo snap install qhttp
-    EXISTING_PID=$(ps auxw | grep "http.server 11480" | grep -v grep | awk '{print $2}')
+    EXISTING_PID=$(ps auxw | grep "http.server $HTTPPORT" | grep -v grep | awk '{print $2}')
     if [ ! -z $EXISTING_PID ] ; then
         kill $EXISTING_PID
     fi
     qhttp -p ${HTTPPORT} &
 }
 
+function run_httpserver() {
+    EXISTING_PID=$(ps auxw | grep "http.server $HTTPPORT" | grep -v grep | awk '{print $2}')
+    if [ ! -z $EXISTING_PID ] ; then
+        kill $EXISTING_PID
+    fi
+    nohup python3 -m http.server ${HTTPPORT} --directory "${HTTPDDIR}" &>/dev/null &
+}
+
 function stage_2() {
     print_section "Performing Stage 2"
-    MODULES="common devops IM LCM MON N2VC NBI NG-UI osmclient PLA POL RO tests"
+    MODULES="common devops IM LCM MON N2VC NBI NG-UI NG-SA osmclient PLA POL RO tests"
     if [ ! -z ${1} ] ; then
         POSSIBLE_MODULES=$(echo ${1} | sed "s/,/ /g")
         for MODULE in ${POSSIBLE_MODULES}; do
@@ -171,7 +216,12 @@ function stage_2() {
         print_section "Building ${MODULE}"
         cd ${MODULE}
         find . -name '*.deb' -exec rm -v {} \;
-        docker build ${NO_CACHE} -t ${MODULE,,}-stage2 .
+
+        BUILD_ARGS=""
+        if [ ! -z $APT_PROXY ] ; then
+            BUILD_ARGS="${BUILD_ARGS}--build-arg APT_PROXY=${APT_PROXY} "
+        fi
+        docker build ${NO_CACHE} ${BUILD_ARGS} -t ${MODULE,,}-stage2 .
 
         STAGES="stage-build.sh"
         if [ ! -z $TESTS ] ; then
@@ -217,8 +267,18 @@ function stage_3() {
     print_section "Performing Stage 3"
     MODULES=$(_find_module_dockerfile $1)
     BUILD_ARGS=""
+    if [ ! -z $APT_PROXY ] ; then
+        BUILD_ARGS="${BUILD_ARGS}--build-arg APT_PROXY=${APT_PROXY} "
+    fi
+
     HOSTIP=$(ip -4 addr show docker0 | grep -Po 'inet \K[\d.]+')
-    for file in ~/snap/qhttp/common/*.deb ; do
+    [ -z "$DEFAULT_IF" ] && DEFAULT_IF=$(ip route list|awk '$1=="default" {print $5; exit}')
+    [ -z "$DEFAULT_IF" ] && DEFAULT_IF=$(route -n |awk '$1~/^0.0.0.0/ {print $8; exit}')
+    DEFAULT_IP=$(ip -o -4 a s ${DEFAULT_IF} |awk '{split($4,a,"/"); print a[1]; exit}')
+    HOSTIP=${HOSTIP:=${DEFAULT_IP}}
+    echo $HOSTIP
+
+    for file in ${HTTPDDIR}/*.deb ; do
         file=`basename ${file}`
         name=`echo ${file} | cut -d_ -f1 | sed "s/-/_/g"`;
         name=${name^^}_URL
@@ -359,7 +419,8 @@ EOF
         -v "$(pwd)/robot.etc.hosts":/etc/hosts \
         -v ~/.osm/microk8s-config.yaml:/root/.kube/config \
         -v "$(pwd)/clouds.yaml":/etc/openstack/clouds.yaml \
-        -v "$(pwd)/reports:"/robot-systest/reports \
+        -v "${HOME}/snap/qhttp/common"/robot-systest/reports \
+        -v "${HOME}/snap/qhttp/common:"/robot-systest/conformance-tests/reports \
         -v "${ROOTDIR}/tests/robot-systest/lib":${LOCAL_MOUNT_1} \
         -v "${ROOTDIR}/tests/robot-systest/resources":${LOCAL_MOUNT_2} \
         -v "${ROOTDIR}/tests/robot-systest/testsuite":${LOCAL_MOUNT_3} \
@@ -389,6 +450,7 @@ if [ "$0" != "$BASH_SOURCE" ]; then
 else
     check_arguments $@
 
+    create_httpddir
     eval "${INSTALL_HTTPD}"
     eval "${INSTALL_LOCAL_REGISTRY}"
     eval "${INSTALL_MICROSTACK}"