Feat: Add Job template to deploy ODL on K8S Magnum
[releng/builder.git] / jjb / packaging / openstack-k8s-deploy-helm.sh
diff --git a/jjb/packaging/openstack-k8s-deploy-helm.sh b/jjb/packaging/openstack-k8s-deploy-helm.sh
new file mode 100644 (file)
index 0000000..d418168
--- /dev/null
@@ -0,0 +1,79 @@
+#!/bin/bash -l
+# SPDX-License-Identifier: EPL-1.0
+##############################################################################
+# Copyright (c) 2021 The Linux Foundation and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+##############################################################################
+# shellcheck disable=SC2153,SC2034
+echo "---> Deploy Opendaylight Helm charts on K8S cluster and verify deployment"
+set -eux -o pipefail
+
+set -x
+
+# shellcheck disable=SC1090
+source ~/lf-env.sh
+
+K8S_DEPLOY_LOG="$WORKSPACE/archives/k8s-kubectl-file.log"
+mkdir -p "$WORKSPACE/archives"
+
+KUBECONFIG="${WORKSPACE}/config"
+export KUBECONFIG
+
+# Deploy helm charts after dry run.
+cd "$WORKSPACE/helm"
+echo "INFO: ODL Helm Charts install --dry-run"
+helm3.7 install sdnc opendaylight --dry-run
+echo "INFO: ODL Helm Charts install"
+helm3.7 install sdnc opendaylight
+
+POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/name=opendaylight,app.kubernetes.io/instance=sdnc" -o jsonpath="{.items[0].metadata.name}")
+CONTAINER_PORT=$(kubectl get pod --namespace default "$POD_NAME" -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
+echo "Visit http://127.0.0.1:8080 to use your application"
+
+export POD_NAME
+export CONTAINER_PORT
+
+# wait for the pod to become ready
+for i in $(seq 10); do
+    sleep 50
+    # Verify K8S pods are running state before starting port forwarding
+    echo "DEBUG: Verify ${KUBECONFIG} is valid and nodes are accessable through kubectl:"
+    kubectl describe nodes | tee -a "${K8S_DEPLOY_LOG}"
+    kubectl get po -A -o wide | tee -a "${K8S_DEPLOY_LOG}"
+    # kubectl get events --sort-by='.metadata.creationTimestamp'
+    kubectl get nodes --show-labels
+
+    pod_status=$(kubectl get pods -n default -o jsonpath="{.items[0].status.phase}")
+    if [[ "$pod_status" =~ .*Running.* ]]; then
+        echo "INFO: SNDC runing on the pod"
+        kubectl --namespace default port-forward "$POD_NAME" 8080:"$CONTAINER_PORT" &
+        sleep 30
+        break
+    elif [[ "$pod_status" =~ .*Pending.* ]]; then
+        echo "INFO: SNDC pod status: ${pod_status}, creation in progress ..."
+        continue
+    else
+        echo "ERROR: Error in deploying pod"
+        kubectl describe pods | tee -a "${K8S_DEPLOY_LOG}"
+    fi
+    kubectl get pods -n default -o wide
+done
+
+# Test SDNC setup by listing restconf modules
+SDNC_URL="http://127.0.0.1:8080/restconf/modules"
+resp=$(curl -u admin:admin -w "\\n\\n%{http_code}" --globoff -H "Content-Type:application/json" "$SDNC_URL")
+json_data=$(echo "$resp" | head -n1)
+status=$(echo "$resp" | awk 'END {print $NF}')
+
+if [ "$status" != 200 ]; then
+    >&2 echo "ERROR: Failed to fetch data from $SDNC_URL with status code $status"
+    >&2 echo "$resp"
+    exit 1
+else
+    echo "INFO: Successfully deploy Opendaylight SND on K8S pod:"
+    echo "${json_data}" | jq
+fi