|
|
@ -0,0 +1,35 @@ |
|
|
|
#!/bin/bash |
|
|
|
|
|
|
|
## When writing relation script, remember: |
|
|
|
## - they should be idempotents |
|
|
|
## - they can be launched while the dockers is already up |
|
|
|
## - they are launched from the host |
|
|
|
## - the target of the link is launched first, and get a chance to ``relation-set`` |
|
|
|
## - both side of the scripts get to use ``relation-get``. |
|
|
|
|
|
|
|
set -e |
|
|
|
|
|
|
|
label=${SERVICE_NAME}-renew |
|
|
|
DST=$CONFIGSTORE/$TARGET_SERVICE_NAME/etc/cron/$label |
|
|
|
LOCAL_LOG=/var/log/cron/${label}_script.log |
|
|
|
schedule=$(relation-get schedule) |
|
|
|
|
|
|
|
if ! echo "$schedule" | egrep '^\s*(([0-9/,*-]+\s+){4,4}[0-9/,*-]+|@[a-z]+)\s*$' >/dev/null 2>&1; then |
|
|
|
err "Unrecognized schedule '$schedule'." |
|
|
|
exit 1 |
|
|
|
fi |
|
|
|
|
|
|
|
## Warning: using '\' in heredoc will be removed in the final cron file, which |
|
|
|
## is totally wanted: cron does not support multilines. |
|
|
|
|
|
|
|
## Warning: 'docker -v' will use HOST directory even if launched from |
|
|
|
## 'cron' container. |
|
|
|
file_put "$DST" <<EOF |
|
|
|
$schedule root lock $label -D -p 10 -c "\ |
|
|
|
docker run --rm \ |
|
|
|
-v $BASE_CHARM_PATH/etc/letsencrypt:/etc/letsencrypt:rw \ |
|
|
|
-v $BASE_CHARM_PATH/var/log/letsencrypt:/var/log/letsencrypt:rw \ |
|
|
|
-v $BASE_CHARM_PATH/var/lib/tldextract:/var/lib/tldextract:rw \ |
|
|
|
\"$DOCKER_BASE_IMAGE\" crt renew" 2>&1 | ts '\%F \%T \%Z' >> $LOCAL_LOG |
|
|
|
EOF |
|
|
|
chmod +x "$DST" |