Install option for lightweight build of OSM
[osm/devops.git] / installers / install_osm.sh
index 7416dab..a523796 100755 (executable)
@@ -31,6 +31,7 @@ function usage(){
     echo -e "     --lxdimages:    download lxd images from OSM repository instead of creating them from scratch"
     echo -e "     -l <lxd_repo>:  use specified repository url for lxd images"
     echo -e "     -p <path>:      use specified repository path for lxd images"
+    echo -e "     --lightweight:  install lightweight build of OSM"
     echo -e "     --vimemu:       additionally fetch, build, and deploy the VIM emulator as a docker container"
     echo -e "     --develop:      (deprecated, use '-b master') install OSM from source code using the master branch"
 #    echo -e "     --reconfigure:  reconfigure the modules (DO NOT change NAT rules)"
@@ -39,6 +40,7 @@ function usage(){
 #    echo -e "     --update:       update to the latest stable release or to the latest commit if using a specific branch"
     echo -e "     --showopts:     print chosen options and exit (only for debugging)"
     echo -e "     -y:             do not prompt for confirmation, assumes yes"
+    echo -e "     -D <devops path> use local devops installation path"
     echo -e "     -h / --help:    print this help"
 }
 
@@ -257,12 +259,8 @@ function configure_RO(){
     ro_is_up
 
     lxc exec RO -- openmano tenant-delete -f osm >/dev/null
-<<<<<<< HEAD
     lxc exec RO -- openmano tenant-create osm > /dev/null
-    lxc exec RO -- sed -i '/export OPENMANO_TENANT=osm/d' .bashrc 
-=======
     lxc exec RO -- sed -i '/export OPENMANO_TENANT=osm/d' .bashrc
->>>>>>> MON Installation Changes Updated.
     lxc exec RO -- sed -i '$ i export OPENMANO_TENANT=osm' .bashrc
     lxc exec RO -- sh -c 'echo "export OPENMANO_TENANT=osm" >> .bashrc'
 }
@@ -484,6 +482,73 @@ function install_docker_ce() {
     echo "... restarted Docker service"
 }
 
+function install_juju() {
+    echo "Installing juju"
+    sudo snap install juju --classic
+    sudo dpkg-reconfigure -p medium lxd
+    juju bootstrap localhost osm
+    echo "Finished installation of juju"
+}
+
+function generate_docker_images() {
+    echo "Pulling and generating docker images"
+    newgrp docker << EONG
+    docker pull wurstmeister/kafka
+    docker pull wurstmeister/zookeeper
+    docker pull mongo
+    docker pull mysql
+    git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/MON
+    docker build ${LWTEMPDIR}/MON -f ${LWTEMPDIR}/MON/docker/Dockerfile -t osm/mon || ! echo "cannot build MON docker image" >&2
+    docker build ${LWTEMPDIR}/MON/policy_module -f ${LWTEMPDIR}/MON/policy_module/Dockerfile -t osm/pm || ! echo "cannot build PM docker image" >&2
+    git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/NBI
+    docker build ${LWTEMPDIR}/NBI -t osm/nbi || ! echo "cannot build NBI docker image" >&2
+    git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/RO
+    docker build ${LWTEMPDIR}/RO -f ${LWTEMPDIR}/RO/docker/Dockerfile-local -t osm/ro || ! echo "cannot build RO docker image" >&2
+    docker build ${LWTEMPDIR}/RO/lcm -t osm/lcm || ! echo "cannot build LCM docker image" >&2
+    git -C ${LWTEMPDIR} clone https://github.com/superfluidity/osm-light-ui.git
+    docker build ${LWTEMPDIR}/osm-light-ui -t osm/light-ui -f ${LWTEMPDIR}/osm-light-ui/code/docker/Dockerfile
+EONG
+    echo "Finished generation of docker images"
+}
+
+function deploy_lightweight() {
+    echo "Deploying lightweight build"
+    newgrp docker << EONG
+    docker swarm init
+    docker network create --driver=overlay --attachable netOSM
+    docker stack deploy -c $OSM_DEVOPS/installers/docker/docker-compose.yaml osm
+EONG
+    echo "Finished deployment of lightweight build"
+}
+
+function install_osmclient_sol005() {
+    sudo apt-get update
+    sudo apt-get install -y python-pip libcurl4-gnutls-dev libgnutls-dev
+    git -C ${LWTEMPDIR} clone https://osm.etsi.org/gerrit/osm/osmclient
+    sudo -H pip install -U pip
+    sudo -H pip install -U setuptools
+    pushd ${LWTEMPDIR}/osmclient
+    sudo -H python setup.py install
+    popd
+    export OSM_HOSTNAME=localhost
+    export OSM_SOL005=True
+    echo 'export OSM_HOSTNAME=localhost' >> ${HOME}/.bashrc
+    echo 'export OSM_SOL005=True' >> ${HOME}/.bashrc
+}
+
+function install_lightweight() {
+    echo "Installing lightweight build of OSM"
+    LWTEMPDIR="$(mktemp -d -q --tmpdir "installosmlight.XXXXXX")"
+    trap 'rm -rf "$LWTEMPDIR"' EXIT
+    install_juju
+    install_docker_ce
+    generate_docker_images
+    deploy_lightweight
+    #install_osmclient
+    #For the moment, the osmclient is installed from the repo
+    install_osmclient_sol005
+}
+
 function install_vimemu() {
     # install Docker
     install_docker_ce
@@ -522,6 +587,7 @@ function dump_vars(){
     echo "INSTALL_FROM_LXDIMAGES=$INSTALL_FROM_LXDIMAGES"
     echo "LXD_REPOSITORY_BASE=$LXD_REPOSITORY_BASE"
     echo "LXD_REPOSITORY_PATH=$LXD_REPOSITORY_PATH"
+    echo "INSTALL_LIGHTWEIGHT=$INSTALL_LIGHTWEIGHT"
     echo "RELEASE=$RELEASE"
     echo "REPOSITORY=$REPOSITORY"
     echo "REPOSITORY_BASE=$REPOSITORY_BASE"
@@ -560,11 +626,13 @@ INSTALL_VIMEMU=""
 INSTALL_FROM_LXDIMAGES=""
 LXD_REPOSITORY_BASE="https://osm-download.etsi.org/repository/osm/lxd"
 LXD_REPOSITORY_PATH=""
+INSTALL_LIGHTWEIGHT=""
 NOCONFIGURE=""
 RELEASE_DAILY=""
 SESSION_ID=`date +%s`
+OSM_DEVOPS=
 
-while getopts ":hy-:b:r:k:u:R:l:p:" o; do
+while getopts ":hy-:b:r:k:u:R:l:p:D:" o; do
     case "${o}" in
         h)
             usage && exit 0
@@ -590,6 +658,9 @@ while getopts ":hy-:b:r:k:u:R:l:p:" o; do
         p)
             LXD_REPOSITORY_PATH="${OPTARG}"
             ;;
+        D)
+            OSM_DEVOPS="${OPTARG}"
+            ;;
         -)
             [ "${OPTARG}" == "help" ] && usage && exit 0
             [ "${OPTARG}" == "source" ] && INSTALL_FROM_SOURCE="y" && continue
