Browse Source

new: [letsencrypt] new charm.

postgres
Valentin Lab 6 years ago
parent
commit
9411afab56
  1. 46
      letsencrypt/actions/add
  2. 71
      letsencrypt/hooks/init
  3. 7
      letsencrypt/metadata.yml

46
letsencrypt/actions/add

@ -0,0 +1,46 @@
#!/bin/bash
## Load action gets a first argument a DIRECTORY holding the necessary files.
##
##
if [ -z "$SERVICE_DATASTORE" ]; then
echo "This script is meant to be run through 'compose' to work properly." >&2
exit 1
fi
usage="$exname [-h|--help] DOMAIN [DOMAIN...]"
domains=()
while [ "$1" ]; do
case "$1" in
"--help"|"-h")
print_usage
exit 0
;;
--*|-*)
err "Unexpected optional argument '$1'"
print_usage
exit 1
;;
*)
domains+=("$1")
;;
esac
shift
done
if [ -z "${domains[*]}" ]; then
err "You must provide at least one domain as positional argument."
print_usage
exit 1
fi
set -e
## XXXvlab: should check that domain can be declared (with whois, check that the
## registrar is a provider that have config values declared in compose.conf)
mkdir -p "$SERVICE_DATASTORE/etc/letsencrypt"
echo "${domains[@]}" >> "$SERVICE_DATASTORE/etc/letsencrypt/domains.conf"
info "Added '${domains[*]}' domains to letsencrypt domain lists."

71
letsencrypt/hooks/init

@ -0,0 +1,71 @@
#!/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"

7
letsencrypt/metadata.yml

@ -0,0 +1,7 @@
description: "Let's Encrypt"
maintainer: "Valentin Lab <valentin.lab@kalysto.org>"
## XXXvlab: docker uses the 'build' directory or the 'image:' option here.
docker-image: adferrand/letsencrypt-dns
data-resources:
- /etc/letsencrypt
- /var/log/letsencrypt
Loading…
Cancel
Save