48 lines
1.2 KiB
Django/Jinja
48 lines
1.2 KiB
Django/Jinja
apiVersion: v1
|
|
kind: ConfigMap
|
|
metadata:
|
|
name: dkim-publisher-script
|
|
namespace: {{ taskserv.namespace | default(value="mail") }}
|
|
data:
|
|
dkim-publish.sh: |
|
|
#!/bin/bash
|
|
set -euo pipefail
|
|
domain=$1; selector=$2; ns=$3
|
|
key_file="/tmp/docker-mailserver/opendkim/keys/${domain}/${selector}.txt"
|
|
|
|
apply_dkim() {
|
|
local key=$1
|
|
kubectl apply -f - <<EOF
|
|
apiVersion: externaldns.k8s.io/v1alpha1
|
|
kind: DNSEndpoint
|
|
metadata:
|
|
name: docker-mailserver-dkim-${selector}
|
|
namespace: ${ns}
|
|
labels:
|
|
external-dns.alpha.kubernetes.io/managed-by: docker-mailserver
|
|
spec:
|
|
endpoints:
|
|
- dnsName: ${selector}._domainkey.${domain}
|
|
recordType: TXT
|
|
targets: ["${key}"]
|
|
recordTTL: 300
|
|
EOF
|
|
}
|
|
|
|
extract_key() {
|
|
awk -F'"' '/p=/{for(i=2;i<=NF;i+=2) printf "%s", $i}' "$1" | tr -d ' \t\n()'
|
|
}
|
|
|
|
while [ ! -f "$key_file" ]; do sleep 5; done
|
|
|
|
key=$(extract_key "$key_file")
|
|
apply_dkim "$key"
|
|
|
|
while true; do
|
|
sleep 3600
|
|
current=$(extract_key "$key_file")
|
|
if [ "$current" != "$key" ]; then
|
|
key="$current"
|
|
apply_dkim "$key"
|
|
fi
|
|
done
|