#!/bin/bash function is_privileged { ip link add dummy0 type dummy >/dev/null if [[ $? -eq 0 ]]; then echo "true" ip link delete dummy0 >/dev/null else echo "false" fi } if [ -z "$DEPLOYMENT_DNS_SUFFIX" ]; then echo "DEPLOYMENT_DNS_SUFFIX is required." exit 2 fi if [ -z "$DEPLOYMENT_RECORD_NAMESPACE" ]; then echo "DEPLOYMENT_RECORD_NAMESPACE is required." exit 2 fi if [ -z "$IMAGE_REGISTRY" ]; then echo "IMAGE_REGISTRY is required." exit 2 fi if [ ! -f "/etc/config/laconic.yml" ]; then echo "/etc/config/laconic.yml is required." exit 2 fi if [ ! -f "/etc/config/kube.yml" ]; then echo "/etc/config/kube.yml is required." exit 2 fi AUCTION_OPTS="" if [ "$HANDLE_AUCTION_REQUESTS" = "true" ]; then if [ -z "$AUCTION_BID_AMOUNT" ]; then echo "AUCTION_BID_AMOUNT is required when handling auction requsts." exit 2 fi AUCTION_OPTS="--auction-requests" fi STORAGE_ROOT="${STORAGE_ROOT:-/srv}" DEPLOYMENTS_DIR="${DEPLOYMENTS_DIR:-$STORAGE_ROOT/deployments}" LOG_DIR="${LOG_DIR:-$STORAGE_ROOT/logs}" CONTAINERS_DIR="${CONTAINER_DIR:-$STORAGE_ROOT/containers}" if [[ ! -d "${DEPLOYMENTS_DIR}" ]]; then mkdir -p "${DEPLOYMENTS_DIR}" fi LOG_OPTS="" if [[ -n "${LOG_DIR}" ]]; then if [[ ! -d "${LOG_DIR}" ]]; then mkdir -p "${LOG_DIR}" fi LOG_OPTS="--log-dir $LOG_DIR" fi if [[ ! -d "${CONTAINERS_DIR}" ]]; then mkdir -p "${CONTAINERS_DIR}" fi if [[ "$CLEAN_DEPLOYMENTS" == "true" ]]; then echo "Cleaning deployments directory..." rm -rf ${DEPLOYMENTS_DIR}/* fi if [[ "$CLEAN_CONTAINERS" == "true" ]]; then echo "Cleaning containers directory..." rm -rf ${CONTAINERS_DIR}/* fi if [[ "$CLEAN_LOGS" == "true" ]] && [[ -n "$LOG_DIR" ]]; then echo "Cleaning logs directory..." rm -rf ${LOG_DIR}/* fi if [[ ! -d "${UPLOAD_DIRECTORY}" ]]; then mkdir -p "${UPLOAD_DIRECTORY}" fi STORAGE_DRIVER="${STORAGE_DRIVER}" if [[ -z "${STORAGE_DRIVER}" ]]; then if [[ "true" == "`is_privileged`" ]]; then STORAGE_DRIVER="overlay" else STORAGE_DRIVER="vfs" fi fi echo "Using '$STORAGE_DRIVER' storage driver." cat > /etc/containers/storage.conf </dev/null if [ $? -ne 0 ]; then echo "########### STARTING API ############" echo "Starting API" yarn start & fi # echo "########### UNDEPLOY ############" # laconic-so undeploy-webapp-from-registry \ # --laconic-config /etc/config/laconic.yml \ # --deployment-parent-dir "${DEPLOYMENTS_DIR}" \ # --delete-names \ # --delete-volumes \ # --state-file "${DEPLOYMENTS_DIR}/autoremove.state" \ # --include-tags "$INCLUDE_TAGS" \ # --exclude-tags "$EXCLUDE_TAGS" \ # --lrn "$LRN" \ # --min-required-payment ${MIN_REQUIRED_PAYMENT:-0} \ # $EXTRA_UNDEPLOY_OPTS \ # $UPDATE_OPTS \ # --discover # rc=$? # if [ $rc -eq 0 ]; then # echo "############ UNDEPLOY SUCCESS #############" # else # echo "############ UNDEPLOY FAILURE STATUS $rc #############" # fi # echo "############ DEPLOY #############" # laconic-so deploy-webapp-from-registry \ # --kube-config /etc/config/kube.yml \ # --laconic-config /etc/config/laconic.yml \ # --image-registry ${IMAGE_REGISTRY} \ # --deployment-parent-dir "${DEPLOYMENTS_DIR}" \ # --dns-suffix ${DEPLOYMENT_DNS_SUFFIX} \ # --record-namespace-dns lrn://${DEPLOYMENT_RECORD_NAMESPACE}/dns \ # --record-namespace-deployments lrn://${DEPLOYMENT_RECORD_NAMESPACE}/deployments \ # --state-file "${DEPLOYMENTS_DIR}/autodeploy.state" \ # --include-tags "$INCLUDE_TAGS" \ # --exclude-tags "$EXCLUDE_TAGS" \ # --fqdn-policy "${FQDN_POLICY:-prohibit}" \ # --lrn "$LRN" \ # --min-required-payment ${MIN_REQUIRED_PAYMENT:-0} \ # --config-upload-dir "$UPLOAD_DIRECTORY" \ # --private-key-file "$OPENPGP_PRIVATE_KEY_FILE" \ # --private-key-passphrase "$OPENPGP_PASSPHRASE" \ # $AUCTION_OPTS \ # $LOG_OPTS \ # $EXTRA_DEPLOY_OPTS \ # $UPDATE_OPTS \ # --discover # rc=$? # if [ $rc -eq 0 ]; then # echo "############ DEPLOY SUCCESS #############" # else # echo "############ DEPLOY FAILURE STATUS $rc #############" # fi # if [ "$HANDLE_AUCTION_REQUESTS" = "true" ]; then # echo "############ DEPLOYMENT AUCTION #############" # laconic-so handle-deployment-auction \ # --laconic-config /etc/config/laconic.yml \ # --state-file "${DEPLOYMENTS_DIR}/autoauction.state" \ # --bid-amount ${AUCTION_BID_AMOUNT} # rc=$? # if [ $rc -eq 0 ]; then # echo "############ DEPLOYMENT AUCTION SUCCESS #############" # else # echo "############ DEPLOYMENT AUCTION FAILURE STATUS $rc #############" # fi # fi # # Cleanup any build leftovers # if [[ "${SYSTEM_PRUNE:-false}" == "true" ]]; then # docker system prune --all --force # fi # if [[ "${WEBAPP_IMAGE_PRUNE:-true}" == "true" ]]; then # APP_IMAGES="$(docker image ls --quiet --filter 'reference=laconic-webapp')" # DANGLING_IMAGES="$(docker image ls --quiet --filter 'dangling=true')" # if [[ -n "$APP_IMAGES" ]] || [[ -n "$DANGLING_IMAGES" ]]; then # echo "Pruning images: $APP_IMAGES $DANGLING_IMAGES" # docker image rm -f $APP_IMAGES $DANGLING_IMAGES # fi # fi sleep ${CHECK_INTERVAL:-15} done