#!/bin/bash ######################################################################################################################## # Define your deployment settings here ######################################################################################################################## # Set the URL of your local Docker registry where the images will be uploaded to. Leave it blank if you do not want to # use any Docker registry. REGISTRY_IMAGE="" #REGISTRY_IMAGE="http://my-container-registry.local/" # Set the list of components you want to build images for, and deploy. COMPONENTS="context device service compute monitoring centralizedattackdetector webui" # Set the tag you want to use for your images. IMAGE_TAG="tf-dev" # Set the name of the Kubernetes namespace to deploy to. K8S_NAMESPACE="tf-dev" ######################################################################################################################## # Automated steps start here ######################################################################################################################## # Constants CLONE_URL="https://gitlab.com/teraflow-h2020/controller.git" GITLAB_REPO_URL="registry.gitlab.com/teraflow-h2020/controller" TMP_FOLDER="./tmp" # Create a tmp folder for files modified during the deployment TMP_MANIFESTS_FOLDER="$TMP_FOLDER/manifests" mkdir -p $TMP_MANIFESTS_FOLDER TMP_LOGS_FOLDER="$TMP_FOLDER/logs" mkdir -p $TMP_LOGS_FOLDER # Re-create the namespace to prevent being affected by garbage on it kubectl delete namespace $K8S_NAMESPACE kubectl create namespace $K8S_NAMESPACE for COMPONENT in $COMPONENTS; do echo "Processing '$COMPONENT' component..." IMAGE_NAME="$COMPONENT:$IMAGE_TAG" IMAGE_URL="$REGISTRY_IMAGE/$IMAGE_NAME" echo " Building Docker image..." BUILD_LOG="$TMP_LOGS_FOLDER/build_${COMPONENT}.log" docker build -t "$IMAGE_NAME" -f ./src/$COMPONENT/Dockerfile ./src/ > $BUILD_LOG if [ -n "$REGISTRY_IMAGE" ]; then echo "Pushing Docker image to '$REGISTRY_IMAGE'..." TAG_LOG="$TMP_LOGS_FOLDER/tag_${COMPONENT}.log" docker tag "$IMAGE_NAME" "$IMAGE_URL" > $TAG_LOG PUSH_LOG="$TMP_LOGS_FOLDER/push_${COMPONENT}.log" docker push "$IMAGE_URL" > "$PUSH_LOG" fi echo " Adapting manifest file..." MANIFEST="$TMP_MANIFESTS_FOLDER/${COMPONENT}service.yaml" cp ./manifests/${COMPONENT}service.yaml $MANIFEST if [ -n "$REGISTRY_IMAGE" ]; then sed -E -i "s#image: $GITLAB_REPO_URL/$COMPONENT:latest#image: $IMAGE_URL#g" $MANIFEST sed -E -i "s#imagePullPolicy: .*#imagePullPolicy: Always#g" $MANIFEST else sed -E -i "s#image: $GITLAB_REPO_URL/$COMPONENT:latest#image: $IMAGE_NAME#g" $MANIFEST sed -E -i "s#imagePullPolicy: .*#imagePullPolicy: Never#g" $MANIFEST fi echo " Deploying to Kubernetes..." DEPLOY_LOG="$TMP_LOGS_FOLDER/push_${COMPONENT}.log" kubectl --namespace $K8S_NAMESPACE apply -f $MANIFEST > $DEPLOY_LOG done kubectl --namespace $K8S_NAMESPACE get all echo "Done!"