#!/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 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 } yaml_opt_bash_env() { local prefix="$1" key value while read-0 key value; do new_prefix="${prefix}_${key^^}" if [[ "$(echo "$value" | shyaml get-type)" == "struct" ]]; then echo "$value" | yaml_opt_bash_env "${new_prefix}" else printf "%s\0%s\0" "${new_prefix}" "$value" fi done < <(shyaml key-values-0) } yaml_opt_bash_env_ignore_first_level() { local prefix="$1" key value while read-0 key value; do new_prefix="${prefix}_${key^^}" if [[ "$(echo "$value" | shyaml get-type)" == "struct" ]]; then echo "$value" | yaml_opt_bash_env "${new_prefix}" fi done < <(shyaml key-values-0) } config=" $SERVICE_NAME: environment: LETSENCRYPT_USER_MAIL: $USER_EMAIL" while read-0 key value; do config+="$(printf "\n %s: %s" "$key" "$value")" done < <(yaml_opt_bash_env_ignore_first_level LEXICON < <(echo "$service_def" | shyaml -y get-value options)) ## XXXvlab: this is very temporary, we should change image to support more ## than one provider (cf: https://github.com/adferrand/docker-letsencrypt-dns/issues/24) first_key= while read-0 key value; do [[ "$(echo "$value" | shyaml get-type)" == "struct" ]] && { first_key="$key" break } done < <(echo "$service_def" | shyaml key-values-0 options) config+=$(echo -en "\n LEXICON_PROVIDER: $first_key") init-config-add "$config" mkdir -p "$SERVICE_DATASTORE/etc/letsencrypt" touch "$SERVICE_DATASTORE/etc/letsencrypt/domains.conf"