monitoring: add WireGuard key expiry reminders for voidstash GL.iNet
Posts to #infrastructure-alerts via Slack bot on escalating schedule: - 2027-03-11: 1 month out - 2027-03-25, 04-01, 04-04: weekly - 2027-04-05 through 04-10: daily Key: neural_net-US-IL-267, expires 2027-04-11
This commit is contained in:
@@ -0,0 +1,273 @@
|
||||
# WireGuard key expiry reminders — voidstash GL.iNet router key expires 2027-04-11
|
||||
# Schedule: 1 month out, then weekly, then daily in the last week
|
||||
# Posts to #infrastructure-alerts via Slack bot token from Vault
|
||||
#
|
||||
# To renew: ProtonVPN dashboard → WireGuard → neural_net-US-IL-267 → delete & regenerate
|
||||
# Then re-add to GL.iNet router WireGuard Client page
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: ServiceAccount
|
||||
metadata:
|
||||
name: wireguard-reminder
|
||||
namespace: monitoring
|
||||
---
|
||||
apiVersion: external-secrets.io/v1beta1
|
||||
kind: ExternalSecret
|
||||
metadata:
|
||||
name: wireguard-reminder-slack
|
||||
namespace: monitoring
|
||||
spec:
|
||||
refreshInterval: 1h
|
||||
secretStoreRef:
|
||||
name: vault
|
||||
kind: ClusterSecretStore
|
||||
target:
|
||||
name: wireguard-reminder-slack
|
||||
creationPolicy: Owner
|
||||
data:
|
||||
- secretKey: bot_token
|
||||
remoteRef:
|
||||
key: secret/data/slack
|
||||
property: bot_token
|
||||
---
|
||||
# Template for all reminder jobs — actual CronJobs below reference this pattern
|
||||
# Reminder script: posts to Slack with urgency based on days remaining
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: wireguard-reminder-script
|
||||
namespace: monitoring
|
||||
data:
|
||||
notify.sh: |
|
||||
#!/bin/sh
|
||||
CHANNEL="C0AND3S44CE"
|
||||
EXPIRY="2027-04-11"
|
||||
TODAY=$(date +%Y-%m-%d)
|
||||
DAYS=$(( ($(date -d "$EXPIRY" +%s 2>/dev/null || date -j -f "%Y-%m-%d" "$EXPIRY" +%s) - $(date +%s)) / 86400 ))
|
||||
|
||||
if [ "$DAYS" -le 7 ]; then
|
||||
EMOJI=":rotating_light:"
|
||||
URGENCY="*URGENT — $DAYS days left*"
|
||||
elif [ "$DAYS" -le 14 ]; then
|
||||
EMOJI=":warning:"
|
||||
URGENCY="*$DAYS days left*"
|
||||
else
|
||||
EMOJI=":bell:"
|
||||
URGENCY="$DAYS days left"
|
||||
fi
|
||||
|
||||
curl -s -X POST "https://slack.com/api/chat.postMessage" \
|
||||
-H "Authorization: Bearer $(cat /etc/slack/bot_token)" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{
|
||||
\"channel\": \"$CHANNEL\",
|
||||
\"text\": \"$EMOJI *WireGuard key expiry reminder* — $URGENCY\",
|
||||
\"blocks\": [{
|
||||
\"type\": \"section\",
|
||||
\"text\": {
|
||||
\"type\": \"mrkdwn\",
|
||||
\"text\": \"$EMOJI *ProtonVPN WireGuard key expiring soon*\n$URGENCY · expires $EXPIRY\n\n*Key:* \`neural_net-US-IL-267\` on GL.iNet home router\n\n*To renew:* ProtonVPN dashboard → WireGuard → delete \`neural_net-US-IL-267\` → generate new config → re-add to GL.iNet\"
|
||||
}
|
||||
}]
|
||||
}"
|
||||
echo "Notified Slack — $DAYS days until expiry"
|
||||
---
|
||||
# 1 month out: March 11, 2027
|
||||
apiVersion: batch/v1
|
||||
kind: CronJob
|
||||
metadata:
|
||||
name: wireguard-reminder-1month
|
||||
namespace: monitoring
|
||||
spec:
|
||||
schedule: "0 9 11 3 *"
|
||||
jobTemplate:
|
||||
spec:
|
||||
template:
|
||||
spec:
|
||||
serviceAccountName: wireguard-reminder
|
||||
restartPolicy: OnFailure
|
||||
containers:
|
||||
- name: notify
|
||||
image: alpine:latest
|
||||
command: ["sh", "/scripts/notify.sh"]
|
||||
volumeMounts:
|
||||
- name: script
|
||||
mountPath: /scripts
|
||||
- name: slack-token
|
||||
mountPath: /etc/slack
|
||||
readOnly: true
|
||||
resources:
|
||||
requests:
|
||||
memory: 16Mi
|
||||
cpu: 10m
|
||||
limits:
|
||||
memory: 64Mi
|
||||
cpu: 50m
|
||||
volumes:
|
||||
- name: script
|
||||
configMap:
|
||||
name: wireguard-reminder-script
|
||||
defaultMode: 0755
|
||||
- name: slack-token
|
||||
secret:
|
||||
secretName: wireguard-reminder-slack
|
||||
---
|
||||
# Weekly: March 25, 2027
|
||||
apiVersion: batch/v1
|
||||
kind: CronJob
|
||||
metadata:
|
||||
name: wireguard-reminder-week3
|
||||
namespace: monitoring
|
||||
spec:
|
||||
schedule: "0 9 25 3 *"
|
||||
jobTemplate:
|
||||
spec:
|
||||
template:
|
||||
spec:
|
||||
serviceAccountName: wireguard-reminder
|
||||
restartPolicy: OnFailure
|
||||
containers:
|
||||
- name: notify
|
||||
image: alpine:latest
|
||||
command: ["sh", "/scripts/notify.sh"]
|
||||
volumeMounts:
|
||||
- name: script
|
||||
mountPath: /scripts
|
||||
- name: slack-token
|
||||
mountPath: /etc/slack
|
||||
readOnly: true
|
||||
resources:
|
||||
requests:
|
||||
memory: 16Mi
|
||||
cpu: 10m
|
||||
limits:
|
||||
memory: 64Mi
|
||||
cpu: 50m
|
||||
volumes:
|
||||
- name: script
|
||||
configMap:
|
||||
name: wireguard-reminder-script
|
||||
defaultMode: 0755
|
||||
- name: slack-token
|
||||
secret:
|
||||
secretName: wireguard-reminder-slack
|
||||
---
|
||||
# Weekly: April 1, 2027
|
||||
apiVersion: batch/v1
|
||||
kind: CronJob
|
||||
metadata:
|
||||
name: wireguard-reminder-week2
|
||||
namespace: monitoring
|
||||
spec:
|
||||
schedule: "0 9 1 4 *"
|
||||
jobTemplate:
|
||||
spec:
|
||||
template:
|
||||
spec:
|
||||
serviceAccountName: wireguard-reminder
|
||||
restartPolicy: OnFailure
|
||||
containers:
|
||||
- name: notify
|
||||
image: alpine:latest
|
||||
command: ["sh", "/scripts/notify.sh"]
|
||||
volumeMounts:
|
||||
- name: script
|
||||
mountPath: /scripts
|
||||
- name: slack-token
|
||||
mountPath: /etc/slack
|
||||
readOnly: true
|
||||
resources:
|
||||
requests:
|
||||
memory: 16Mi
|
||||
cpu: 10m
|
||||
limits:
|
||||
memory: 64Mi
|
||||
cpu: 50m
|
||||
volumes:
|
||||
- name: script
|
||||
configMap:
|
||||
name: wireguard-reminder-script
|
||||
defaultMode: 0755
|
||||
- name: slack-token
|
||||
secret:
|
||||
secretName: wireguard-reminder-slack
|
||||
---
|
||||
# Weekly: April 4, 2027
|
||||
apiVersion: batch/v1
|
||||
kind: CronJob
|
||||
metadata:
|
||||
name: wireguard-reminder-week1
|
||||
namespace: monitoring
|
||||
spec:
|
||||
schedule: "0 9 4 4 *"
|
||||
jobTemplate:
|
||||
spec:
|
||||
template:
|
||||
spec:
|
||||
serviceAccountName: wireguard-reminder
|
||||
restartPolicy: OnFailure
|
||||
containers:
|
||||
- name: notify
|
||||
image: alpine:latest
|
||||
command: ["sh", "/scripts/notify.sh"]
|
||||
volumeMounts:
|
||||
- name: script
|
||||
mountPath: /scripts
|
||||
- name: slack-token
|
||||
mountPath: /etc/slack
|
||||
readOnly: true
|
||||
resources:
|
||||
requests:
|
||||
memory: 16Mi
|
||||
cpu: 10m
|
||||
limits:
|
||||
memory: 64Mi
|
||||
cpu: 50m
|
||||
volumes:
|
||||
- name: script
|
||||
configMap:
|
||||
name: wireguard-reminder-script
|
||||
defaultMode: 0755
|
||||
- name: slack-token
|
||||
secret:
|
||||
secretName: wireguard-reminder-slack
|
||||
---
|
||||
# Daily April 5-10: run every day in April, script computes days remaining
|
||||
apiVersion: batch/v1
|
||||
kind: CronJob
|
||||
metadata:
|
||||
name: wireguard-reminder-daily
|
||||
namespace: monitoring
|
||||
spec:
|
||||
schedule: "0 9 5-10 4 *"
|
||||
jobTemplate:
|
||||
spec:
|
||||
template:
|
||||
spec:
|
||||
serviceAccountName: wireguard-reminder
|
||||
restartPolicy: OnFailure
|
||||
containers:
|
||||
- name: notify
|
||||
image: alpine:latest
|
||||
command: ["sh", "/scripts/notify.sh"]
|
||||
volumeMounts:
|
||||
- name: script
|
||||
mountPath: /scripts
|
||||
- name: slack-token
|
||||
mountPath: /etc/slack
|
||||
readOnly: true
|
||||
resources:
|
||||
requests:
|
||||
memory: 16Mi
|
||||
cpu: 10m
|
||||
limits:
|
||||
memory: 64Mi
|
||||
cpu: 50m
|
||||
volumes:
|
||||
- name: script
|
||||
configMap:
|
||||
name: wireguard-reminder-script
|
||||
defaultMode: 0755
|
||||
- name: slack-token
|
||||
secret:
|
||||
secretName: wireguard-reminder-slack
|
||||
Reference in New Issue
Block a user