Pin MicroK8s version
[osm/devops.git] / installers / charmed_install.sh
index 9fda516..00e4112 100755 (executable)
 
 # set -eux
 
+JUJU_AGENT_VERSION=2.8.6
 K8S_CLOUD_NAME="k8s-cloud"
 KUBECTL="microk8s.kubectl"
+MICROK8S_VERSION=1.19
 IMAGES_OVERLAY_FILE=~/.osm/images-overlay.yaml
+PATH=/snap/bin:${PATH}
+
 function check_arguments(){
     while [ $# -gt 0 ] ; do
         case $1 in
@@ -27,8 +31,9 @@ function check_arguments(){
             --lxd) LXD_CLOUD="$2" ;;
             --lxd-cred) LXD_CREDENTIALS="$2" ;;
             --microstack) MICROSTACK=y ;;
-            --ha) BUNDLE="cs:osm-ha-39" ;;
+            --ha) BUNDLE="cs:osm-ha" ;;
             --tag) TAG="$2" ;;
+            --registry) REGISTRY_INFO="$2" ;;
         esac
         shift
     done
@@ -38,12 +43,12 @@ function check_arguments(){
 
 function install_snaps(){
     if [ ! -v KUBECFG ]; then
-        sudo snap install microk8s --classic
+        sudo snap install microk8s --classic --channel=${MICROK8S_VERSION}/stable
         sudo usermod -a -G microk8s `whoami`
         mkdir -p ~/.kube
         sudo chown -f -R `whoami` ~/.kube
         KUBEGRP="microk8s"
-        microk8s status --wait-ready
+        sg ${KUBEGRP} -c "microk8s status --wait-ready"
     else
         KUBECTL="kubectl"
         sudo snap install kubectl --classic
@@ -88,7 +93,7 @@ EOF
         cat $KUBECFG | juju add-k8s $K8S_CLOUD_NAME $ADD_K8S_OPTS
         [ -v BOOTSTRAP_NEEDED ] && juju bootstrap $K8S_CLOUD_NAME $CONTROLLER_NAME \
             --config controller-service-type=loadbalancer \
-            --agent-version=2.8.1
+            --agent-version=$JUJU_AGENT_VERSION
     else
         sg ${KUBEGRP} -c "echo ${DEFAULT_IP}-${DEFAULT_IP} | microk8s.enable metallb"
         sg ${KUBEGRP} -c "microk8s.enable ingress"
@@ -112,7 +117,7 @@ EOF
 
         [ ! -v BOOTSTRAP_NEEDED ] && sg ${KUBEGRP} -c "microk8s.config" | juju add-k8s $K8S_CLOUD_NAME $ADD_K8S_OPTS
         [ -v BOOTSTRAP_NEEDED ] && sg ${KUBEGRP} -c \
-            "juju bootstrap microk8s $CONTROLLER_NAME --config controller-service-type=loadbalancer --agent-version=2.8.1" \
+            "juju bootstrap microk8s $CONTROLLER_NAME --config controller-service-type=loadbalancer --agent-version=$JUJU_AGENT_VERSION" \
             && K8S_CLOUD_NAME=microk8s
     fi
 
@@ -131,7 +136,6 @@ EOF
         # Install LXD snap
         sudo apt-get remove --purge -y liblxc1 lxc-common lxcfs lxd lxd-client
         sudo snap install lxd
-        sudo apt-get install zfsutils-linux -y
         # Configure LXD
         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"
@@ -196,6 +200,27 @@ function wait_for_port(){
 }
 
 function deploy_charmed_osm(){
+    if [ -v REGISTRY_INFO ] ; then
+        registry_parts=(${REGISTRY_INFO//@/ })
+        if [ ${#registry_parts[@]} -eq 1 ] ; then
+            # No credentials supplied
+            REGISTRY_USERNAME=""
+            REGISTRY_PASSWORD=""
+            REGISTRY_URL=${registry_parts[0]}
+        else
+            credentials=${registry_parts[0]}
+            credential_parts=(${credentials//:/ })
+            REGISTRY_USERNAME=${credential_parts[0]}
+            REGISTRY_PASSWORD=${credential_parts[1]}
+            REGISTRY_URL=${registry_parts[1]}
+        fi
+        # Ensure the URL ends with a /
+        case $REGISTRY_URL in
+            */) ;;
+            *) REGISTRY_URL=${REGISTRY_URL}/
+        esac
+    fi
+
     create_overlay
     echo "Creating OSM model"
     if [ -v KUBECFG ]; then
@@ -205,11 +230,15 @@ function deploy_charmed_osm(){
     fi
     echo "Deploying OSM with charms"
     images_overlay=""
+    if [ -v REGISTRY_URL ]; then
+       [ ! -v TAG ] && TAG='latest'
+    fi
     [ -v TAG ] && generate_images_overlay && images_overlay="--overlay $IMAGES_OVERLAY_FILE"
+
     if [ -v BUNDLE ]; then
         juju deploy $BUNDLE --overlay ~/.osm/vca-overlay.yaml $images_overlay
     else
-        juju deploy cs:osm-49 --overlay ~/.osm/vca-overlay.yaml $images_overlay
+        juju deploy cs:osm --channel edge --overlay ~/.osm/vca-overlay.yaml $images_overlay
     fi
 
     echo "Waiting for deployment to finish..."
@@ -247,22 +276,16 @@ function deploy_charmed_osm(){
     juju expose prometheus-k8s
     wait_for_port prometheus-k8s 3
 
-    # Expose UI
-    juju config ui-k8s juju-external-hostname=osm.${API_SERVER}.xip.io
-    juju expose ui-k8s
-    wait_for_port ui-k8s 4
-
     # Apply annotations
     sg ${KUBEGRP} -c "${KUBECTL} annotate ingresses.networking nginx.ingress.kubernetes.io/backend-protocol=HTTPS -n osm -l juju-app=nbi-k8s"
     sg ${KUBEGRP} -c "${KUBECTL} annotate ingresses.networking nginx.ingress.kubernetes.io/proxy-body-size=0 -n osm -l juju-app=nbi-k8s"
     sg ${KUBEGRP} -c "${KUBECTL} annotate ingresses.networking nginx.ingress.kubernetes.io/proxy-body-size=0 -n osm -l juju-app=ng-ui"
-    sg ${KUBEGRP} -c "${KUBECTL} annotate ingresses.networking nginx.ingress.kubernetes.io/proxy-body-size=0 -n osm -l juju-app=ui-k8s"
 }
 
 function check_osm_deployed() {
     TIME_TO_WAIT=600
     start_time="$(date -u +%s)"
-    total_service_count=15
+    total_service_count=14
     previous_count=0
     while true
     do
@@ -327,33 +350,41 @@ EOF
 }
 
 function generate_images_overlay(){
+    if [ ! -z "$REGISTRY_USERNAME" ] ; then
+        REGISTRY_CREDENTIALS=$(cat <<EOF
+
+      image_username: $REGISTRY_USERNAME
+      image_password: $REGISTRY_PASSWORD
+EOF
+    );
+fi
+
     cat << EOF > /tmp/images-overlay.yaml
 applications:
   lcm-k8s:
     options:
-      image: opensourcemano/lcm:$TAG
+      image: ${REGISTRY_URL}opensourcemano/lcm:$TAG ${REGISTRY_CREDENTIALS}
   mon-k8s:
     options:
-      image: opensourcemano/mon:$TAG
+      image: ${REGISTRY_URL}opensourcemano/mon:$TAG ${REGISTRY_CREDENTIALS}
   ro-k8s:
     options:
-      image: opensourcemano/ro:$TAG
+      image: ${REGISTRY_URL}opensourcemano/ro:$TAG ${REGISTRY_CREDENTIALS}
   nbi-k8s:
     options:
-      image: opensourcemano/nbi:$TAG
+      image: ${REGISTRY_URL}opensourcemano/nbi:$TAG ${REGISTRY_CREDENTIALS}
   pol-k8s:
     options:
-      image: opensourcemano/pol:$TAG
-  ui-k8s:
-    options:
-      image: opensourcemano/light-ui:$TAG
+      image: ${REGISTRY_URL}opensourcemano/pol:$TAG ${REGISTRY_CREDENTIALS}
   pla:
     options:
-      image: opensourcemano/pla:$TAG
+      image: ${REGISTRY_URL}opensourcemano/pla:$TAG ${REGISTRY_CREDENTIALS}
   ng-ui:
     options:
-      image: opensourcemano/ng-ui:$TAG
-
+      image: ${REGISTRY_URL}opensourcemano/ng-ui:$TAG ${REGISTRY_CREDENTIALS}
+  keystone:
+    options:
+      image: ${REGISTRY_URL}opensourcemano/keystone:$TAG ${REGISTRY_CREDENTIALS}
 EOF
     mv /tmp/images-overlay.yaml $IMAGES_OVERLAY_FILE
 }