@@ -601,6 +672,7 @@ while getopts ":hy-:b:r:k:u:R:l:p:" o; do
             [ "${OPTARG}" == "test" ] && TEST_INSTALLER="y" && continue
             [ "${OPTARG}" == "lxdinstall" ] && INSTALL_LXD="y" && continue
             [ "${OPTARG}" == "lxdimages" ] && INSTALL_FROM_LXDIMAGES="y" && continue
+            [ "${OPTARG}" == "lightweight" ] && INSTALL_LIGHTWEIGHT="y" && continue
             [ "${OPTARG}" == "vimemu" ] && INSTALL_VIMEMU="y" && continue
             [ "${OPTARG}" == "noconfigure" ] && NOCONFIGURE="y" && continue
             [ "${OPTARG}" == "showopts" ] && SHOWOPTS="y" && continue
@@ -634,45 +706,51 @@ fi
 # forcing source from master removed. Now only install from source when explicit
 # [ -n "$COMMIT_ID" ] && [ "$COMMIT_ID" == "master" ] && INSTALL_FROM_SOURCE="y"
 
-if [ -n "$TEST_INSTALLER" ]; then
-    echo -e "\nUsing local devops repo for OSM installation"
-    TEMPDIR="$(dirname $(realpath $(dirname $0)))"
-else
-    echo -e "\nCreating temporary dir for OSM installation"
-    TEMPDIR="$(mktemp -d -q --tmpdir "installosm.XXXXXX")"
-    trap 'rm -rf "$TEMPDIR"' EXIT
+if [ -z "$OSM_DEVOPS" ]; then
+    if [ -n "$TEST_INSTALLER" ]; then
+        echo -e "\nUsing local devops repo for OSM installation"
+        TEMPDIR="$(dirname $(realpath $(dirname $0)))"
+    else
+        echo -e "\nCreating temporary dir for OSM installation"
+        TEMPDIR="$(mktemp -d -q --tmpdir "installosm.XXXXXX")"
+        trap 'rm -rf "$TEMPDIR"' EXIT
+    fi
 fi
 
