Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save dginhoux/5efeeb9308d35711485a960d27439982 to your computer and use it in GitHub Desktop.

Select an option

Save dginhoux/5efeeb9308d35711485a960d27439982 to your computer and use it in GitHub Desktop.
#!/usr/bin/env bash
set -euo pipefail
LEGO_INSTANCE="lego-ginhoux-net"
LEGO_DOMAINS="*.ginhoux.net"
LEGO_EMAIL="[email protected]"
LEGO_DNS="infomaniak"
# LEGO_KEY_TYPE="rsa4096"
LEGO_KEY_TYPE="ec384"
LEGO_DNS_RESOLVERS="nsany1.infomaniak.com:53,nsany2.infomaniak.com:53"
LEGO_DNS_TIMEOUT="180"
LEGO_CERT_PATH="/certs"
LEGO_DAYS_BEFORE_RENEW="5"
# LEGO_SERVER="https://acme-staging-v02.api.letsencrypt.org/directory"
LEGO_SERVER="https://acme-v02.api.letsencrypt.org/directory"
LEGO_INFOMANIAK_ENDPOINT="https://api.infomaniak.com"
LEGO_INFOMANIAK_ACCESS_TOKEN="ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"
LEGO_INFOMANIAK_HTTP_TIMEOUT="90"
LEGO_INFOMANIAK_POLLING_INTERVAL="10"
LEGO_INFOMANIAK_PROPAGATION_TIMEOUT="600"
LEGO_INFOMANIAK_TTL="600"
LEGO_LEGO_DISABLE_CNAME_SUPPORT="true"
DOCKER_SVC="${LEGO_INSTANCE}"
DOCKER_DATA_PATH="/mnt/gfs_lv_swarm_prod0/certbot"
# DOCKER_HOST="tcp://socket:2375"
DOCKER_HOST="unix:///var/run/host_docker.sock"
DOCKER_CONSTRAINT="node.role==worker"
# DOCKER_NET="postgres_shared"
DOCKER_IMAGE="registry.infra.ginhoux.net:5000/goacme/lego:v4.27.0"
# cleanup
/usr/bin/docker --host ${DOCKER_HOST} service rm "${DOCKER_SVC}" || true
# create task
/usr/bin/docker --host ${DOCKER_HOST} service create \
--name "${DOCKER_SVC}" \
--detach=true \
--mode replicated --replicas 1 \
--restart-condition=none \
--constraint "${DOCKER_CONSTRAINT}" \
--mount type=bind,src=${DOCKER_DATA_PATH}/${LEGO_INSTANCE}-conf,dst=/certs \
--mount type=bind,src=${DOCKER_DATA_PATH}/lego-certs,dst=/certs/certificates \
--mount type=bind,src=${DOCKER_DATA_PATH}/lego.sh,dst=/lego.sh \
-e DOMAINS="${LEGO_DOMAINS}" \
-e EMAIL="${LEGO_EMAIL}" \
-e DNS="${LEGO_DNS}" \
-e KEY_TYPE="${LEGO_KEY_TYPE}" \
-e DNS_RESOLVERS="${LEGO_DNS_RESOLVERS}" \
-e DNS_TIMEOUT="${LEGO_DNS_TIMEOUT}" \
-e CERT_PATH="${LEGO_CERT_PATH}" \
-e DAYS_BEFORE_RENEW="${LEGO_DAYS_BEFORE_RENEW}" \
-e SERVER="${LEGO_SERVER}" \
-e INFOMANIAK_ENDPOINT="${LEGO_INFOMANIAK_ENDPOINT}" \
-e INFOMANIAK_ACCESS_TOKEN="${LEGO_INFOMANIAK_ACCESS_TOKEN}" \
-e INFOMANIAK_HTTP_TIMEOUT="${LEGO_INFOMANIAK_HTTP_TIMEOUT}" \
-e INFOMANIAK_POLLING_INTERVAL="${LEGO_INFOMANIAK_POLLING_INTERVAL}" \
-e INFOMANIAK_PROPAGATION_TIMEOUT="${LEGO_INFOMANIAK_PROPAGATION_TIMEOUT}" \
-e INFOMANIAK_TTL="${LEGO_INFOMANIAK_TTL}" \
-e LEGO_DISABLE_CNAME_SUPPORT="${LEGO_LEGO_DISABLE_CNAME_SUPPORT}" \
--entrypoint="sh /lego.sh" \
${DOCKER_IMAGE}
# wait for the single task to complete and capture exit code swarm sets DesiredState=shutdown when the task exit
task_id=""
while [ -z "$task_id" ]; do
task_id="$(/usr/bin/docker --host ${DOCKER_HOST} service ps --no-trunc --filter desired-state=shutdown -q "${DOCKER_SVC}" || true)"
sleep 1
done
# exitcode="$(/usr/bin/docker --host ${DOCKER_HOST} inspect -f '{{.Status.ContainerStatus.ExitCode}}' "$task_id")"
logs="$(/usr/bin/docker --host ${DOCKER_HOST} service logs --raw "${DOCKER_SVC}" || true)"
# cleanup
/usr/bin/docker --host ${DOCKER_HOST} service rm "${DOCKER_SVC}" || true
echo "$logs"
# exit "$exitcode"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment