Install pip requirements as user
[osm/devops.git] / installers / full_install_osm.sh
index f19b299..11723fe 100755 (executable)
@@ -54,6 +54,7 @@ function usage(){
     echo -e "     -d <docker registry URL> use docker registry URL instead of dockerhub"
     echo -e "     -p <docker proxy URL> set docker proxy URL as part of docker CE configuration"
     echo -e "     -T <docker tag> specify docker tag for the modules specified with option -m"
+    echo -e "     --nocachelxdimages:  do not cache local lxd images, do not create cronjob for that cache (will save installation time, might affect instantiation time)"
     echo -e "     --nolxd:        do not install and configure LXD, allowing unattended installations (assumes LXD is already installed and confifured)"
     echo -e "     --nodocker:     do not install docker, do not initialize a swarm (assumes docker is already installed and a swarm has been initialized)"
     echo -e "     --nojuju:       do not juju, assumes already installed"
@@ -137,7 +138,7 @@ function remove_iptables() {
 
     if [ -z "$DEFAULT_IP" ]; then
         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}')
+        [ -z "$DEFAULT_IF" ] && DEFAULT_IF=$(ip route list|awk '$1=="default" {print $5; exit}')
         [ -z "$DEFAULT_IF" ] && FATAL "Not possible to determine the interface with the default route 0.0.0.0"
         DEFAULT_IP=`ip -o -4 a |grep ${DEFAULT_IF}|awk '{split($4,a,"/"); print a[1]}'`
         [ -z "$DEFAULT_IP" ] && FATAL "Not possible to determine the IP address of the interface with the default route"
@@ -220,7 +221,7 @@ function uninstall_lightweight() {
             remove_stack osm_elk
         fi
         echo "Now osm docker images and volumes will be deleted"
-       # TODO: clean-up of images should take into account if other tags were used for specific modules
+        # TODO: clean-up of images should take into account if other tags were used for specific modules
         newgrp docker << EONG
 for module in ro lcm keystone nbi mon pol pla osmclient; do
     docker image rm ${DOCKER_REGISTRY_URL}${DOCKER_USER}/${module}:${OSM_DOCKER_TAG}
@@ -339,6 +340,13 @@ function install_osmclient(){
     sudo -H LC_ALL=C python3 -m pip install -U pip
     sudo -H LC_ALL=C python3 -m pip install -U python-magic pyangbind verboselogs
     sudo apt-get install -y python3-osm-im python3-osmclient
+    if [ -f /usr/lib/python3/dist-packages/osm_im/requirements.txt ]; then
+        python3 -m pip install -r /usr/lib/python3/dist-packages/osm_im/requirements.txt
+    fi
+    if [ -f /usr/lib/python3/dist-packages/osmclient/requirements.txt ]; then
+        sudo apt-get install -y libcurl4-openssl-dev libssl-dev
+        python3 -m pip install -r /usr/lib/python3/dist-packages/osmclient/requirements.txt
+    fi
     #sed 's,OSM_SOL005=[^$]*,OSM_SOL005=True,' -i ${HOME}/.bashrc
     #echo 'export OSM_HOSTNAME=localhost' >> ${HOME}/.bashrc
     #echo 'export OSM_SOL005=True' >> ${HOME}/.bashrc
@@ -444,7 +452,7 @@ function install_juju() {
     echo "Installing juju"
     sudo snap install juju --classic --channel=2.8/stable
     [[ ":$PATH": != *":/snap/bin:"* ]] && PATH="/snap/bin:${PATH}"
-    update_juju_images
+    [ -n "$INSTALL_NOCACHELXDIMAGES" ] || update_juju_images
     echo "Finished installation of juju"
     return 0
 }
@@ -578,11 +586,11 @@ function generate_docker_images() {
             if [ $module == "PLA" -a ! -n "$INSTALL_PLA" ]; then
                 continue
             fi
-           module_tag="${OSM_DOCKER_TAG}"
+            module_tag="${OSM_DOCKER_TAG}"
             if [ -n "${MODULE_DOCKER_TAG}" ] && echo $TO_REBUILD | grep -q $module ; then
                 module_tag="${MODULE_DOCKER_TAG}"
             fi
-           echo "Pulling ${DOCKER_REGISTRY_URL}${DOCKER_USER}/${module_lower}:${module_tag} docker image"
+            echo "Pulling ${DOCKER_REGISTRY_URL}${DOCKER_USER}/${module_lower}:${module_tag} docker image"
             sg docker -c "docker pull ${DOCKER_REGISTRY_URL}${DOCKER_USER}/${module_lower}:${module_tag}" || FATAL "cannot pull $module docker image"
         done
     else
@@ -844,6 +852,7 @@ function install_kube() {
 #initializes kubernetes control plane
 function init_kubeadm() {
     sudo swapoff -a
+    sudo sed -i.bak '/.*none.*swap/s/^\(.*\)$/#\1/g' /etc/fstab
     sudo kubeadm init --config $1
     sleep 5
 }
@@ -856,9 +865,13 @@ function kube_config_dir() {
 }
 
 function install_k8s_storageclass() {
-    kubectl apply -f https://openebs.github.io/charts/openebs-operator-1.6.0.yaml
-    local storageclass_timeout=300
+    OPENEBS_DIR="$(mktemp -d -q --tmpdir "openebs.XXXXXX")"
+    trap 'rm -rf "${OPENEBS_DIR}"' EXIT
+    wget -q https://openebs.github.io/charts/openebs-operator-1.6.0.yaml -P $OPENEBS_DIR
+    kubectl apply -f $OPENEBS_DIR
+    local storageclass_timeout=400
     local counter=0
+    local storageclass_ready=""
     echo "Waiting for storageclass"
     while (( counter < storageclass_timeout ))
     do
@@ -866,12 +879,14 @@ function install_k8s_storageclass() {
 
         if [ $? -eq 0 ] ; then
             echo "Storageclass available"
+            storageclass_ready="y"
             break
         else
             counter=$((counter + 15))
             sleep 15
         fi
     done
+    [ -n "$storageclass_ready" ] || FATAL "Storageclass not ready after $storageclass_timeout seconds. Cannot install openebs"
     kubectl patch storageclass openebs-hostpath -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
 }
 
@@ -1199,7 +1214,7 @@ function install_lightweight() {
     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}')
     [ -z "$DEFAULT_IF" ] && FATAL "Not possible to determine the interface with the default route 0.0.0.0"
-    DEFAULT_IP=`ip -o -4 a |grep ${DEFAULT_IF} |awk '{split($4,a,"/"); print a[1]}'`
+    DEFAULT_IP=`ip -o -4 a s ${DEFAULT_IF} |awk '{split($4,a,"/"); print a[1]}'`
     [ -z "$DEFAULT_IP" ] && FATAL "Not possible to determine the IP address of the interface with the default route"
     DEFAULT_MTU=$(ip addr show ${DEFAULT_IF} | perl -ne 'if (/mtu\s(\d+)/) {print $1;}')
 
@@ -1526,6 +1541,7 @@ function dump_vars(){
     echo "INSTALL_LIGHTWEIGHT=$INSTALL_LIGHTWEIGHT"
     echo "INSTALL_ONLY=$INSTALL_ONLY"
     echo "INSTALL_ELK=$INSTALL_ELK"
+    echo "INSTALL_NOCACHELXDIMAGES=$INSTALL_NOCACHELXDIMAGES"
     #echo "INSTALL_PERFMON=$INSTALL_PERFMON"
     echo "INSTALL_TO_OPENSTACK=$INSTALL_TO_OPENSTACK"
     echo "OPENSTACK_PUBLIC_NET_NAME=$OPENSTACK_PUBLIC_NET_NAME"
@@ -1619,6 +1635,7 @@ KUBERNETES="y"
 NGUI="y"
 INSTALL_K8S_MONITOR=""
 INSTALL_NOHOSTCLIENT=""
+INSTALL_NOCACHELXDIMAGES=""
 SESSION_ID=`date +%s`
 OSM_DEVOPS=
 OSM_VCA_HOST=
@@ -1813,6 +1830,7 @@ while getopts ":b:r:c:n:k:u:R:D:o:O:m:N:H:S:s:w:t:U:P:A:l:L:K:d:p:T:f:F:-: hy" o
             [ "${OPTARG}" == "registry" ] && continue
             [ "${OPTARG}" == "pla" ] && INSTALL_PLA="y" && continue
             [ "${OPTARG}" == "volume" ] && OPENSTACK_ATTACH_VOLUME="true" && continue
+            [ "${OPTARG}" == "nocachelxdimages" ] && INSTALL_NOCACHELXDIMAGES="y" && continue
             echo -e "Invalid option: '--$OPTARG'\n" >&2
             usage && exit 1
             ;;