-need_packages="git jq"
-for package in $need_packages; do
-    echo -e "Checking required packages: $package"
-    dpkg -l $package &>/dev/null \
-        || ! echo -e "     $package not installed.\nInstalling $package requires root privileges" \
-        || sudo apt-get install -y $package \
-        || FATAL "failed to install $package"
-done
-
-if [ -z "$TEST_INSTALLER" ]; then
-    echo -e "\nCloning devops repo temporarily"
-    git clone https://osm.etsi.org/gerrit/osm/devops.git $TEMPDIR
-    RC_CLONE=$?
-fi
+need_packages="git jq wget curl tar"
+echo -e "Checking required packages: $need_packages"
+dpkg -l $need_packages &>/dev/null \
+  || ! echo -e "One or several required packages are not installed. Updating apt cache requires root privileges." \
+  || sudo apt-get update \
+  || FATAL "failed to run apt-get update"
+dpkg -l $need_packages &>/dev/null \
+  || ! echo -e "Installing $need_packages requires root privileges." \
+  || sudo apt-get install -y $need_packages \
+  || FATAL "failed to install $need_packages"
+
+if [ -z "$OSM_DEVOPS" ]; then
+    if [ -z "$TEST_INSTALLER" ]; then
+        echo -e "\nCloning devops repo temporarily"
+        git clone https://osm.etsi.org/gerrit/osm/devops.git $TEMPDIR
+        RC_CLONE=$?
+    fi
 
-echo -e "\nGuessing the current stable release"
-LATEST_STABLE_DEVOPS=`git -C $TEMPDIR tag -l v[0-9].* | sort -V | tail -n1`
-[ -z "$COMMIT_ID" ] && [ -z "$LATEST_STABLE_DEVOPS" ] && echo "Could not find the current latest stable release" && exit 0
-echo "Latest tag in devops repo: $LATEST_STABLE_DEVOPS"
-[ -z "$COMMIT_ID" ] && [ -n "$LATEST_STABLE_DEVOPS" ] && COMMIT_ID="tags/$LATEST_STABLE_DEVOPS"
-
-if [ -n "$RELEASE_DAILY" ]; then
-    echo "Using master/HEAD devops"
-    git -C $TEMPDIR checkout master
-elif [ -z "$TEST_INSTALLER" ]; then
-    git -C $TEMPDIR checkout tags/$LATEST_STABLE_DEVOPS
+    echo -e "\nGuessing the current stable release"
+    LATEST_STABLE_DEVOPS=`git -C $TEMPDIR tag -l v[0-9].* | sort -V | tail -n1`
+    [ -z "$COMMIT_ID" ] && [ -z "$LATEST_STABLE_DEVOPS" ] && echo "Could not find the current latest stable release" && exit 0
+    echo "Latest tag in devops repo: $LATEST_STABLE_DEVOPS"
+    [ -z "$COMMIT_ID" ] && [ -n "$LATEST_STABLE_DEVOPS" ] && COMMIT_ID="tags/$LATEST_STABLE_DEVOPS"
+
+    if [ -n "$RELEASE_DAILY" ]; then
+        echo "Using master/HEAD devops"
+        git -C $TEMPDIR checkout master
+    elif [ -z "$TEST_INSTALLER" ]; then
+        git -C $TEMPDIR checkout tags/$LATEST_STABLE_DEVOPS
+    fi
+    OSM_DEVOPS=$TEMPDIR
 fi
 
-OSM_DEVOPS=$TEMPDIR
-OSM_JENKINS="$TEMPDIR/jenkins"
+OSM_JENKINS="$OSM_DEVOPS/jenkins"
 . $OSM_JENKINS/common/all_funcs
 
 [ -n "$UNINSTALL" ] && uninstall && echo -e "\nDONE" && exit 0
@@ -681,19 +759,17 @@ OSM_JENKINS="$TEMPDIR/jenkins"
 [ -n "$RECONFIGURE" ] && configure && echo -e "\nDONE" && exit 0
 
 #Installation starts here
+[ -n "$INSTALL_LIGHTWEIGHT" ] && install_lightweight && echo -e "\nDONE" && exit 0
 echo -e "\nInstalling OSM from refspec: $COMMIT_ID"
 if [ -n "$INSTALL_FROM_SOURCE" ] && [ -z "$ASSUME_YES" ]; then
     ! ask_user "The installation will take about 75-90 minutes. Continue (Y/n)? " y && echo "Cancelled!" && exit 1
 fi
 
-echo -e "\nChecking required packages: wget, curl, tar"
-dpkg -l wget curl tar &>/dev/null || ! echo -e "    One or several packages are not installed.\nInstalling required packages\n     Root privileges are required" || sudo apt-get install -y wget curl tar
-
 echo -e "Checking required packages: lxd"
 lxd --version &>/dev/null || FATAL "lxd not present, exiting."
 [ -n "$INSTALL_LXD" ] && echo -e "\nInstalling and configuring lxd" && install_lxd
 
-wget -q -O- https://osm-download.etsi.org/ftp/osm-3.0-three/README.txt &> /dev/null
+wget -q -O- https://osm-download.etsi.org/ftp/osm-4.0-four/README.txt &> /dev/null
 track start
 
 # use local devops for containers
@@ -742,7 +818,7 @@ if [ -n "$INSTALL_VIMEMU" ]; then
     install_vimemu
 fi
 
-wget -q -O- https://osm-download.etsi.org/ftp/osm-3.0-three/README2.txt &> /dev/null
+wget -q -O- https://osm-download.etsi.org/ftp/osm-4.0-four/README2.txt &> /dev/null
 track end
 echo -e "\nDONE"