Adds image overlay to bundle
[osm/devops.git] / installers / charmed_install.sh
index 62fa547..94bd705 100755 (executable)
@@ -16,6 +16,7 @@
 # set -eux
 
 K8S_CLOUD_NAME="k8s-cloud"
+KUBECTL="microk8s.kubectl"
 IMAGES_OVERLAY_FILE=~/.osm/images-overlay.yaml
 function check_arguments(){
     while [ $# -gt 0 ] ; do
@@ -26,6 +27,7 @@ function check_arguments(){
             --lxd) LXD_CLOUD="$2" ;;
             --lxd-cred) LXD_CREDENTIALS="$2" ;;
             --microstack) MICROSTACK=y ;;
+            --ha) BUNDLE="osm-ha" ;;
             --tag) TAG="$2" ;;
         esac
         shift
@@ -34,8 +36,8 @@ function check_arguments(){
     # echo $BUNDLE $KUBECONFIG $LXDENDPOINT
 }
 function install_snaps(){
-    sudo snap install juju --classic
-    [ ! -v KUBECFG ] && sudo snap install microk8s --classic && sudo usermod -a -G microk8s ubuntu && mkdir -p ~/.kube && sudo chown -f -R `whoami` ~/.kube
+    [ ! -v KUBECFG ] && sudo snap install microk8s --classic && sudo usermod -a -G microk8s `whoami` && mkdir -p ~/.kube && sudo chown -f -R `whoami` ~/.kube
+    sudo snap install juju --classic --channel=2.8/stable
 }
 
 function bootstrap_k8s_lxd(){
@@ -44,12 +46,21 @@ function bootstrap_k8s_lxd(){
 
     if [ -v KUBECFG ]; then
         cat $KUBECFG | juju add-k8s $K8S_CLOUD_NAME $ADD_K8S_OPTS
-        [ -v BOOTSTRAP_NEEDED ] && juju bootstrap $K8S_CLOUD_NAME $CONTROLLER_NAME
+        [ -v BOOTSTRAP_NEEDED ] && juju bootstrap $K8S_CLOUD_NAME $CONTROLLER_NAME --config controller-service-type=loadbalancer
     else
+        sg microk8s -c "echo ${DEFAULT_IP}-${DEFAULT_IP} | microk8s.enable metallb"
         sg microk8s -c "microk8s.enable storage dns"
+        while true
+        do
+            sg microk8s -c "microk8s.status" | grep 'storage: enabled'
+            if [ $? -eq 0 ]; then
+                break
+            fi
+            sleep 1
+        done
 
         [ ! -v BOOTSTRAP_NEEDED ] && sg microk8s -c "microk8s.config" | juju add-k8s $K8S_CLOUD_NAME $ADD_K8S_OPTS
-        [ -v BOOTSTRAP_NEEDED ] && sg microk8s -c "juju bootstrap microk8s $CONTROLLER_NAME" && K8S_CLOUD_NAME=microk8s
+        [ -v BOOTSTRAP_NEEDED ] && sg microk8s -c "juju bootstrap microk8s $CONTROLLER_NAME --config controller-service-type=loadbalancer" && K8S_CLOUD_NAME=microk8s
     fi
 
     if [ -v LXD_CLOUD ]; then
@@ -74,6 +85,7 @@ function bootstrap_k8s_lxd(){
         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:
@@ -108,6 +120,7 @@ EOF
     juju add-credential -c $CONTROLLER_NAME lxd-cloud -f $LXD_CREDENTIALS
     sg lxd -c "lxd waitready"
     juju add-model test lxd-cloud || true
+    juju controller-config features=[k8s-operators]
 }
 
 function deploy_charmed_osm(){
@@ -120,11 +133,11 @@ function deploy_charmed_osm(){
     fi
     echo "Deploying OSM with charms"
     # echo $BUNDLE
+    images_overlay=""
+    [ -v TAG ] && generate_images_overlay && images_overlay="--overlay $IMAGES_OVERLAY_FILE"
     if [ -v BUNDLE ]; then
-        juju deploy $BUNDLE --overlay ~/.osm/vca-overlay.yaml
+        juju deploy $BUNDLE --overlay ~/.osm/vca-overlay.yaml $images_overlay
     else
-        images_overlay=""
-        [ -v TAG ] && generate_images_overlay && images_overlay="--overlay $IMAGES_OVERLAY_FILE"
         juju deploy osm --overlay ~/.osm/vca-overlay.yaml $images_overlay
     fi
     echo "Waiting for deployment to finish..."
@@ -138,7 +151,8 @@ function deploy_charmed_osm(){
 function check_osm_deployed() {
     while true
     do
-        pod_name=`sg microk8s -c "microk8s.kubectl -n osm get pods | grep ui-k8s | grep -v operator" | awk '{print $1}'`
+        pod_name=`sg microk8s -c "microk8s.kubectl -n osm get pods | grep ui-k8s | grep -v operator" | awk '{print $1; exit}'`
+
         if [[ `sg microk8s -c "microk8s.kubectl -n osm wait pod $pod_name --for condition=Ready"` ]]; then
             if [[ `sg microk8s -c "microk8s.kubectl -n osm wait pod lcm-k8s-0 --for condition=Ready"` ]]; then
                 break
@@ -156,15 +170,15 @@ function create_overlay() {
     local HOME=/home/$USER
     local vca_user=$(cat $HOME/.local/share/juju/accounts.yaml | yq --arg CONTROLLER_NAME $CONTROLLER_NAME '.controllers[$CONTROLLER_NAME].user')
     local vca_password=$(cat $HOME/.local/share/juju/accounts.yaml | yq --arg CONTROLLER_NAME $CONTROLLER_NAME '.controllers[$CONTROLLER_NAME].password')
-    local vca_host=$(cat $HOME/.local/share/juju/controllers.yaml | yq --arg CONTROLLER_NAME $CONTROLLER_NAME '.controllers[$CONTROLLER_NAME]["api-endpoints"][0]' | cut -d ":" -f 1 | cut -d "\"" -f 2)
-    local vca_port=$(cat $HOME/.local/share/juju/controllers.yaml | yq --arg CONTROLLER_NAME $CONTROLLER_NAME '.controllers[$CONTROLLER_NAME]["api-endpoints"][0]' | cut -d ":" -f 2 | cut -d "\"" -f 1)
+    local vca_host=$(cat $HOME/.local/share/juju/controllers.yaml | yq --arg CONTROLLER_NAME $CONTROLLER_NAME '.controllers[$CONTROLLER_NAME]["api-endpoints"][0]' --raw-output | cut -d ":" -f 1)
+    local vca_port=$(cat $HOME/.local/share/juju/controllers.yaml | yq --arg CONTROLLER_NAME $CONTROLLER_NAME '.controllers[$CONTROLLER_NAME]["api-endpoints"][0]' --raw-output | cut -d ":" -f 2)
     local vca_pubkey=\"$(cat $HOME/.local/share/juju/ssh/juju_id_rsa.pub)\"
     local vca_cloud="lxd-cloud"
     # Get the VCA Certificate
-    local vca_cacert=$(cat $HOME/.local/share/juju/controllers.yaml | yq --arg CONTROLLER_NAME $CONTROLLER_NAME '.controllers[$CONTROLLER_NAME]["ca-cert"]' | base64 | tr -d \\n)
+    local vca_cacert=$(cat $HOME/.local/share/juju/controllers.yaml | yq --arg CONTROLLER_NAME $CONTROLLER_NAME '.controllers[$CONTROLLER_NAME]["ca-cert"]' --raw-output | base64 | tr -d \\n)
 
     # Calculate the default route of this machine
-    local DEFAULT_IF=`route -n |awk '$1~/^0.0.0.0/ {print $8}'`
+    local DEFAULT_IF=`ip route list match 0.0.0.0 | awk '{print $5}'`
     local vca_apiproxy=`ip -o -4 a |grep ${DEFAULT_IF}|awk '{split($4,a,"/"); print a[1]}'`
 
     # Generate a new overlay.yaml, overriding any existing one
@@ -180,6 +194,7 @@ applications:
       vca_cacert: $vca_cacert
       vca_apiproxy: $vca_apiproxy
       vca_cloud: $vca_cloud
+      vca_k8s_cloud: $K8S_CLOUD_NAME
   mon-k8s:
     options:
       vca_user: $vca_user
@@ -222,24 +237,6 @@ function install_osmclient() {
     sudo snap alias osmclient.osm osm
 }
 
-function create_iptables() {
-    check_install_iptables_persistent
-
-    if ! sudo iptables -t nat -C PREROUTING -p tcp -m tcp -d $DEFAULT_IP --dport 17070 -j DNAT --to-destination $OSM_VCA_HOST; then
-        sudo iptables -t nat -A PREROUTING -p tcp -m tcp -d $DEFAULT_IP --dport 17070 -j DNAT --to-destination $OSM_VCA_HOST
-        sudo netfilter-persistent save
-    fi
-}
-
-function check_install_iptables_persistent(){
-    echo -e "\nChecking required packages: iptables-persistent"
-    if ! dpkg -l iptables-persistent &>/dev/null; then
-        echo -e "    Not installed.\nInstalling iptables-persistent requires root privileges"
-        echo iptables-persistent iptables-persistent/autosave_v4 boolean true | sudo debconf-set-selections
-        echo iptables-persistent iptables-persistent/autosave_v6 boolean true | sudo debconf-set-selections
-        sudo apt-get -yq install iptables-persistent
-    fi
-}
 
 function install_microstack() {
     sudo snap install microstack --classic --beta
@@ -253,7 +250,7 @@ function install_microstack() {
     ubuntu1604
     ssh-keygen -t rsa -N "" -f ~/.ssh/microstack
     microstack.openstack keypair create --public-key ~/.ssh/microstack.pub microstack
-    export OSM_HOSTNAME=`juju status --format yaml | yq r - applications.nbi-k8s.address`
+    export OSM_HOSTNAME=`juju status --format json | jq -rc '.applications."nbi-k8s".address'`
     osm vim-create --name microstack-site \
     --user admin \
     --password keystone \
@@ -270,15 +267,15 @@ function install_microstack() {
     version: 3}'
 }
 
-DEFAULT_IF=`route -n |awk '$1~/^0.0.0.0/ {print $8}'`
+DEFAULT_IF=`ip route list match 0.0.0.0 | awk '{print $5}'`
 DEFAULT_IP=`ip -o -4 a |grep ${DEFAULT_IF}|awk '{split($4,a,"/"); print a[1]}'`
 
 check_arguments $@
 mkdir -p ~/.osm
 install_snaps
+sleep 5
 bootstrap_k8s_lxd
 deploy_charmed_osm
-[ ! -v CONTROLLER ] && create_iptables
 install_osmclient
 if [ -v MICROSTACK ]; then
     install_microstack