40 lines
1.1 KiB
Bash
Executable file
40 lines
1.1 KiB
Bash
Executable file
#!/bin/sh
|
|
set -eu
|
|
|
|
SOCKET="${SOZU_SOCKET:-/var/run/sozu/sozu.sock}"
|
|
TLS_DIR="${TLS_DIR:-/etc/sozu/tls}"
|
|
SOZU_ROUTES="${SOZU_ROUTES:-}"
|
|
|
|
reload_all_certs() {
|
|
echo "[sozuctl-sidecar] cert change detected, reloading"
|
|
for host in $(echo "$SOZU_ROUTES" | tr ',' ' '); do
|
|
cert="$TLS_DIR/$host/tls.crt"
|
|
key="$TLS_DIR/$host/tls.key"
|
|
[ -f "$cert" ] && [ -f "$key" ] || continue
|
|
sozuctl --socket "$SOCKET" certificate replace \
|
|
--certificate "$cert" \
|
|
--key "$key" \
|
|
--hostname "$host" 2>&1 || \
|
|
echo "[sozuctl-sidecar] WARN: replace failed for $host"
|
|
done
|
|
}
|
|
|
|
wait_for_socket() {
|
|
local retries=30
|
|
while [ ! -S "$SOCKET" ] && [ $retries -gt 0 ]; do
|
|
sleep 1
|
|
retries=$((retries - 1))
|
|
done
|
|
[ -S "$SOCKET" ] || { echo "[sozuctl-sidecar] ERROR: socket $SOCKET not found after 30s" >&2; exit 1; }
|
|
}
|
|
|
|
wait_for_socket
|
|
reload_all_certs
|
|
|
|
inotifywait -m -r -e close_write,moved_to --format '%w%f' "$TLS_DIR" | while read -r changed_file; do
|
|
case "$changed_file" in
|
|
*.crt|*.key)
|
|
reload_all_certs
|
|
;;
|
|
esac
|
|
done
|