#!/bin/bash ## Init is run on host ## For now it is run every time the script is launched, but ## it should be launched only once after build. ## Accessible variables are: ## - SERVICE_NAME Name of current service ## - DOCKER_BASE_IMAGE Base image from which this service might be built if any ## - SERVICE_DATASTORE Location on host of the DATASTORE of this service ## - SERVICE_CONFIGSTORE Location on host of the CONFIGSTORE of this service . lib/common || exit 1 set -e service_def=$(get_compose_service_def "$SERVICE_NAME") USER_EMAIL=$(echo "$service_def" | shyaml get-value options.email 2>/dev/null) || { err "No ${WHITE}email${NORMAL} value in ${DARKYELLOW}$SERVICE_NAME${NORMAL} compose's ${WHITE}options${NORMAL}." exit 1 } config=" $SERVICE_NAME: environment: LETSENCRYPT_USER_MAIL: $USER_EMAIL" if environment_def="$(printf "%s" "$service_def" | shyaml -y get-value options.env 2>/dev/null)"; then while read-0 key value; do config+="$(printf "\n %s: %s" "$key" "$value")" done < <(printf "%s" "$environment_def" | yaml_opt_bash_env_ignore_first_level LEXICON) if ! provider=$(printf "%s" "$environment_def" | shyaml -y get-value provider 2>/dev/null); then provider= ## If no provider is given, we fallback on the first found while read-0 key value; do [[ "$(echo "$value" | shyaml get-type)" == "struct" ]] && { provider="$key" break } done < <(echo "$environment_def" | shyaml key-values-0) warn "No ${WHITE}provider${NORMAL} key given, had to infer it, chose '$key'." fi config+=$(echo -en "\n LEXICON_PROVIDER: $provider") fi if ! challenge_type=$(printf "%s" "$service_def" | shyaml get-value "options.challenge-type" 2>/dev/null); then warn "No ${WHITE}challenge-type${NORMAL} provided, defaulting to 'http'." challenge_type=http fi config+=$(echo -en "\n CHALLENGE_TYPE: $challenge_type") aimport remainder_args if [ "$challenge_type" == "http" ] && [ "${remainder_args[0]}" == "crt" ] && [ "${remainder_args[1]}" == "create" ] && ! [ -d "$SERVICE_DATASTORE/etc/letsencrypt/live/${remainder_args[2]}" ]; then while read container_id; do docker stop -t 5 "$container_id" done < <(docker ps \ --filter label="compose.project=$PROJECT_NAME" \ --filter publish=80 \ --format "{{.ID}}" ) config+=$(echo -en "\n ports: - \"0.0.0.0:80:80\"") fi init-config-add "$config" mkdir -p "$SERVICE_DATASTORE/etc/letsencrypt"