Fixes bug 2285: MTU Issue
[osm/devops.git] / installers / charmed_install.sh
index 7b0c48f..2ddc797 100755 (executable)
@@ -17,7 +17,7 @@
 
 LXD_VERSION=5.0
 JUJU_VERSION=2.9
-JUJU_AGENT_VERSION=2.9.34
+JUJU_AGENT_VERSION=2.9.43
 K8S_CLOUD_NAME="k8s-cloud"
 KUBECTL="microk8s.kubectl"
 MICROK8S_VERSION=1.26
@@ -76,6 +76,11 @@ function install_snaps(){
         sudo snap install microk8s --classic --channel=${MICROK8S_VERSION}/stable ||
           FATAL_TRACK k8scluster "snap install microk8s ${MICROK8S_VERSION}/stable failed"
         sudo usermod -a -G microk8s `whoami`
+        # Workaround bug in calico MTU detection
+        if [ ${DEFAULT_IF_MTU} -ne 1500 ] ; then
+            sudo mkdir -p /var/lib/calico
+            sudo ln -sf /var/snap/microk8s/current/var/lib/calico/mtu /var/lib/calico/mtu
+        fi
         sudo cat /var/snap/microk8s/current/args/kube-apiserver | grep advertise-address || (
                 echo "--advertise-address $DEFAULT_IP" | sudo tee -a /var/snap/microk8s/current/args/kube-apiserver
                 sg ${KUBEGRP} -c microk8s.stop
@@ -187,9 +192,6 @@ EOF
               sudo usermod -a -G lxd `whoami`
               cat /usr/share/osm-devops/installers/lxd-preseed.conf | sed 's/^config: {}/config:\n  core.https_address: '$LXDENDPOINT':8443/' | sg lxd -c "lxd init --preseed"
               sg lxd -c "lxd waitready"
-              DEFAULT_MTU=$(ip addr show $DEFAULT_IF | perl -ne 'if (/mtu\s(\d+)/) {print $1;}')
-              sg lxd -c "lxc profile device set default eth0 mtu $DEFAULT_MTU"
-              sg lxd -c "lxc network set lxdbr0 bridge.mtu $DEFAULT_MTU"
 
               cat << EOF > $LXD_CLOUD
 clouds:
@@ -281,7 +283,17 @@ function deploy_charmed_osm(){
         hostport="$(echo ${url/$user@/} | cut -d/ -f1)"
         API_SERVER="$(echo $hostport | sed -e 's,:.*,,g')"
     fi
-    # Configure VCA Integrator
+
+    configure_vca_integrator
+    expose_osm_services
+    echo "Waiting for deployment to finish..."
+    check_osm_deployed_before_config
+    config_grafana_and_prometheus
+    check_osm_deployed_after_config
+    echo "OSM with charms deployed"
+}
+
+function configure_vca_integrator(){
     if [ ! -v INSTALL_NOLXD ]; then
         juju config vca \
           k8s-cloud=microk8s \
@@ -296,22 +308,61 @@ function deploy_charmed_osm(){
           accounts="`cat ~/.local/share/juju/accounts.yaml`" \
           public-key="`cat ~/.local/share/juju/ssh/juju_id_rsa.pub`"
     fi
-    # Expose OSM services
+}
+
+function expose_osm_services(){
     juju config -m $MODEL_NAME nbi external-hostname=nbi.${API_SERVER}.nip.io
     juju config -m $MODEL_NAME ng-ui external-hostname=ui.${API_SERVER}.nip.io
-    juju config -m $MODEL_NAME grafana site_url=https://grafana.${API_SERVER}.nip.io
-    juju config -m $MODEL_NAME prometheus site_url=https://prometheus.${API_SERVER}.nip.io
+    juju config -m $MODEL_NAME grafana web_external_url=https://grafana.${API_SERVER}.nip.io
+}
 
-    echo "Waiting for deployment to finish..."
-    check_osm_deployed
+function config_grafana_and_prometheus() {
+    echo "Setting Grafana and Prometheus configuration"
     grafana_leader=`juju status -m $MODEL_NAME grafana | grep "*" | cut -d "*" -f 1`
-    grafana_admin_password=`juju run -m $MODEL_NAME --unit $grafana_leader "echo \\$GF_SECURITY_ADMIN_PASSWORD"`
-    juju config -m $MODEL_NAME mon grafana-password=$grafana_admin_password
-    check_osm_deployed
-    echo "OSM with charms deployed"
+    grafana_admin_password=`juju run-action -m $MODEL_NAME $grafana_leader get-admin-password --wait | grep "admin-password" | cut -d ":" -f 2`
+    juju config -m $MODEL_NAME mon grafana-password="$grafana_admin_password"
+    juju config -m $MODEL_NAME mon grafana-user=admin
+    juju config -m $MODEL_NAME mon grafana-url=http://grafana:3000
+    prometheus_url="http://prometheus:9090"
+    juju config -m $MODEL_NAME mon prometheus-url=$prometheus_url
+    juju config -m $MODEL_NAME nbi prometheus-url=$prometheus_url
+    mon_leader=`juju status -m $MODEL_NAME mon | grep "*" | cut -d "*" -f 1`
+    juju run-action --m $MODEL_NAME $mon_leader create-datasource name=osm_prometheus url=$prometheus_url --wait
 }
 
-function check_osm_deployed() {
+function check_osm_deployed_before_config() {
+    TIME_TO_WAIT=600
+    start_time="$(date -u +%s)"
+    total_active_services=13
+    [ -n "$INSTALL_PLA" ] && total_active_services=$((total_active_services + 1))
+    previous_count=0
+    while true
+    do
+        juju_status=$(juju status --format json -m $MODEL_NAME)
+        active_service_count=$(echo $juju_status | jq '.applications[]."application-status".current'| grep active | wc -l)
+        echo "$active_service_count / $total_active_services services active"
+        if [ $active_service_count -eq $total_active_services ]; then
+            mon_is_blocked=$(echo $juju_status | jq '.applications["mon"].units[]."workload-status".current' | grep blocked | wc -l)
+            nbi_is_blocked=$(echo $juju_status | jq '.applications["nbi"].units[]."workload-status".current' | grep blocked | wc -l)
+            if [ $mon_is_blocked -a $nbi_is_blocked ]; then
+                echo "MON and NBI are blocked"
+                break
+            fi
+        fi
+        if [ $active_service_count -ne $previous_count ]; then
+            previous_count=$active_service_count
+            start_time="$(date -u +%s)"
+        fi
+        now="$(date -u +%s)"
+        if [[ $(( now - start_time )) -gt $TIME_TO_WAIT ]];then
+            echo "Timed out waiting for OSM services to become ready"
+            FATAL_TRACK deploy_osm "Timed out waiting for services to become ready"
+        fi
+        sleep 10
+    done
+}
+
+function check_osm_deployed_after_config() {
     TIME_TO_WAIT=600
     start_time="$(date -u +%s)"
     total_service_count=15
@@ -338,8 +389,6 @@ function check_osm_deployed() {
 }
 
 function generate_password_overlay() {
-    # prometheus
-    web_config_password=`openssl rand -hex 16`
     # keystone
     keystone_db_password=`openssl rand -hex 16`
     keystone_admin_password=`openssl rand -hex 16`
@@ -349,9 +398,6 @@ function generate_password_overlay() {
     mariadb_root_password=`openssl rand -hex 16`
     cat << EOF > /tmp/password-overlay.yaml
 applications:
-  prometheus:
-    options:
-      web_config_password: $web_config_password
   keystone:
     options:
       keystone-db-password: $keystone_db_password
@@ -541,6 +587,7 @@ function install_microstack() {
 
 DEFAULT_IF=`ip route list match 0.0.0.0 | awk '{print $5; exit}'`
 DEFAULT_IP=`ip -o -4 a |grep ${DEFAULT_IF}|awk '{split($4,a,"/"); print a[1]; exit}'`
+DEFAULT_IF_MTU=`ip a show ${DEFAULT_IF} | grep mtu | awk '{print $5}'`
 
 check_arguments $@
 mkdir -p ~/.osm