#!/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 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 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" \ $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