From fe8d4976edd7e2825bd207478ce30f050f98a8f1 Mon Sep 17 00:00:00 2001
From: sstent
Date: Fri, 21 Nov 2025 13:07:40 -0800
Subject: [PATCH] first commit
---
.github/workflows/backup.yml | 55 ++
backup.py | 244 +++++++
nomad_backup/20251115_141532/acme.json | 385 +++++++++++
nomad_backup/20251115_141532/auth.json | 304 ++++++++
.../20251115_141532/calendar-proxy.json | 406 +++++++++++
.../20251115_141532/democratic-csi-local.json | 339 +++++++++
nomad_backup/20251115_141532/foodplanner.json | 405 +++++++++++
nomad_backup/20251115_141532/gonic.json | 542 +++++++++++++++
nomad_backup/20251115_141532/hass.json | 536 +++++++++++++++
nomad_backup/20251115_141532/immich.json | 414 +++++++++++
nomad_backup/20251115_141532/miniflux.json | 240 +++++++
nomad_backup/20251115_141532/minihass.json | 254 +++++++
nomad_backup/20251115_141532/navidrome.json | 439 ++++++++++++
nomad_backup/20251115_141532/nginx.json | 292 ++++++++
nomad_backup/20251115_141532/nzbget.json | 650 ++++++++++++++++++
nomad_backup/20251115_141532/postgres-15.json | 203 ++++++
nomad_backup/20251115_141532/prometheus.json | 565 +++++++++++++++
nomad_backup/20251115_141532/prowlarr.json | 377 ++++++++++
nomad_backup/20251115_141532/qautomate.json | 233 +++++++
.../qautomate_periodic-1763231400.json | 226 ++++++
.../qautomate_periodic-1763233200.json | 226 ++++++
.../qautomate_periodic-1763235000.json | 226 ++++++
.../qautomate_periodic-1763236800.json | 226 ++++++
.../qautomate_periodic-1763238600.json | 226 ++++++
.../qautomate_periodic-1763240400.json | 226 ++++++
.../qautomate_periodic-1763242200.json | 226 ++++++
.../qautomate_periodic-1763244000.json | 226 ++++++
nomad_backup/20251115_141532/qbittorrent.json | 593 ++++++++++++++++
nomad_backup/20251115_141532/radarr.json | 342 +++++++++
nomad_backup/20251115_141532/slskd.json | 331 +++++++++
nomad_backup/20251115_141532/sonarr.json | 333 +++++++++
nomad_backup/20251115_141532/traefik.json | 391 +++++++++++
nomad_backup/20251115_141532/trilium.json | 424 ++++++++++++
nomad_backup/20251115_141532/vaultwarden.json | 542 +++++++++++++++
nomad_backup/20251115_141532/wallabag.json | 242 +++++++
nomad_backup/20251115_141532/wireguard.json | 259 +++++++
nomad_backup/20251115_142246/acme.json | 10 +
nomad_backup/20251115_142246/auth.json | 10 +
.../20251115_142246/calendar-proxy.json | 10 +
.../20251115_142246/democratic-csi-local.json | 10 +
nomad_backup/20251115_142246/foodplanner.json | 10 +
nomad_backup/20251115_142246/gonic.json | 10 +
nomad_backup/20251115_142246/hass.json | 10 +
nomad_backup/20251115_142246/immich.json | 10 +
nomad_backup/20251115_142246/minihass.json | 10 +
nomad_backup/20251115_142246/navidrome.json | 10 +
nomad_backup/20251115_142246/nginx.json | 10 +
nomad_backup/20251115_142246/nzbget.json | 10 +
nomad_backup/20251115_142246/postgres-15.json | 10 +
nomad_backup/20251115_142246/prometheus.json | 10 +
nomad_backup/20251115_142246/prowlarr.json | 10 +
nomad_backup/20251115_142246/qautomate.json | 10 +
nomad_backup/20251115_142246/qbittorrent.json | 10 +
nomad_backup/20251115_142246/radarr.json | 10 +
nomad_backup/20251115_142246/slskd.json | 10 +
nomad_backup/20251115_142246/sonarr.json | 10 +
nomad_backup/20251115_142246/traefik.json | 10 +
nomad_backup/20251115_142246/trilium.json | 10 +
nomad_backup/20251115_142246/vaultwarden.json | 10 +
nomad_backup/20251115_142246/wallabag.json | 10 +
nomad_backup/20251115_142246/wireguard.json | 10 +
nomad_backup/20251115_142432/acme.hcl | 99 +++
nomad_backup/20251115_142432/auth.hcl | 89 +++
.../20251115_142432/calendar-proxy.hcl | 228 ++++++
.../20251115_142432/democratic-csi-local.hcl | 105 +++
nomad_backup/20251115_142432/foodplanner.hcl | 99 +++
nomad_backup/20251115_142432/gonic.hcl | 151 ++++
nomad_backup/20251115_142432/hass.hcl | 285 ++++++++
nomad_backup/20251115_142432/immich.hcl | 151 ++++
nomad_backup/20251115_142432/minihass.hcl | 48 ++
nomad_backup/20251115_142432/navidrome.hcl | 118 ++++
nomad_backup/20251115_142432/nginx.hcl | 93 +++
nomad_backup/20251115_142432/nzbget.hcl | 305 ++++++++
nomad_backup/20251115_142432/postgres-15.hcl | 116 ++++
nomad_backup/20251115_142432/prometheus.hcl | 195 ++++++
nomad_backup/20251115_142432/prowlarr.hcl | 138 ++++
nomad_backup/20251115_142432/qautomate.hcl | 59 ++
nomad_backup/20251115_142432/qbittorrent.hcl | 351 ++++++++++
nomad_backup/20251115_142432/radarr.hcl | 156 +++++
nomad_backup/20251115_142432/slskd.hcl | 149 ++++
nomad_backup/20251115_142432/sonarr.hcl | 158 +++++
nomad_backup/20251115_142432/traefik.hcl | 218 ++++++
nomad_backup/20251115_142432/trilium.hcl | 106 +++
nomad_backup/20251115_142432/vaultwarden.hcl | 231 +++++++
nomad_backup/20251115_142432/wallabag.hcl | 85 +++
nomad_backup/20251115_142432/wireguard.hcl | 65 ++
nomad_backup/20251115_142628/acme.hcl | 99 +++
nomad_backup/20251115_142628/auth.hcl | 89 +++
.../20251115_142628/calendar-proxy.hcl | 228 ++++++
.../20251115_142628/democratic-csi-local.hcl | 105 +++
nomad_backup/20251115_142628/foodplanner.hcl | 99 +++
nomad_backup/20251115_142628/gonic.hcl | 151 ++++
nomad_backup/20251115_142628/hass.hcl | 285 ++++++++
nomad_backup/20251115_142628/immich.hcl | 151 ++++
nomad_backup/20251115_142628/minihass.hcl | 48 ++
nomad_backup/20251115_142628/navidrome.hcl | 118 ++++
nomad_backup/20251115_142628/nginx.hcl | 93 +++
nomad_backup/20251115_142628/nzbget.hcl | 305 ++++++++
nomad_backup/20251115_142628/postgres-15.hcl | 116 ++++
nomad_backup/20251115_142628/prometheus.hcl | 195 ++++++
nomad_backup/20251115_142628/prowlarr.hcl | 138 ++++
nomad_backup/20251115_142628/qautomate.hcl | 59 ++
nomad_backup/20251115_142628/qbittorrent.hcl | 351 ++++++++++
nomad_backup/20251115_142628/radarr.hcl | 156 +++++
nomad_backup/20251115_142628/slskd.hcl | 149 ++++
nomad_backup/20251115_142628/sonarr.hcl | 158 +++++
nomad_backup/20251115_142628/traefik.hcl | 218 ++++++
nomad_backup/20251115_142628/trilium.hcl | 106 +++
nomad_backup/20251115_142628/vaultwarden.hcl | 231 +++++++
nomad_backup/20251115_142628/wallabag.hcl | 85 +++
nomad_backup/20251115_142628/wireguard.hcl | 65 ++
nomad_backup/20251115_143630/acme.hcl | 99 +++
nomad_backup/20251115_143630/auth.hcl | 89 +++
.../20251115_143630/calendar-proxy.hcl | 228 ++++++
.../20251115_143630/democratic-csi-local.hcl | 105 +++
nomad_backup/20251115_143630/foodplanner.hcl | 99 +++
nomad_backup/20251115_143630/gonic.hcl | 151 ++++
nomad_backup/20251115_143630/hass.hcl | 285 ++++++++
nomad_backup/20251115_143630/immich.hcl | 151 ++++
nomad_backup/20251115_143630/miniflux.hcl | 77 +++
nomad_backup/20251115_143630/minihass.hcl | 48 ++
nomad_backup/20251115_143630/navidrome.hcl | 118 ++++
nomad_backup/20251115_143630/nginx.hcl | 93 +++
nomad_backup/20251115_143630/nzbget.hcl | 305 ++++++++
nomad_backup/20251115_143630/postgres-15.hcl | 116 ++++
nomad_backup/20251115_143630/prometheus.hcl | 195 ++++++
nomad_backup/20251115_143630/prowlarr.hcl | 138 ++++
nomad_backup/20251115_143630/qautomate.hcl | 59 ++
nomad_backup/20251115_143630/qbittorrent.hcl | 351 ++++++++++
nomad_backup/20251115_143630/radarr.hcl | 156 +++++
nomad_backup/20251115_143630/slskd.hcl | 149 ++++
nomad_backup/20251115_143630/sonarr.hcl | 158 +++++
nomad_backup/20251115_143630/traefik.hcl | 218 ++++++
nomad_backup/20251115_143630/trilium.hcl | 106 +++
nomad_backup/20251115_143630/vaultwarden.hcl | 231 +++++++
nomad_backup/20251115_143630/wallabag.hcl | 85 +++
nomad_backup/20251115_143630/wireguard.hcl | 65 ++
137 files changed, 23869 insertions(+)
create mode 100644 .github/workflows/backup.yml
create mode 100644 backup.py
create mode 100644 nomad_backup/20251115_141532/acme.json
create mode 100644 nomad_backup/20251115_141532/auth.json
create mode 100644 nomad_backup/20251115_141532/calendar-proxy.json
create mode 100644 nomad_backup/20251115_141532/democratic-csi-local.json
create mode 100644 nomad_backup/20251115_141532/foodplanner.json
create mode 100644 nomad_backup/20251115_141532/gonic.json
create mode 100644 nomad_backup/20251115_141532/hass.json
create mode 100644 nomad_backup/20251115_141532/immich.json
create mode 100644 nomad_backup/20251115_141532/miniflux.json
create mode 100644 nomad_backup/20251115_141532/minihass.json
create mode 100644 nomad_backup/20251115_141532/navidrome.json
create mode 100644 nomad_backup/20251115_141532/nginx.json
create mode 100644 nomad_backup/20251115_141532/nzbget.json
create mode 100644 nomad_backup/20251115_141532/postgres-15.json
create mode 100644 nomad_backup/20251115_141532/prometheus.json
create mode 100644 nomad_backup/20251115_141532/prowlarr.json
create mode 100644 nomad_backup/20251115_141532/qautomate.json
create mode 100644 nomad_backup/20251115_141532/qautomate_periodic-1763231400.json
create mode 100644 nomad_backup/20251115_141532/qautomate_periodic-1763233200.json
create mode 100644 nomad_backup/20251115_141532/qautomate_periodic-1763235000.json
create mode 100644 nomad_backup/20251115_141532/qautomate_periodic-1763236800.json
create mode 100644 nomad_backup/20251115_141532/qautomate_periodic-1763238600.json
create mode 100644 nomad_backup/20251115_141532/qautomate_periodic-1763240400.json
create mode 100644 nomad_backup/20251115_141532/qautomate_periodic-1763242200.json
create mode 100644 nomad_backup/20251115_141532/qautomate_periodic-1763244000.json
create mode 100644 nomad_backup/20251115_141532/qbittorrent.json
create mode 100644 nomad_backup/20251115_141532/radarr.json
create mode 100644 nomad_backup/20251115_141532/slskd.json
create mode 100644 nomad_backup/20251115_141532/sonarr.json
create mode 100644 nomad_backup/20251115_141532/traefik.json
create mode 100644 nomad_backup/20251115_141532/trilium.json
create mode 100644 nomad_backup/20251115_141532/vaultwarden.json
create mode 100644 nomad_backup/20251115_141532/wallabag.json
create mode 100644 nomad_backup/20251115_141532/wireguard.json
create mode 100644 nomad_backup/20251115_142246/acme.json
create mode 100644 nomad_backup/20251115_142246/auth.json
create mode 100644 nomad_backup/20251115_142246/calendar-proxy.json
create mode 100644 nomad_backup/20251115_142246/democratic-csi-local.json
create mode 100644 nomad_backup/20251115_142246/foodplanner.json
create mode 100644 nomad_backup/20251115_142246/gonic.json
create mode 100644 nomad_backup/20251115_142246/hass.json
create mode 100644 nomad_backup/20251115_142246/immich.json
create mode 100644 nomad_backup/20251115_142246/minihass.json
create mode 100644 nomad_backup/20251115_142246/navidrome.json
create mode 100644 nomad_backup/20251115_142246/nginx.json
create mode 100644 nomad_backup/20251115_142246/nzbget.json
create mode 100644 nomad_backup/20251115_142246/postgres-15.json
create mode 100644 nomad_backup/20251115_142246/prometheus.json
create mode 100644 nomad_backup/20251115_142246/prowlarr.json
create mode 100644 nomad_backup/20251115_142246/qautomate.json
create mode 100644 nomad_backup/20251115_142246/qbittorrent.json
create mode 100644 nomad_backup/20251115_142246/radarr.json
create mode 100644 nomad_backup/20251115_142246/slskd.json
create mode 100644 nomad_backup/20251115_142246/sonarr.json
create mode 100644 nomad_backup/20251115_142246/traefik.json
create mode 100644 nomad_backup/20251115_142246/trilium.json
create mode 100644 nomad_backup/20251115_142246/vaultwarden.json
create mode 100644 nomad_backup/20251115_142246/wallabag.json
create mode 100644 nomad_backup/20251115_142246/wireguard.json
create mode 100644 nomad_backup/20251115_142432/acme.hcl
create mode 100644 nomad_backup/20251115_142432/auth.hcl
create mode 100644 nomad_backup/20251115_142432/calendar-proxy.hcl
create mode 100644 nomad_backup/20251115_142432/democratic-csi-local.hcl
create mode 100644 nomad_backup/20251115_142432/foodplanner.hcl
create mode 100644 nomad_backup/20251115_142432/gonic.hcl
create mode 100644 nomad_backup/20251115_142432/hass.hcl
create mode 100644 nomad_backup/20251115_142432/immich.hcl
create mode 100644 nomad_backup/20251115_142432/minihass.hcl
create mode 100644 nomad_backup/20251115_142432/navidrome.hcl
create mode 100644 nomad_backup/20251115_142432/nginx.hcl
create mode 100644 nomad_backup/20251115_142432/nzbget.hcl
create mode 100644 nomad_backup/20251115_142432/postgres-15.hcl
create mode 100644 nomad_backup/20251115_142432/prometheus.hcl
create mode 100644 nomad_backup/20251115_142432/prowlarr.hcl
create mode 100644 nomad_backup/20251115_142432/qautomate.hcl
create mode 100644 nomad_backup/20251115_142432/qbittorrent.hcl
create mode 100644 nomad_backup/20251115_142432/radarr.hcl
create mode 100644 nomad_backup/20251115_142432/slskd.hcl
create mode 100644 nomad_backup/20251115_142432/sonarr.hcl
create mode 100644 nomad_backup/20251115_142432/traefik.hcl
create mode 100644 nomad_backup/20251115_142432/trilium.hcl
create mode 100644 nomad_backup/20251115_142432/vaultwarden.hcl
create mode 100644 nomad_backup/20251115_142432/wallabag.hcl
create mode 100644 nomad_backup/20251115_142432/wireguard.hcl
create mode 100644 nomad_backup/20251115_142628/acme.hcl
create mode 100644 nomad_backup/20251115_142628/auth.hcl
create mode 100644 nomad_backup/20251115_142628/calendar-proxy.hcl
create mode 100644 nomad_backup/20251115_142628/democratic-csi-local.hcl
create mode 100644 nomad_backup/20251115_142628/foodplanner.hcl
create mode 100644 nomad_backup/20251115_142628/gonic.hcl
create mode 100644 nomad_backup/20251115_142628/hass.hcl
create mode 100644 nomad_backup/20251115_142628/immich.hcl
create mode 100644 nomad_backup/20251115_142628/minihass.hcl
create mode 100644 nomad_backup/20251115_142628/navidrome.hcl
create mode 100644 nomad_backup/20251115_142628/nginx.hcl
create mode 100644 nomad_backup/20251115_142628/nzbget.hcl
create mode 100644 nomad_backup/20251115_142628/postgres-15.hcl
create mode 100644 nomad_backup/20251115_142628/prometheus.hcl
create mode 100644 nomad_backup/20251115_142628/prowlarr.hcl
create mode 100644 nomad_backup/20251115_142628/qautomate.hcl
create mode 100644 nomad_backup/20251115_142628/qbittorrent.hcl
create mode 100644 nomad_backup/20251115_142628/radarr.hcl
create mode 100644 nomad_backup/20251115_142628/slskd.hcl
create mode 100644 nomad_backup/20251115_142628/sonarr.hcl
create mode 100644 nomad_backup/20251115_142628/traefik.hcl
create mode 100644 nomad_backup/20251115_142628/trilium.hcl
create mode 100644 nomad_backup/20251115_142628/vaultwarden.hcl
create mode 100644 nomad_backup/20251115_142628/wallabag.hcl
create mode 100644 nomad_backup/20251115_142628/wireguard.hcl
create mode 100644 nomad_backup/20251115_143630/acme.hcl
create mode 100644 nomad_backup/20251115_143630/auth.hcl
create mode 100644 nomad_backup/20251115_143630/calendar-proxy.hcl
create mode 100644 nomad_backup/20251115_143630/democratic-csi-local.hcl
create mode 100644 nomad_backup/20251115_143630/foodplanner.hcl
create mode 100644 nomad_backup/20251115_143630/gonic.hcl
create mode 100644 nomad_backup/20251115_143630/hass.hcl
create mode 100644 nomad_backup/20251115_143630/immich.hcl
create mode 100644 nomad_backup/20251115_143630/miniflux.hcl
create mode 100644 nomad_backup/20251115_143630/minihass.hcl
create mode 100644 nomad_backup/20251115_143630/navidrome.hcl
create mode 100644 nomad_backup/20251115_143630/nginx.hcl
create mode 100644 nomad_backup/20251115_143630/nzbget.hcl
create mode 100644 nomad_backup/20251115_143630/postgres-15.hcl
create mode 100644 nomad_backup/20251115_143630/prometheus.hcl
create mode 100644 nomad_backup/20251115_143630/prowlarr.hcl
create mode 100644 nomad_backup/20251115_143630/qautomate.hcl
create mode 100644 nomad_backup/20251115_143630/qbittorrent.hcl
create mode 100644 nomad_backup/20251115_143630/radarr.hcl
create mode 100644 nomad_backup/20251115_143630/slskd.hcl
create mode 100644 nomad_backup/20251115_143630/sonarr.hcl
create mode 100644 nomad_backup/20251115_143630/traefik.hcl
create mode 100644 nomad_backup/20251115_143630/trilium.hcl
create mode 100644 nomad_backup/20251115_143630/vaultwarden.hcl
create mode 100644 nomad_backup/20251115_143630/wallabag.hcl
create mode 100644 nomad_backup/20251115_143630/wireguard.hcl
diff --git a/.github/workflows/backup.yml b/.github/workflows/backup.yml
new file mode 100644
index 0000000..38c7c2d
--- /dev/null
+++ b/.github/workflows/backup.yml
@@ -0,0 +1,55 @@
+name: Nomad Backup
+
+on:
+ schedule:
+ # Run daily at 2 AM UTC (6 PM PST)
+ - cron: '0 2 * * *'
+ workflow_dispatch: # Allow manual triggering
+
+jobs:
+ backup:
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+ with:
+ # Fetch all history so we can properly commit changes
+ fetch-depth: 0
+
+ - name: Set up Python
+ uses: actions/setup-python@v5
+ with:
+ python-version: '3.11'
+
+ - name: Install dependencies
+ run: |
+ python -m pip install --upgrade pip
+ pip install requests
+
+ - name: Run Nomad backup
+ env:
+ NOMAD_ADDR: ${{ secrets.NOMAD_ADDR }}
+ NOMAD_TOKEN: ${{ secrets.NOMAD_TOKEN }}
+ run: |
+ python backup.py --output nomad_backup
+
+ - name: Check for changes
+ id: check_changes
+ run: |
+ git add nomad_backup/
+ if git diff --staged --quiet; then
+ echo "changes=false" >> $GITHUB_OUTPUT
+ echo "No changes to commit"
+ else
+ echo "changes=true" >> $GITHUB_OUTPUT
+ echo "Changes detected, will commit"
+ fi
+
+ - name: Commit and push changes
+ if: steps.check_changes.outputs.changes == 'true'
+ run: |
+ git config --local user.email "github-actions[bot]@users.noreply.github.com"
+ git config --local user.name "github-actions[bot]"
+ git commit -m "chore: backup Nomad jobs [skip ci]"
+ git push
\ No newline at end of file
diff --git a/backup.py b/backup.py
new file mode 100644
index 0000000..9fdbba8
--- /dev/null
+++ b/backup.py
@@ -0,0 +1,244 @@
+#!/usr/bin/env python3
+"""
+Backup HashiCorp Nomad job specifications.
+Compatible with Nomad 1.10.2
+"""
+
+import requests
+import json
+import os
+import sys
+from pathlib import Path
+from datetime import datetime
+from typing import Dict, List, Optional
+
+
+class NomadBackup:
+ def __init__(self, nomad_addr: str = "http://localhost:4646", token: Optional[str] = None):
+ """
+ Initialize Nomad backup client.
+
+ Args:
+ nomad_addr: Nomad API address (default: http://localhost:4646)
+ token: Nomad ACL token if authentication is enabled
+ """
+ self.nomad_addr = nomad_addr.rstrip('/')
+ self.headers = {}
+ if token:
+ self.headers['X-Nomad-Token'] = token
+
+ def get_jobs(self) -> List[Dict]:
+ """Retrieve list of all jobs from Nomad."""
+ url = f"{self.nomad_addr}/v1/jobs"
+ try:
+ resp = requests.get(url, headers=self.headers)
+ resp.raise_for_status()
+ return resp.json()
+ except requests.exceptions.RequestException as e:
+ print(f"Error retrieving jobs: {e}")
+ sys.exit(1)
+
+ def get_job_version(self, job_id: str) -> Optional[int]:
+ """Get the current version of a job."""
+ url = f"{self.nomad_addr}/v1/job/{job_id}"
+ try:
+ resp = requests.get(url, headers=self.headers)
+ resp.raise_for_status()
+ job_info = resp.json()
+ return job_info.get('Version')
+ except requests.exceptions.RequestException as e:
+ print(f"Error retrieving job version for {job_id}: {e}")
+ return None
+
+ def get_job_spec(self, job_id: str) -> tuple:
+ """
+ Retrieve original job submission (what was actually defined).
+
+ Args:
+ job_id: The job ID to retrieve
+
+ Returns:
+ Tuple of (job specification, format) where format is 'hcl' or 'json'
+ """
+ # First get the current version
+ version = self.get_job_version(job_id)
+ if version is None:
+ return None, None
+
+ # Use submission endpoint to get original jobspec without defaults
+ url = f"{self.nomad_addr}/v1/job/{job_id}/submission"
+ params = {'version': version}
+
+ try:
+ resp = requests.get(url, headers=self.headers, params=params)
+ resp.raise_for_status()
+ submission = resp.json()
+
+ # Check the Format field to determine if it was HCL or JSON
+ job_format = submission.get('Format', 'json').lower()
+
+ # The submission endpoint returns metadata wrapper
+ # Extract the actual job spec from the Source field
+ if 'Source' in submission and submission['Source']:
+ source = submission['Source']
+
+ if job_format in ['hcl', 'hcl2']:
+ # Return HCL as-is (it's already a string with the HCL content)
+ return source, 'hcl'
+ else:
+ # Try to parse as JSON
+ try:
+ return json.loads(source), 'json'
+ except json.JSONDecodeError:
+ print(f" Warning: Could not parse Source as JSON for {job_id}, using Job field instead")
+ if 'Job' in submission:
+ return submission['Job'], 'json'
+ return submission, 'json'
+ elif 'Job' in submission:
+ # Some submissions may have Job field directly (always JSON)
+ return submission['Job'], 'json'
+ else:
+ print(f" Warning: No Source or Job found in submission for {job_id}, returning full submission")
+ return submission, 'json'
+ except requests.exceptions.RequestException as e:
+ print(f"Error retrieving job {job_id}: {e}")
+ return None, None
+
+ def sanitize_filename(self, job_id: str) -> str:
+ """Convert job ID to safe filename."""
+ # Replace slashes and other problematic characters
+ return job_id.replace('/', '_').replace('\\', '_').replace(':', '_')
+
+ def backup_jobs(self, output_dir: str = "nomad_backup"):
+ """
+ Backup all Nomad jobs to individual JSON/HCL files.
+
+ Args:
+ output_dir: Directory to save backup files
+ """
+ # Create output directory (without timestamp for Git version control)
+ backup_path = Path(output_dir)
+ backup_path.mkdir(parents=True, exist_ok=True)
+
+ print(f"Backing up Nomad jobs to: {backup_path}")
+
+ # Get all jobs
+ jobs = self.get_jobs()
+ print(f"Found {len(jobs)} jobs")
+
+ # Filter out periodic child jobs (they don't have submissions)
+ # Periodic children have IDs like "parent/periodic-timestamp"
+ parent_jobs = []
+ for job in jobs:
+ job_id = job['ID']
+ # Skip if this looks like a periodic child job
+ if '/periodic-' in job_id or job.get('ParentID'):
+ print(f"Skipping periodic child job: {job_id}")
+ continue
+ parent_jobs.append(job)
+
+ print(f"Backing up {len(parent_jobs)} parent jobs (excluding periodic children)")
+
+ success_count = 0
+ failed_jobs = []
+
+ # Backup each job
+ for job in parent_jobs:
+ job_id = job['ID']
+ job_name = job.get('Name', job_id)
+
+ print(f"Backing up job: {job_name} ({job_id})")
+
+ # Get job specification
+ job_spec, job_format = self.get_job_spec(job_id)
+
+ if job_spec:
+ # Determine file extension based on format
+ ext = 'hcl' if job_format == 'hcl' else 'json'
+ filename = f"{self.sanitize_filename(job_id)}.{ext}"
+ filepath = backup_path / filename
+
+ try:
+ with open(filepath, 'w') as f:
+ if job_format == 'hcl':
+ # Write HCL as plain text
+ f.write(job_spec)
+ else:
+ # Write JSON with formatting
+ json.dump(job_spec, f, indent=2)
+ print(f" ✓ Saved to {filename}")
+ success_count += 1
+ except IOError as e:
+ print(f" ✗ Failed to write file: {e}")
+ failed_jobs.append(job_id)
+ else:
+ print(f" ✗ Failed to retrieve job spec")
+ failed_jobs.append(job_id)
+
+ # Summary
+ print("\n" + "="*50)
+ print(f"Backup complete!")
+ print(f"Successfully backed up: {success_count}/{len(parent_jobs)} jobs")
+ print(f"Backup location: {backup_path.absolute()}")
+
+ if failed_jobs:
+ print(f"\nFailed jobs ({len(failed_jobs)}):")
+ for job_id in failed_jobs:
+ print(f" - {job_id}")
+ return 1
+
+ return 0
+
+
+def main():
+ """Main entry point."""
+ import argparse
+
+ parser = argparse.ArgumentParser(
+ description='Backup HashiCorp Nomad job specifications',
+ formatter_class=argparse.RawDescriptionHelpFormatter,
+ epilog="""
+Examples:
+ # Backup jobs from default local Nomad
+ python nomad_backup.py
+
+ # Backup from remote Nomad cluster
+ python nomad_backup.py --addr https://nomad.example.com:4646
+
+ # Backup with ACL token
+ python nomad_backup.py --token your-nomad-token
+
+ # Custom output directory
+ python nomad_backup.py --output /backups/nomad
+ """
+ )
+
+ parser.add_argument(
+ '--addr',
+ default=os.environ.get('NOMAD_ADDR', 'http://localhost:4646'),
+ help='Nomad API address (default: $NOMAD_ADDR or http://localhost:4646)'
+ )
+
+ parser.add_argument(
+ '--token',
+ default=os.environ.get('NOMAD_TOKEN'),
+ help='Nomad ACL token (default: $NOMAD_TOKEN)'
+ )
+
+ parser.add_argument(
+ '--output', '-o',
+ default='nomad_backup',
+ help='Output directory for backups (default: nomad_backup)'
+ )
+
+ args = parser.parse_args()
+
+ # Create backup client and run backup
+ backup = NomadBackup(nomad_addr=args.addr, token=args.token)
+ exit_code = backup.backup_jobs(output_dir=args.output)
+
+ sys.exit(exit_code)
+
+
+if __name__ == '__main__':
+ main()
\ No newline at end of file
diff --git a/nomad_backup/20251115_141532/acme.json b/nomad_backup/20251115_141532/acme.json
new file mode 100644
index 0000000..1df62e8
--- /dev/null
+++ b/nomad_backup/20251115_141532/acme.json
@@ -0,0 +1,385 @@
+{
+ "Affinities": null,
+ "AllAtOnce": false,
+ "Constraints": null,
+ "ConsulNamespace": "",
+ "CreateIndex": 13570366,
+ "Datacenters": [
+ "dc1"
+ ],
+ "DispatchIdempotencyToken": "",
+ "Dispatched": false,
+ "ID": "acme",
+ "JobModifyIndex": 13570366,
+ "Meta": null,
+ "ModifyIndex": 13570366,
+ "Multiregion": null,
+ "Name": "acme",
+ "Namespace": "default",
+ "NodePool": "default",
+ "NomadTokenID": "",
+ "ParameterizedJob": null,
+ "ParentID": "",
+ "Payload": null,
+ "Periodic": {
+ "Enabled": true,
+ "ProhibitOverlap": true,
+ "Spec": "@weekly",
+ "SpecType": "cron",
+ "Specs": [],
+ "TimeZone": "UTC"
+ },
+ "Priority": 50,
+ "Region": "global",
+ "Spreads": null,
+ "Stable": false,
+ "Status": "running",
+ "StatusDescription": "",
+ "Stop": false,
+ "SubmitTime": 1738335438469388686,
+ "TaskGroups": [
+ {
+ "Affinities": null,
+ "Constraints": null,
+ "Consul": {
+ "Cluster": "default",
+ "Namespace": "",
+ "Partition": ""
+ },
+ "Count": 1,
+ "Disconnect": null,
+ "EphemeralDisk": {
+ "Migrate": false,
+ "SizeMB": 300,
+ "Sticky": false
+ },
+ "MaxClientDisconnect": null,
+ "Meta": null,
+ "Migrate": null,
+ "Name": "acme",
+ "Networks": null,
+ "PreventRescheduleOnLost": false,
+ "ReschedulePolicy": {
+ "Attempts": 1,
+ "Delay": 5000000000,
+ "DelayFunction": "constant",
+ "Interval": 86400000000000,
+ "MaxDelay": 0,
+ "Unlimited": false
+ },
+ "RestartPolicy": {
+ "Attempts": 1,
+ "Delay": 30000000000,
+ "Interval": 86400000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "Scaling": null,
+ "Services": null,
+ "ShutdownDelay": null,
+ "Spreads": null,
+ "StopAfterClientDisconnect": null,
+ "Tasks": [
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "volumes": [
+ "/mnt/configs/${NOMAD_GROUP_NAME}:/acme.sh"
+ ],
+ "entrypoint": [
+ "/local/acme_wrapper.sh"
+ ],
+ "image": "neilpang/acme.sh"
+ },
+ "Constraints": null,
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": {
+ "DuckDNS_Token": "e4b5ca33-1f4d-494b-b06d-6dd4600df662",
+ "CONSUL_URL": "${attr.unique.network.ip-address}",
+ "DEDYN_TOKEN": "JPwQpUiWGkKHSkmGEC4YAeGiGFki"
+ },
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 5000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": null,
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 10,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "acme",
+ "Resources": {
+ "CPU": 256,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 64,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 1,
+ "Delay": 30000000000,
+ "Interval": 86400000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": null,
+ "ShutdownDelay": 0,
+ "Templates": [
+ {
+ "ChangeMode": "noop",
+ "ChangeScript": null,
+ "ChangeSignal": "",
+ "DestPath": "local/acme_wrapper.sh",
+ "EmbeddedTmpl": "{{ key \"scripts/acme.sh\" }}",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "{{",
+ "Once": false,
+ "Perms": "777",
+ "RightDelim": "}}",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ }
+ ],
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ },
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "args": [
+ "flock",
+ "-x",
+ "/locks/${NOMAD_GROUP_NAME}_rsync.lock",
+ "rsync",
+ "-avz",
+ "--delete-excluded",
+ "--exclude=renewal",
+ "--exclude='live'",
+ "--exclude='archive'",
+ "--exclude='keys'",
+ "--exclude='csr'",
+ "/configbackup/",
+ "/config/",
+ "--delete-before"
+ ],
+ "image": "ghcr.io/sstent/rsync",
+ "memory_hard_limit": 2048.0,
+ "volumes": [
+ "/mnt/configs/${NOMAD_GROUP_NAME}:/config",
+ "/mnt/Public/config/${NOMAD_GROUP_NAME}:/configbackup",
+ "/mnt/Public/config/locks:/locks"
+ ]
+ },
+ "Constraints": null,
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": null,
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 5000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": {
+ "Hook": "prestart",
+ "Sidecar": false
+ },
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 10,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "init",
+ "Resources": {
+ "CPU": 20,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 20,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 1,
+ "Delay": 30000000000,
+ "Interval": 86400000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": null,
+ "ShutdownDelay": 0,
+ "Templates": null,
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ },
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "image": "ghcr.io/sstent/rsync",
+ "memory_hard_limit": 2048.0,
+ "volumes": [
+ "/mnt/configs/${NOMAD_GROUP_NAME}:/config",
+ "/mnt/Public/config/${NOMAD_GROUP_NAME}:/configbackup",
+ "/mnt/Public/config/locks:/locks"
+ ],
+ "args": [
+ "flock",
+ "-x",
+ "/locks/${NOMAD_GROUP_NAME}_rsync.lock",
+ "rsync",
+ "-av",
+ "--delete-excluded",
+ "--exclude=renewal",
+ "--exclude='live'",
+ "--exclude='archive'",
+ "--exclude='keys'",
+ "--exclude='csr'",
+ "/config/",
+ "/configbackup/",
+ "--remove-source-files"
+ ]
+ },
+ "Constraints": null,
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": null,
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 5000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": {
+ "Hook": "poststop",
+ "Sidecar": false
+ },
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 10,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "finalsync",
+ "Resources": {
+ "CPU": 20,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 20,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 1,
+ "Delay": 30000000000,
+ "Interval": 86400000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": null,
+ "ShutdownDelay": 0,
+ "Templates": null,
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ }
+ ],
+ "Update": null,
+ "Volumes": null
+ }
+ ],
+ "Type": "batch",
+ "UI": null,
+ "Update": {
+ "AutoPromote": false,
+ "AutoRevert": false,
+ "Canary": 0,
+ "HealthCheck": "",
+ "HealthyDeadline": 0,
+ "MaxParallel": 0,
+ "MinHealthyTime": 0,
+ "ProgressDeadline": 0,
+ "Stagger": 0
+ },
+ "VaultNamespace": "",
+ "Version": 0,
+ "VersionTag": null
+}
\ No newline at end of file
diff --git a/nomad_backup/20251115_141532/auth.json b/nomad_backup/20251115_141532/auth.json
new file mode 100644
index 0000000..39dbfd2
--- /dev/null
+++ b/nomad_backup/20251115_141532/auth.json
@@ -0,0 +1,304 @@
+{
+ "Affinities": null,
+ "AllAtOnce": false,
+ "Constraints": [
+ {
+ "LTarget": "${attr.kernel.name}",
+ "Operand": "=",
+ "RTarget": "linux"
+ },
+ {
+ "LTarget": "${attr.unique.hostname}",
+ "Operand": "regexp",
+ "RTarget": "odroid.*"
+ }
+ ],
+ "ConsulNamespace": "",
+ "CreateIndex": 13571978,
+ "Datacenters": [
+ "dc1"
+ ],
+ "DispatchIdempotencyToken": "",
+ "Dispatched": false,
+ "ID": "auth",
+ "JobModifyIndex": 13770263,
+ "Meta": null,
+ "ModifyIndex": 13990955,
+ "Multiregion": null,
+ "Name": "auth",
+ "Namespace": "default",
+ "NodePool": "default",
+ "NomadTokenID": "",
+ "ParameterizedJob": null,
+ "ParentID": "",
+ "Payload": null,
+ "Periodic": null,
+ "Priority": 50,
+ "Region": "global",
+ "Spreads": null,
+ "Stable": true,
+ "Status": "running",
+ "StatusDescription": "",
+ "Stop": false,
+ "SubmitTime": 1748145867863720703,
+ "TaskGroups": [
+ {
+ "Affinities": null,
+ "Constraints": null,
+ "Consul": {
+ "Cluster": "default",
+ "Namespace": "",
+ "Partition": ""
+ },
+ "Count": 1,
+ "Disconnect": null,
+ "EphemeralDisk": {
+ "Migrate": false,
+ "SizeMB": 300,
+ "Sticky": false
+ },
+ "MaxClientDisconnect": null,
+ "Meta": null,
+ "Migrate": {
+ "HealthCheck": "checks",
+ "HealthyDeadline": 300000000000,
+ "MaxParallel": 1,
+ "MinHealthyTime": 10000000000
+ },
+ "Name": "auth",
+ "Networks": null,
+ "PreventRescheduleOnLost": false,
+ "ReschedulePolicy": {
+ "Attempts": 0,
+ "Delay": 30000000000,
+ "DelayFunction": "exponential",
+ "Interval": 0,
+ "MaxDelay": 3600000000000,
+ "Unlimited": true
+ },
+ "RestartPolicy": {
+ "Attempts": 2,
+ "Delay": 15000000000,
+ "Interval": 1800000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "Scaling": null,
+ "Services": null,
+ "ShutdownDelay": null,
+ "Spreads": null,
+ "StopAfterClientDisconnect": null,
+ "Tasks": [
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "port_map": [
+ {
+ "auth": 4181.0
+ }
+ ],
+ "image": "thomseddon/traefik-forward-auth:2-arm",
+ "volumes": [
+ "/etc/localtime:/etc/localtime:ro"
+ ]
+ },
+ "Constraints": [
+ {
+ "LTarget": "${attr.consul.version}",
+ "Operand": "semver",
+ "RTarget": ">= 1.8.0"
+ }
+ ],
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": {
+ "CONFIG": "/local/config.ini",
+ "LIFETIME": "31536000",
+ "WHITELIST": "stuart.stent@gmail.com,stephen.bunt@gmail.com",
+ "COOKIE_DOMAIN": "fbleagh.duckdns.org",
+ "PROVIDERS_GOOGLE_CLIENT_ID": "807888907647-uog95jmiolsuh6ql1t8jm53l1jvuajck.apps.googleusercontent.com",
+ "PROVIDERS_GOOGLE_CLIENT_SECRET": "B8bDri5mFvGv-Ghzbt8fLj4W",
+ "SECRET": "ladskfdjmqwermnnbasfnmldas"
+ },
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 5000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": null,
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 10,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "fwdauth",
+ "Resources": {
+ "CPU": 100,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 64,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": [
+ {
+ "ReservedPorts": [
+ {
+ "HostNetwork": "default",
+ "Label": "auth",
+ "Value": 4181
+ }
+ ]
+ }
+ ],
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 2,
+ "Delay": 15000000000,
+ "Interval": 1800000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": [
+ {
+ "Address": "",
+ "AddressMode": "auto",
+ "CanaryMeta": null,
+ "CanaryTags": null,
+ "Checks": [
+ {
+ "AddressMode": "",
+ "Args": null,
+ "Body": "",
+ "CheckRestart": null,
+ "Command": "",
+ "Expose": false,
+ "FailuresBeforeCritical": 0,
+ "FailuresBeforeWarning": 0,
+ "GRPCService": "",
+ "GRPCUseTLS": false,
+ "Header": null,
+ "InitialStatus": "",
+ "Interval": 10000000000,
+ "Method": "",
+ "Name": "service: \"dex\" check",
+ "Notes": "",
+ "OnUpdate": "require_healthy",
+ "Path": "",
+ "PortLabel": "",
+ "Protocol": "",
+ "SuccessBeforePassing": 0,
+ "TLSServerName": "",
+ "TLSSkipVerify": false,
+ "TaskName": "fwdauth",
+ "Timeout": 2000000000,
+ "Type": "tcp"
+ }
+ ],
+ "Cluster": "default",
+ "Connect": null,
+ "EnableTagOverride": false,
+ "Identity": null,
+ "Meta": null,
+ "Name": "dex",
+ "Namespace": "default",
+ "OnUpdate": "require_healthy",
+ "PortLabel": "auth",
+ "Provider": "consul",
+ "TaggedAddresses": null,
+ "Tags": [
+ "fwdauth",
+ "web",
+ "traefik.http.routers.dex.rule=Host(`fwdauth.fbleagh.duckdns.org`,`fwdauth.fbleagh.dedyn.io`)",
+ "traefik.http.routers.dex.entrypoints=websecure",
+ "traefik.http.routers.dex.tls=true",
+ "traefik.http.middlewares.dex.forwardauth.address=http://dex.service.dc1.consul:4181",
+ "traefik.http.middlewares.dex.forwardauth.trustForwardHeader=true",
+ "traefik.http.middlewares.dex.forwardauth.authResponseHeaders=X-Forwarded-User",
+ "traefik.http.routers.auth.middlewares=dex",
+ "traefik.http.routers.traefik-forward-auth.middlewares=dex"
+ ],
+ "TaskName": "fwdauth",
+ "Weights": null
+ }
+ ],
+ "ShutdownDelay": 0,
+ "Templates": [
+ {
+ "ChangeMode": "restart",
+ "ChangeScript": null,
+ "ChangeSignal": "",
+ "DestPath": "local/config.ini",
+ "EmbeddedTmpl": "{{ key \"Dex\" }}",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "{{",
+ "Once": false,
+ "Perms": "0644",
+ "RightDelim": "}}",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ }
+ ],
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ }
+ ],
+ "Update": {
+ "AutoPromote": false,
+ "AutoRevert": false,
+ "Canary": 0,
+ "HealthCheck": "checks",
+ "HealthyDeadline": 300000000000,
+ "MaxParallel": 1,
+ "MinHealthyTime": 10000000000,
+ "ProgressDeadline": 600000000000,
+ "Stagger": 30000000000
+ },
+ "Volumes": null
+ }
+ ],
+ "Type": "service",
+ "UI": null,
+ "Update": {
+ "AutoPromote": false,
+ "AutoRevert": false,
+ "Canary": 0,
+ "HealthCheck": "",
+ "HealthyDeadline": 0,
+ "MaxParallel": 1,
+ "MinHealthyTime": 0,
+ "ProgressDeadline": 0,
+ "Stagger": 30000000000
+ },
+ "VaultNamespace": "",
+ "Version": 2,
+ "VersionTag": null
+}
\ No newline at end of file
diff --git a/nomad_backup/20251115_141532/calendar-proxy.json b/nomad_backup/20251115_141532/calendar-proxy.json
new file mode 100644
index 0000000..923590c
--- /dev/null
+++ b/nomad_backup/20251115_141532/calendar-proxy.json
@@ -0,0 +1,406 @@
+{
+ "Affinities": null,
+ "AllAtOnce": false,
+ "Constraints": null,
+ "ConsulNamespace": "",
+ "CreateIndex": 13940845,
+ "Datacenters": [
+ "dc1"
+ ],
+ "DispatchIdempotencyToken": "",
+ "Dispatched": false,
+ "ID": "calendar-proxy",
+ "JobModifyIndex": 13940997,
+ "Meta": null,
+ "ModifyIndex": 13991837,
+ "Multiregion": null,
+ "Name": "calendar-proxy",
+ "Namespace": "default",
+ "NodePool": "default",
+ "NomadTokenID": "",
+ "ParameterizedJob": null,
+ "ParentID": "",
+ "Payload": null,
+ "Periodic": null,
+ "Priority": 50,
+ "Region": "global",
+ "Spreads": null,
+ "Stable": true,
+ "Status": "running",
+ "StatusDescription": "",
+ "Stop": false,
+ "SubmitTime": 1755792931244089317,
+ "TaskGroups": [
+ {
+ "Affinities": null,
+ "Constraints": [
+ {
+ "LTarget": "${attr.consul.version}",
+ "Operand": "semver",
+ "RTarget": ">= 1.8.0"
+ }
+ ],
+ "Consul": null,
+ "Count": 1,
+ "Disconnect": null,
+ "EphemeralDisk": {
+ "Migrate": false,
+ "SizeMB": 300,
+ "Sticky": false
+ },
+ "MaxClientDisconnect": null,
+ "Meta": null,
+ "Migrate": {
+ "HealthCheck": "checks",
+ "HealthyDeadline": 300000000000,
+ "MaxParallel": 1,
+ "MinHealthyTime": 10000000000
+ },
+ "Name": "web",
+ "Networks": [
+ {
+ "DynamicPorts": [
+ {
+ "HostNetwork": "default",
+ "Label": "http",
+ "To": 80
+ }
+ ]
+ }
+ ],
+ "PreventRescheduleOnLost": false,
+ "ReschedulePolicy": {
+ "Attempts": 0,
+ "Delay": 30000000000,
+ "DelayFunction": "exponential",
+ "Interval": 0,
+ "MaxDelay": 3600000000000,
+ "Unlimited": true
+ },
+ "RestartPolicy": {
+ "Attempts": 3,
+ "Delay": 25000000000,
+ "Interval": 300000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "Scaling": null,
+ "Services": [
+ {
+ "Address": "",
+ "AddressMode": "auto",
+ "CanaryMeta": null,
+ "CanaryTags": null,
+ "Checks": [
+ {
+ "AddressMode": "",
+ "Args": null,
+ "Body": "",
+ "CheckRestart": null,
+ "Command": "",
+ "Expose": false,
+ "FailuresBeforeCritical": 0,
+ "FailuresBeforeWarning": 0,
+ "GRPCService": "",
+ "GRPCUseTLS": false,
+ "Header": null,
+ "InitialStatus": "",
+ "Interval": 10000000000,
+ "Method": "",
+ "Name": "service: \"calendar-proxy\" check",
+ "Notes": "",
+ "OnUpdate": "require_healthy",
+ "Path": "/health",
+ "PortLabel": "",
+ "Protocol": "",
+ "SuccessBeforePassing": 0,
+ "TLSServerName": "",
+ "TLSSkipVerify": false,
+ "TaskName": "",
+ "Timeout": 3000000000,
+ "Type": "http"
+ }
+ ],
+ "Cluster": "default",
+ "Connect": null,
+ "EnableTagOverride": false,
+ "Identity": null,
+ "Meta": null,
+ "Name": "calendar-proxy",
+ "Namespace": "default",
+ "OnUpdate": "require_healthy",
+ "PortLabel": "http",
+ "Provider": "consul",
+ "TaggedAddresses": null,
+ "Tags": [
+ "traefik.enable=true",
+ "traefik.http.routers.calendar-proxy.rule=Host(`mail.fbleagh.duckdns.org`)",
+ "traefik.http.routers.calendar-proxy.entrypoints=web"
+ ],
+ "TaskName": "",
+ "Weights": null
+ }
+ ],
+ "ShutdownDelay": null,
+ "Spreads": null,
+ "StopAfterClientDisconnect": null,
+ "Tasks": [
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "volumes": [
+ "local/nginx.conf:/etc/nginx/nginx.conf",
+ "local/app:/var/www/html"
+ ],
+ "image": "nginx:alpine",
+ "ports": [
+ "http"
+ ]
+ },
+ "Constraints": null,
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": null,
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 5000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": {
+ "Hook": "prestart",
+ "Sidecar": true
+ },
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 10,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "nginx",
+ "Resources": {
+ "CPU": 100,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 128,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 3,
+ "Delay": 25000000000,
+ "Interval": 300000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": null,
+ "ShutdownDelay": 0,
+ "Templates": [
+ {
+ "ChangeMode": "restart",
+ "ChangeScript": null,
+ "ChangeSignal": "",
+ "DestPath": "local/nginx.conf",
+ "EmbeddedTmpl": "events {\n worker_connections 1024;\n}\n\nhttp {\n include /etc/nginx/mime.types;\n default_type application/octet-stream;\n \n sendfile on;\n keepalive_timeout 65;\n \n upstream php-fpm {\n server 127.0.0.1:9000;\n }\n \n server {\n listen 80;\n server_name mail.fbleagh.duckdns.org;\n root /var/www/html;\n index ics.php;\n \n location /health {\n access_log off;\n return 200 \"healthy\\n\";\n add_header Content-Type text/plain;\n }\n \n location / {\n try_files $uri $uri/ /ics.php?$query_string;\n }\n \n location ~ \\.php$ {\n fastcgi_pass php-fpm;\n fastcgi_index index.php;\n fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;\n include fastcgi_params;\n }\n \n # Security headers\n add_header X-Frame-Options \"SAMEORIGIN\" always;\n add_header X-XSS-Protection \"1; mode=block\" always;\n add_header X-Content-Type-Options \"nosniff\" always;\n \n # Hide nginx version\n server_tokens off;\n }\n}\n",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "{{",
+ "Once": false,
+ "Perms": "0644",
+ "RightDelim": "}}",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ },
+ {
+ "ChangeMode": "restart",
+ "ChangeScript": null,
+ "ChangeSignal": "",
+ "DestPath": "local/app/ics.php",
+ "EmbeddedTmpl": " [\n \"header\" => \"User-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36\",\n ]\n]);\nif (($data = @file_get_contents($url, false, $context)) === false) {\n $error = error_get_last();\n http_response_code(500);\n print \"HTTP request failed: \" . $error['message'];\n exit;\n}\nheader('Content-Type: text/calendar; charset=utf-8');\nprint $data;\n?>\n",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "{{",
+ "Once": false,
+ "Perms": "0644",
+ "RightDelim": "}}",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ }
+ ],
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ },
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "network_mode": "container:nginx-${NOMAD_ALLOC_ID}",
+ "volumes": [
+ "local/app:/var/www/html",
+ "local/php-fpm.conf:/usr/local/etc/php-fpm.d/www.conf"
+ ],
+ "image": "php:8.2-fpm-alpine"
+ },
+ "Constraints": null,
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": null,
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 5000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": null,
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 10,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "php-fpm",
+ "Resources": {
+ "CPU": 200,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 256,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 3,
+ "Delay": 25000000000,
+ "Interval": 300000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": null,
+ "ShutdownDelay": 0,
+ "Templates": [
+ {
+ "ChangeMode": "restart",
+ "ChangeScript": null,
+ "ChangeSignal": "",
+ "DestPath": "local/php-fpm.conf",
+ "EmbeddedTmpl": "[www]\nuser = www-data\ngroup = www-data\nlisten = 127.0.0.1:9000\nlisten.owner = www-data\nlisten.group = www-data\npm = dynamic\npm.max_children = 5\npm.start_servers = 2\npm.min_spare_servers = 1\npm.max_spare_servers = 3\n",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "{{",
+ "Once": false,
+ "Perms": "0644",
+ "RightDelim": "}}",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ },
+ {
+ "ChangeMode": "restart",
+ "ChangeScript": null,
+ "ChangeSignal": "",
+ "DestPath": "local/app/ics.php",
+ "EmbeddedTmpl": " [\n \"header\" => \"User-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36\",\n ]\n]);\nif (($data = @file_get_contents($url, false, $context)) === false) {\n $error = error_get_last();\n http_response_code(500);\n print \"HTTP request failed: \" . $error['message'];\n exit;\n}\nheader('Content-Type: text/calendar; charset=utf-8');\nprint $data;\n?>\n",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "{{",
+ "Once": false,
+ "Perms": "0644",
+ "RightDelim": "}}",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ }
+ ],
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ }
+ ],
+ "Update": {
+ "AutoPromote": false,
+ "AutoRevert": true,
+ "Canary": 0,
+ "HealthCheck": "checks",
+ "HealthyDeadline": 180000000000,
+ "MaxParallel": 1,
+ "MinHealthyTime": 10000000000,
+ "ProgressDeadline": 600000000000,
+ "Stagger": 30000000000
+ },
+ "Volumes": null
+ }
+ ],
+ "Type": "service",
+ "UI": null,
+ "Update": {
+ "AutoPromote": false,
+ "AutoRevert": false,
+ "Canary": 0,
+ "HealthCheck": "",
+ "HealthyDeadline": 0,
+ "MaxParallel": 1,
+ "MinHealthyTime": 0,
+ "ProgressDeadline": 0,
+ "Stagger": 30000000000
+ },
+ "VaultNamespace": "",
+ "Version": 7,
+ "VersionTag": null
+}
\ No newline at end of file
diff --git a/nomad_backup/20251115_141532/democratic-csi-local.json b/nomad_backup/20251115_141532/democratic-csi-local.json
new file mode 100644
index 0000000..ef6cb9f
--- /dev/null
+++ b/nomad_backup/20251115_141532/democratic-csi-local.json
@@ -0,0 +1,339 @@
+{
+ "Affinities": null,
+ "AllAtOnce": false,
+ "Constraints": null,
+ "ConsulNamespace": "",
+ "CreateIndex": 13925181,
+ "Datacenters": [
+ "dc1"
+ ],
+ "DispatchIdempotencyToken": "",
+ "Dispatched": false,
+ "ID": "democratic-csi-local",
+ "JobModifyIndex": 13925215,
+ "Meta": null,
+ "ModifyIndex": 13925215,
+ "Multiregion": null,
+ "Name": "democratic-csi-local",
+ "Namespace": "default",
+ "NodePool": "default",
+ "NomadTokenID": "",
+ "ParameterizedJob": null,
+ "ParentID": "",
+ "Payload": null,
+ "Periodic": null,
+ "Priority": 50,
+ "Region": "global",
+ "Spreads": null,
+ "Stable": false,
+ "Status": "running",
+ "StatusDescription": "",
+ "Stop": false,
+ "SubmitTime": 1755193604654316261,
+ "TaskGroups": [
+ {
+ "Affinities": null,
+ "Constraints": null,
+ "Consul": {
+ "Cluster": "default",
+ "Namespace": "",
+ "Partition": ""
+ },
+ "Count": 1,
+ "Disconnect": null,
+ "EphemeralDisk": {
+ "Migrate": false,
+ "SizeMB": 300,
+ "Sticky": false
+ },
+ "MaxClientDisconnect": null,
+ "Meta": null,
+ "Migrate": null,
+ "Name": "controller",
+ "Networks": null,
+ "PreventRescheduleOnLost": false,
+ "ReschedulePolicy": null,
+ "RestartPolicy": {
+ "Attempts": 2,
+ "Delay": 15000000000,
+ "Interval": 1800000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "Scaling": null,
+ "Services": null,
+ "ShutdownDelay": null,
+ "Spreads": null,
+ "StopAfterClientDisconnect": null,
+ "Tasks": [
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": {
+ "HealthTimeout": 30000000000,
+ "ID": "org.democratic-csi.local-hostpath",
+ "MountDir": "/csi",
+ "StagePublishBaseDir": "/local/csi",
+ "Type": "controller"
+ },
+ "Config": {
+ "volumes": [
+ "local/config:/config:ro"
+ ],
+ "args": [
+ "--csi-version=1.5.0",
+ "--csi-name=org.democratic-csi.local-hostpath",
+ "--driver-config-file=/config/driver-config-file.yaml",
+ "--log-level=info",
+ "--csi-mode=controller",
+ "--server-socket=/csi/csi.sock"
+ ],
+ "image": "democraticcsi/democratic-csi:latest"
+ },
+ "Constraints": null,
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": null,
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 5000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": null,
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 10,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "controller",
+ "Resources": {
+ "CPU": 256,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 128,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 2,
+ "Delay": 15000000000,
+ "Interval": 1800000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": null,
+ "ShutdownDelay": 0,
+ "Templates": [
+ {
+ "ChangeMode": "restart",
+ "ChangeScript": null,
+ "ChangeSignal": "",
+ "DestPath": "local/config/driver-config-file.yaml",
+ "EmbeddedTmpl": "driver: local-hostpath\ninstance_id: {{ env \"node.unique.id\" }}\nlocal-hostpath:\n shareBasePath: \"/tmp/democratic-csi-local-hostpath\"\n controllerBasePath: \"/tmp/democratic-csi-local-hostpath\"\n dirPermissionsMode: \"0755\"\n dirPermissionsUser: 0\n dirPermissionsGroup: 0\n",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "{{",
+ "Once": false,
+ "Perms": "0644",
+ "RightDelim": "}}",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ }
+ ],
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ }
+ ],
+ "Update": null,
+ "Volumes": null
+ },
+ {
+ "Affinities": null,
+ "Constraints": null,
+ "Consul": {
+ "Cluster": "default",
+ "Namespace": "",
+ "Partition": ""
+ },
+ "Count": 1,
+ "Disconnect": null,
+ "EphemeralDisk": {
+ "Migrate": false,
+ "SizeMB": 300,
+ "Sticky": false
+ },
+ "MaxClientDisconnect": null,
+ "Meta": null,
+ "Migrate": null,
+ "Name": "nodes",
+ "Networks": null,
+ "PreventRescheduleOnLost": false,
+ "ReschedulePolicy": null,
+ "RestartPolicy": {
+ "Attempts": 2,
+ "Delay": 15000000000,
+ "Interval": 1800000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "Scaling": null,
+ "Services": null,
+ "ShutdownDelay": null,
+ "Spreads": null,
+ "StopAfterClientDisconnect": null,
+ "Tasks": [
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": {
+ "HealthTimeout": 30000000000,
+ "ID": "org.democratic-csi.local-hostpath",
+ "MountDir": "/csi",
+ "StagePublishBaseDir": "/local/csi",
+ "Type": "node"
+ },
+ "Config": {
+ "volumes": [
+ "local/config:/config:ro",
+ "/tmp/democratic-csi-local-hostpath:/tmp/democratic-csi-local-hostpath:rshared"
+ ],
+ "args": [
+ "--csi-version=1.5.0",
+ "--csi-name=org.democratic-csi.local-hostpath",
+ "--driver-config-file=/config/driver-config-file.yaml",
+ "--log-level=info",
+ "--csi-mode=node",
+ "--server-socket=/csi/csi.sock"
+ ],
+ "image": "democraticcsi/democratic-csi:latest",
+ "privileged": true
+ },
+ "Constraints": null,
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": null,
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 5000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": null,
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 10,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "node",
+ "Resources": {
+ "CPU": 256,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 128,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 2,
+ "Delay": 15000000000,
+ "Interval": 1800000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": null,
+ "ShutdownDelay": 0,
+ "Templates": [
+ {
+ "ChangeMode": "restart",
+ "ChangeScript": null,
+ "ChangeSignal": "",
+ "DestPath": "local/config/driver-config-file.yaml",
+ "EmbeddedTmpl": "driver: local-hostpath\ninstance_id: {{ env \"node.unique.id\" }}\nlocal-hostpath:\n shareBasePath: \"/tmp/democratic-csi-local-hostpath\"\n controllerBasePath: \"/tmp/democratic-csi-local-hostpath\"\n dirPermissionsMode: \"0755\"\n dirPermissionsUser: 0\n dirPermissionsGroup: 0\n",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "{{",
+ "Once": false,
+ "Perms": "0644",
+ "RightDelim": "}}",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ }
+ ],
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ }
+ ],
+ "Update": null,
+ "Volumes": null
+ }
+ ],
+ "Type": "system",
+ "UI": null,
+ "Update": {
+ "AutoPromote": false,
+ "AutoRevert": false,
+ "Canary": 0,
+ "HealthCheck": "",
+ "HealthyDeadline": 0,
+ "MaxParallel": 0,
+ "MinHealthyTime": 0,
+ "ProgressDeadline": 0,
+ "Stagger": 0
+ },
+ "VaultNamespace": "",
+ "Version": 1,
+ "VersionTag": null
+}
\ No newline at end of file
diff --git a/nomad_backup/20251115_141532/foodplanner.json b/nomad_backup/20251115_141532/foodplanner.json
new file mode 100644
index 0000000..3470e7e
--- /dev/null
+++ b/nomad_backup/20251115_141532/foodplanner.json
@@ -0,0 +1,405 @@
+{
+ "Affinities": null,
+ "AllAtOnce": false,
+ "Constraints": null,
+ "ConsulNamespace": "",
+ "CreateIndex": 14064853,
+ "Datacenters": [
+ "dc1"
+ ],
+ "DispatchIdempotencyToken": "",
+ "Dispatched": false,
+ "ID": "foodplanner",
+ "JobModifyIndex": 14064853,
+ "Meta": null,
+ "ModifyIndex": 14064866,
+ "Multiregion": null,
+ "Name": "foodplanner",
+ "Namespace": "default",
+ "NodePool": "default",
+ "NomadTokenID": "",
+ "ParameterizedJob": null,
+ "ParentID": "",
+ "Payload": null,
+ "Periodic": null,
+ "Priority": 50,
+ "Region": "global",
+ "Spreads": null,
+ "Stable": true,
+ "Status": "running",
+ "StatusDescription": "",
+ "Stop": false,
+ "SubmitTime": 1759672953055136364,
+ "TaskGroups": [
+ {
+ "Affinities": null,
+ "Constraints": [
+ {
+ "LTarget": "${attr.consul.version}",
+ "Operand": "semver",
+ "RTarget": ">= 1.8.0"
+ }
+ ],
+ "Consul": null,
+ "Count": 1,
+ "Disconnect": null,
+ "EphemeralDisk": {
+ "Migrate": false,
+ "SizeMB": 300,
+ "Sticky": false
+ },
+ "MaxClientDisconnect": null,
+ "Meta": null,
+ "Migrate": {
+ "HealthCheck": "checks",
+ "HealthyDeadline": 300000000000,
+ "MaxParallel": 1,
+ "MinHealthyTime": 10000000000
+ },
+ "Name": "app",
+ "Networks": [
+ {
+ "DynamicPorts": [
+ {
+ "HostNetwork": "default",
+ "Label": "http",
+ "To": 8999
+ }
+ ]
+ }
+ ],
+ "PreventRescheduleOnLost": false,
+ "ReschedulePolicy": {
+ "Attempts": 0,
+ "Delay": 30000000000,
+ "DelayFunction": "exponential",
+ "Interval": 0,
+ "MaxDelay": 3600000000000,
+ "Unlimited": true
+ },
+ "RestartPolicy": {
+ "Attempts": 2,
+ "Delay": 15000000000,
+ "Interval": 1800000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "Scaling": null,
+ "Services": [
+ {
+ "Address": "",
+ "AddressMode": "auto",
+ "CanaryMeta": null,
+ "CanaryTags": null,
+ "Checks": [
+ {
+ "AddressMode": "",
+ "Args": null,
+ "Body": "",
+ "CheckRestart": null,
+ "Command": "",
+ "Expose": false,
+ "FailuresBeforeCritical": 0,
+ "FailuresBeforeWarning": 0,
+ "GRPCService": "",
+ "GRPCUseTLS": false,
+ "Header": null,
+ "InitialStatus": "",
+ "Interval": 10000000000,
+ "Method": "",
+ "Name": "service: \"foodplanner\" check",
+ "Notes": "",
+ "OnUpdate": "require_healthy",
+ "Path": "/",
+ "PortLabel": "",
+ "Protocol": "",
+ "SuccessBeforePassing": 0,
+ "TLSServerName": "",
+ "TLSSkipVerify": false,
+ "TaskName": "",
+ "Timeout": 2000000000,
+ "Type": "http"
+ }
+ ],
+ "Cluster": "default",
+ "Connect": null,
+ "EnableTagOverride": false,
+ "Identity": null,
+ "Meta": null,
+ "Name": "foodplanner",
+ "Namespace": "default",
+ "OnUpdate": "require_healthy",
+ "PortLabel": "http",
+ "Provider": "consul",
+ "TaggedAddresses": null,
+ "Tags": null,
+ "TaskName": "",
+ "Weights": null
+ }
+ ],
+ "ShutdownDelay": null,
+ "Spreads": null,
+ "StopAfterClientDisconnect": null,
+ "Tasks": [
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "volumes": [
+ "/opt/nomad/data:/data"
+ ],
+ "args": [
+ "restore",
+ "-o",
+ "/alloc/tmp/meal_planner.db",
+ "sftp://root:odroid@192.168.4.63/mnt/Shares/litestream/foodplanner.db"
+ ],
+ "image": "litestream/litestream:0.3"
+ },
+ "Constraints": null,
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": null,
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 5000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": {
+ "Hook": "prestart",
+ "Sidecar": false
+ },
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 10,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "restore",
+ "Resources": {
+ "CPU": 100,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 300,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 2,
+ "Delay": 15000000000,
+ "Interval": 1800000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": null,
+ "ShutdownDelay": 0,
+ "Templates": null,
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ },
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "ports": [
+ "http"
+ ],
+ "volumes": [
+ "/mnt/Public/configs/FoodPlanner_backups:/app/backups/"
+ ],
+ "image": "ghcr.io/sstent/foodplanner:main"
+ },
+ "Constraints": null,
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": {
+ "DATABASE_PATH": "/alloc/tmp",
+ "DATABASE_URL": "sqlite:////alloc/tmp/meal_planner.db"
+ },
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 5000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": null,
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 10,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "app",
+ "Resources": {
+ "CPU": 500,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 1024,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 3,
+ "Delay": 15000000000,
+ "Interval": 600000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": null,
+ "ShutdownDelay": 0,
+ "Templates": null,
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ },
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "image": "litestream/litestream:0.3",
+ "args": [
+ "replicate",
+ "/alloc/tmp/meal_planner.db",
+ "sftp://root:odroid@192.168.4.63/mnt/Shares/litestream/foodplanner.db"
+ ]
+ },
+ "Constraints": null,
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": null,
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 5000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": {
+ "Hook": "poststart",
+ "Sidecar": true
+ },
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 10,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "litestream",
+ "Resources": {
+ "CPU": 100,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 300,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 2,
+ "Delay": 15000000000,
+ "Interval": 1800000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": null,
+ "ShutdownDelay": 0,
+ "Templates": null,
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ }
+ ],
+ "Update": {
+ "AutoPromote": false,
+ "AutoRevert": false,
+ "Canary": 0,
+ "HealthCheck": "checks",
+ "HealthyDeadline": 300000000000,
+ "MaxParallel": 1,
+ "MinHealthyTime": 10000000000,
+ "ProgressDeadline": 600000000000,
+ "Stagger": 30000000000
+ },
+ "Volumes": null
+ }
+ ],
+ "Type": "service",
+ "UI": null,
+ "Update": {
+ "AutoPromote": false,
+ "AutoRevert": false,
+ "Canary": 0,
+ "HealthCheck": "",
+ "HealthyDeadline": 0,
+ "MaxParallel": 1,
+ "MinHealthyTime": 0,
+ "ProgressDeadline": 0,
+ "Stagger": 30000000000
+ },
+ "VaultNamespace": "",
+ "Version": 0,
+ "VersionTag": null
+}
\ No newline at end of file
diff --git a/nomad_backup/20251115_141532/gonic.json b/nomad_backup/20251115_141532/gonic.json
new file mode 100644
index 0000000..f3a6c9f
--- /dev/null
+++ b/nomad_backup/20251115_141532/gonic.json
@@ -0,0 +1,542 @@
+{
+ "Affinities": null,
+ "AllAtOnce": false,
+ "Constraints": null,
+ "ConsulNamespace": "",
+ "CreateIndex": 13923644,
+ "Datacenters": [
+ "dc1"
+ ],
+ "DispatchIdempotencyToken": "",
+ "Dispatched": false,
+ "ID": "gonic",
+ "JobModifyIndex": 13923644,
+ "Meta": null,
+ "ModifyIndex": 13991159,
+ "Multiregion": null,
+ "Name": "gonic",
+ "Namespace": "default",
+ "NodePool": "default",
+ "NomadTokenID": "",
+ "ParameterizedJob": null,
+ "ParentID": "",
+ "Payload": null,
+ "Periodic": null,
+ "Priority": 50,
+ "Region": "global",
+ "Spreads": null,
+ "Stable": true,
+ "Status": "running",
+ "StatusDescription": "",
+ "Stop": false,
+ "SubmitTime": 1755124884723774513,
+ "TaskGroups": [
+ {
+ "Affinities": null,
+ "Constraints": null,
+ "Consul": {
+ "Cluster": "default",
+ "Namespace": "",
+ "Partition": ""
+ },
+ "Count": 1,
+ "Disconnect": null,
+ "EphemeralDisk": {
+ "Migrate": false,
+ "SizeMB": 300,
+ "Sticky": false
+ },
+ "MaxClientDisconnect": null,
+ "Meta": null,
+ "Migrate": {
+ "HealthCheck": "checks",
+ "HealthyDeadline": 300000000000,
+ "MaxParallel": 1,
+ "MinHealthyTime": 10000000000
+ },
+ "Name": "gonic",
+ "Networks": null,
+ "PreventRescheduleOnLost": false,
+ "ReschedulePolicy": {
+ "Attempts": 0,
+ "Delay": 30000000000,
+ "DelayFunction": "exponential",
+ "Interval": 0,
+ "MaxDelay": 3600000000000,
+ "Unlimited": true
+ },
+ "RestartPolicy": {
+ "Attempts": 2,
+ "Delay": 15000000000,
+ "Interval": 1800000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "Scaling": null,
+ "Services": null,
+ "ShutdownDelay": null,
+ "Spreads": null,
+ "StopAfterClientDisconnect": null,
+ "Tasks": [
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "volumes": [
+ "/mnt/configs/gonic/data:/data",
+ "/mnt/configs/gonic/cache:/cache",
+ "/mnt/Public/Downloads/Clean_Music:/music/CleanMusic:ro",
+ "/mnt/Public/Downloads/incoming_music:/music/incomingmusic:ro",
+ "/mnt/Public/Downloads/podcasts:/podcasts",
+ "/mnt/Public/Downloads/musicplaylists:/musicplaylists"
+ ],
+ "port_map": [
+ {
+ "http": 80.0
+ }
+ ],
+ "image": "sentriz/gonic"
+ },
+ "Constraints": [
+ {
+ "LTarget": "${attr.consul.version}",
+ "Operand": "semver",
+ "RTarget": ">= 1.8.0"
+ }
+ ],
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": {
+ "GONIC_SCAN_INTERVAL": "120",
+ "GONIC_MUSIC_PATH": "/music",
+ "GONIC_PODCAST_PATH": "/podcasts",
+ "GONIC_PLAYLISTS_PATH": "/musicplaylists"
+ },
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 5000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": null,
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 10,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "gonic",
+ "Resources": {
+ "CPU": 100,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 256,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": [
+ {
+ "ReservedPorts": [
+ {
+ "HostNetwork": "default",
+ "Label": "http",
+ "Value": 4747
+ }
+ ]
+ }
+ ],
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 2,
+ "Delay": 15000000000,
+ "Interval": 1800000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": [
+ {
+ "Address": "",
+ "AddressMode": "auto",
+ "CanaryMeta": null,
+ "CanaryTags": null,
+ "Checks": [
+ {
+ "AddressMode": "",
+ "Args": null,
+ "Body": "",
+ "CheckRestart": null,
+ "Command": "",
+ "Expose": false,
+ "FailuresBeforeCritical": 0,
+ "FailuresBeforeWarning": 0,
+ "GRPCService": "",
+ "GRPCUseTLS": false,
+ "Header": null,
+ "InitialStatus": "",
+ "Interval": 10000000000,
+ "Method": "",
+ "Name": "service: \"gonic\" check",
+ "Notes": "",
+ "OnUpdate": "require_healthy",
+ "Path": "",
+ "PortLabel": "",
+ "Protocol": "",
+ "SuccessBeforePassing": 0,
+ "TLSServerName": "",
+ "TLSSkipVerify": false,
+ "TaskName": "gonic",
+ "Timeout": 2000000000,
+ "Type": "tcp"
+ }
+ ],
+ "Cluster": "default",
+ "Connect": null,
+ "EnableTagOverride": false,
+ "Identity": null,
+ "Meta": {
+ "ALLOC": "${NOMAD_ALLOC_ID}"
+ },
+ "Name": "gonic",
+ "Namespace": "default",
+ "OnUpdate": "require_healthy",
+ "PortLabel": "http",
+ "Provider": "consul",
+ "TaggedAddresses": null,
+ "Tags": [
+ "gonic",
+ "web",
+ "urlprefix-/gonic",
+ "backend",
+ "traefik.http.routers.goniclan.rule=Host(`gonic.service.dc1.consul`)",
+ "traefik.http.routers.gonicwan.rule=Host(`mg.fbleagh.duckdns.org`)",
+ "traefik.http.routers.gonicwan.tls=true",
+ "traefik.http.routers.gonicwan.tls.certresolver=myresolver"
+ ],
+ "TaskName": "gonic",
+ "Weights": null
+ }
+ ],
+ "ShutdownDelay": 0,
+ "Templates": null,
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ },
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "memory_hard_limit": "2048",
+ "image": "ghcr.io/sstent/rsync",
+ "volumes": [
+ "/mnt/configs/${NOMAD_GROUP_NAME}:/config",
+ "/mnt/Public/config/${NOMAD_GROUP_NAME}:/configbackup",
+ "/mnt/Public/config/locks:/locks"
+ ],
+ "args": [
+ "flock",
+ "-x",
+ "/locks/${NOMAD_GROUP_NAME}_rsync.lock",
+ "rsync",
+ "-av",
+ "--exclude=Backups",
+ "/configbackup/",
+ "/config/",
+ "--delete-before"
+ ]
+ },
+ "Constraints": null,
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": null,
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 5000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": {
+ "Hook": "prestart",
+ "Sidecar": false
+ },
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 10,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "init-manual",
+ "Resources": {
+ "CPU": 20,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 20,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 2,
+ "Delay": 15000000000,
+ "Interval": 1800000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": null,
+ "ShutdownDelay": 0,
+ "Templates": null,
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ },
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "volumes": [
+ "/mnt/configs/${NOMAD_GROUP_NAME}:/config",
+ "/mnt/Public/config/${NOMAD_GROUP_NAME}:/configbackup",
+ "/mnt/Public/config/locks:/locks"
+ ],
+ "args": [
+ "flock",
+ "-x",
+ "/locks/${NOMAD_GROUP_NAME}_rsync.lock",
+ "rsync",
+ "-av",
+ "/config/",
+ "/configbackup/"
+ ],
+ "memory_hard_limit": "2048",
+ "image": "ghcr.io/sstent/rsync"
+ },
+ "Constraints": null,
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": null,
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 5000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": {
+ "Hook": "poststop",
+ "Sidecar": false
+ },
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 10,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "finalsync-manual",
+ "Resources": {
+ "CPU": 20,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 20,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 2,
+ "Delay": 15000000000,
+ "Interval": 1800000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": null,
+ "ShutdownDelay": 0,
+ "Templates": null,
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ },
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "volumes": [
+ "/mnt/configs/${NOMAD_GROUP_NAME}:/config",
+ "/mnt/Public/config/${NOMAD_GROUP_NAME}:/configbackup"
+ ],
+ "memory_hard_limit": "2048",
+ "image": "ghcr.io/sstent/rsync"
+ },
+ "Constraints": null,
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": null,
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 5000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": {
+ "Hook": "poststart",
+ "Sidecar": true
+ },
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 10,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "db-sync",
+ "Resources": {
+ "CPU": 20,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 20,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 2,
+ "Delay": 15000000000,
+ "Interval": 1800000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": null,
+ "ShutdownDelay": 0,
+ "Templates": [
+ {
+ "ChangeMode": "restart",
+ "ChangeScript": null,
+ "ChangeSignal": "",
+ "DestPath": "local/litestream.yml",
+ "EmbeddedTmpl": "dbs:\n - path: /data/gonic.db\n replicas:\n - path: /configbackup\n",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "{{",
+ "Once": false,
+ "Perms": "0644",
+ "RightDelim": "}}",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ }
+ ],
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ }
+ ],
+ "Update": {
+ "AutoPromote": false,
+ "AutoRevert": false,
+ "Canary": 0,
+ "HealthCheck": "checks",
+ "HealthyDeadline": 300000000000,
+ "MaxParallel": 1,
+ "MinHealthyTime": 10000000000,
+ "ProgressDeadline": 600000000000,
+ "Stagger": 30000000000
+ },
+ "Volumes": null
+ }
+ ],
+ "Type": "service",
+ "UI": null,
+ "Update": {
+ "AutoPromote": false,
+ "AutoRevert": false,
+ "Canary": 0,
+ "HealthCheck": "",
+ "HealthyDeadline": 0,
+ "MaxParallel": 1,
+ "MinHealthyTime": 0,
+ "ProgressDeadline": 0,
+ "Stagger": 30000000000
+ },
+ "VaultNamespace": "",
+ "Version": 0,
+ "VersionTag": null
+}
\ No newline at end of file
diff --git a/nomad_backup/20251115_141532/hass.json b/nomad_backup/20251115_141532/hass.json
new file mode 100644
index 0000000..cf02da6
--- /dev/null
+++ b/nomad_backup/20251115_141532/hass.json
@@ -0,0 +1,536 @@
+{
+ "Affinities": [
+ {
+ "LTarget": "${attr.unique.hostname}",
+ "Operand": "=",
+ "RTarget": "odroid2",
+ "Weight": 80
+ }
+ ],
+ "AllAtOnce": false,
+ "Constraints": [
+ {
+ "LTarget": "${attr.kernel.name}",
+ "Operand": "=",
+ "RTarget": "linux"
+ },
+ {
+ "LTarget": "${attr.unique.hostname}",
+ "Operand": "regexp",
+ "RTarget": "odroid.*"
+ }
+ ],
+ "ConsulNamespace": "",
+ "CreateIndex": 13607995,
+ "Datacenters": [
+ "dc1"
+ ],
+ "DispatchIdempotencyToken": "",
+ "Dispatched": false,
+ "ID": "hass",
+ "JobModifyIndex": 13992633,
+ "Meta": null,
+ "ModifyIndex": 13992664,
+ "Multiregion": null,
+ "Name": "hass",
+ "Namespace": "default",
+ "NodePool": "default",
+ "NomadTokenID": "",
+ "ParameterizedJob": null,
+ "ParentID": "",
+ "Payload": null,
+ "Periodic": null,
+ "Priority": 50,
+ "Region": "global",
+ "Spreads": null,
+ "Stable": true,
+ "Status": "running",
+ "StatusDescription": "",
+ "Stop": false,
+ "SubmitTime": 1757869441327214250,
+ "TaskGroups": [
+ {
+ "Affinities": null,
+ "Constraints": null,
+ "Consul": null,
+ "Count": 1,
+ "Disconnect": null,
+ "EphemeralDisk": {
+ "Migrate": false,
+ "SizeMB": 300,
+ "Sticky": false
+ },
+ "MaxClientDisconnect": null,
+ "Meta": null,
+ "Migrate": {
+ "HealthCheck": "checks",
+ "HealthyDeadline": 300000000000,
+ "MaxParallel": 1,
+ "MinHealthyTime": 10000000000
+ },
+ "Name": "hass",
+ "Networks": [
+ {
+ "ReservedPorts": [
+ {
+ "HostNetwork": "default",
+ "Label": "http",
+ "To": 8123,
+ "Value": 8123
+ },
+ {
+ "HostNetwork": "default",
+ "Label": "http_8989",
+ "To": 8989,
+ "Value": 8989
+ }
+ ]
+ }
+ ],
+ "PreventRescheduleOnLost": false,
+ "ReschedulePolicy": {
+ "Attempts": 0,
+ "Delay": 30000000000,
+ "DelayFunction": "exponential",
+ "Interval": 0,
+ "MaxDelay": 3600000000000,
+ "Unlimited": true
+ },
+ "RestartPolicy": {
+ "Attempts": 99,
+ "Delay": 10000000000,
+ "Interval": 3600000000000,
+ "Mode": "delay",
+ "RenderTemplates": false
+ },
+ "Scaling": null,
+ "Services": null,
+ "ShutdownDelay": null,
+ "Spreads": null,
+ "StopAfterClientDisconnect": null,
+ "Tasks": [
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "memory_hard_limit": "2048",
+ "image_pull_timeout": "10m",
+ "force_pull": false,
+ "image": "ghcr.io/sstent/rsync",
+ "volumes": [
+ "/mnt/configs/${NOMAD_GROUP_NAME}:/config",
+ "/mnt/Public/config/${NOMAD_GROUP_NAME}:/configbackup",
+ "/mnt/Public/config/locks:/locks"
+ ]
+ },
+ "Constraints": null,
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": {
+ "DB_NAME": "home-assistant_v2.db"
+ },
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 5000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": {
+ "Hook": "prestart",
+ "Sidecar": false
+ },
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 10,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "init",
+ "Resources": {
+ "CPU": 20,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 20,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 99,
+ "Delay": 10000000000,
+ "Interval": 3600000000000,
+ "Mode": "delay",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": null,
+ "ShutdownDelay": 0,
+ "Templates": null,
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ },
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "image": "ghcr.io/sstent/rsync",
+ "volumes": [
+ "/mnt/configs/${NOMAD_GROUP_NAME}:/config",
+ "/mnt/Public/config/${NOMAD_GROUP_NAME}:/configbackup",
+ "/mnt/Public/config/locks:/locks"
+ ],
+ "memory_hard_limit": "2048"
+ },
+ "Constraints": null,
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": null,
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 5000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": {
+ "Hook": "poststop",
+ "Sidecar": false
+ },
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 10,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "finalsync",
+ "Resources": {
+ "CPU": 20,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 128,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 99,
+ "Delay": 10000000000,
+ "Interval": 3600000000000,
+ "Mode": "delay",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": null,
+ "ShutdownDelay": 0,
+ "Templates": null,
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ },
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "args": [
+ "client"
+ ],
+ "memory_hard_limit": "2048",
+ "image": "ghcr.io/sstent/rsync",
+ "volumes": [
+ "/mnt/configs/:/configs",
+ "/mnt/Public/config/${NOMAD_GROUP_NAME}:/configbackup"
+ ]
+ },
+ "Constraints": null,
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": {
+ "CRON_TASK_1": "50 8-20 * * *rsync -av --exclude='*.db*' --exclude='*.db' --exclude='.db-litestream' --exclude='generations' /configs/${NOMAD_GROUP_NAME}/ /configbackup/;"
+ },
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 5000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": {
+ "Hook": "poststart",
+ "Sidecar": true
+ },
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 10,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "sync",
+ "Resources": {
+ "CPU": 20,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 20,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 99,
+ "Delay": 10000000000,
+ "Interval": 3600000000000,
+ "Mode": "delay",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": null,
+ "ShutdownDelay": 0,
+ "Templates": null,
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ },
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "network_mode": "host",
+ "cap_add": [
+ "NET_ADMIN"
+ ],
+ "force_pull": false,
+ "volumes": [
+ "/etc/localtime:/etc/localtime",
+ "local/configuration.yaml:/config/configuration.yaml",
+ "local/ui-lovelace.yaml:/config/ui-lovelace.yaml",
+ "/mnt/configs/hass:/config"
+ ],
+ "image": "ghcr.io/home-assistant/home-assistant:stable",
+ "ports": [
+ "http",
+ "http_8989"
+ ],
+ "memory_hard_limit": "2048"
+ },
+ "Constraints": [
+ {
+ "LTarget": "${attr.consul.version}",
+ "Operand": "semver",
+ "RTarget": ">= 1.8.0"
+ }
+ ],
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": {
+ "JEMALLOC_DISABLE": "true"
+ },
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 10000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": null,
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 15,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "hass",
+ "Resources": {
+ "CPU": 256,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 128,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 99,
+ "Delay": 10000000000,
+ "Interval": 3600000000000,
+ "Mode": "delay",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": [
+ {
+ "Address": "",
+ "AddressMode": "auto",
+ "CanaryMeta": null,
+ "CanaryTags": null,
+ "Checks": null,
+ "Cluster": "default",
+ "Connect": null,
+ "EnableTagOverride": false,
+ "Identity": null,
+ "Meta": null,
+ "Name": "hass",
+ "Namespace": "default",
+ "OnUpdate": "require_healthy",
+ "PortLabel": "http",
+ "Provider": "consul",
+ "TaggedAddresses": null,
+ "Tags": [
+ "global",
+ "homeassistant",
+ "tools",
+ "logo=home-assistant"
+ ],
+ "TaskName": "hass",
+ "Weights": null
+ }
+ ],
+ "ShutdownDelay": 0,
+ "Templates": [
+ {
+ "ChangeMode": "restart",
+ "ChangeScript": null,
+ "ChangeSignal": "",
+ "DestPath": "local/configuration.yaml",
+ "EmbeddedTmpl": "{{ key \"homeassistant/configuration.yml\" }}",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "{{",
+ "Once": false,
+ "Perms": "0644",
+ "RightDelim": "}}",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ },
+ {
+ "ChangeMode": "restart",
+ "ChangeScript": null,
+ "ChangeSignal": "",
+ "DestPath": "local/ui-lovelace.yaml",
+ "EmbeddedTmpl": "{{ key \"homeassistant/lovelace.yml\" }}",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "{{",
+ "Once": false,
+ "Perms": "0644",
+ "RightDelim": "}}",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ }
+ ],
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ }
+ ],
+ "Update": {
+ "AutoPromote": false,
+ "AutoRevert": false,
+ "Canary": 0,
+ "HealthCheck": "checks",
+ "HealthyDeadline": 300000000000,
+ "MaxParallel": 1,
+ "MinHealthyTime": 10000000000,
+ "ProgressDeadline": 600000000000,
+ "Stagger": 10000000000
+ },
+ "Volumes": null
+ }
+ ],
+ "Type": "service",
+ "UI": null,
+ "Update": {
+ "AutoPromote": false,
+ "AutoRevert": false,
+ "Canary": 0,
+ "HealthCheck": "",
+ "HealthyDeadline": 0,
+ "MaxParallel": 1,
+ "MinHealthyTime": 0,
+ "ProgressDeadline": 0,
+ "Stagger": 10000000000
+ },
+ "VaultNamespace": "",
+ "Version": 8,
+ "VersionTag": null
+}
\ No newline at end of file
diff --git a/nomad_backup/20251115_141532/immich.json b/nomad_backup/20251115_141532/immich.json
new file mode 100644
index 0000000..c060b66
--- /dev/null
+++ b/nomad_backup/20251115_141532/immich.json
@@ -0,0 +1,414 @@
+{
+ "Affinities": null,
+ "AllAtOnce": false,
+ "Constraints": null,
+ "ConsulNamespace": "",
+ "CreateIndex": 13571905,
+ "Datacenters": [
+ "dc1"
+ ],
+ "DispatchIdempotencyToken": "",
+ "Dispatched": false,
+ "ID": "immich",
+ "JobModifyIndex": 14198769,
+ "Meta": null,
+ "ModifyIndex": 14198796,
+ "Multiregion": null,
+ "Name": "immich",
+ "Namespace": "default",
+ "NodePool": "default",
+ "NomadTokenID": "",
+ "ParameterizedJob": null,
+ "ParentID": "",
+ "Payload": null,
+ "Periodic": null,
+ "Priority": 50,
+ "Region": "global",
+ "Spreads": null,
+ "Stable": true,
+ "Status": "running",
+ "StatusDescription": "",
+ "Stop": false,
+ "SubmitTime": 1763139333220876334,
+ "TaskGroups": [
+ {
+ "Affinities": null,
+ "Constraints": null,
+ "Consul": null,
+ "Count": 1,
+ "Disconnect": null,
+ "EphemeralDisk": {
+ "Migrate": false,
+ "SizeMB": 300,
+ "Sticky": false
+ },
+ "MaxClientDisconnect": null,
+ "Meta": null,
+ "Migrate": {
+ "HealthCheck": "checks",
+ "HealthyDeadline": 300000000000,
+ "MaxParallel": 1,
+ "MinHealthyTime": 10000000000
+ },
+ "Name": "immich",
+ "Networks": [
+ {
+ "ReservedPorts": [
+ {
+ "HostNetwork": "default",
+ "Label": "http",
+ "To": 8080,
+ "Value": 8088
+ }
+ ]
+ }
+ ],
+ "PreventRescheduleOnLost": false,
+ "ReschedulePolicy": {
+ "Attempts": 0,
+ "Delay": 30000000000,
+ "DelayFunction": "exponential",
+ "Interval": 0,
+ "MaxDelay": 3600000000000,
+ "Unlimited": true
+ },
+ "RestartPolicy": {
+ "Attempts": 2,
+ "Delay": 30000000000,
+ "Interval": 300000000000,
+ "Mode": "delay",
+ "RenderTemplates": false
+ },
+ "Scaling": null,
+ "Services": null,
+ "ShutdownDelay": null,
+ "Spreads": null,
+ "StopAfterClientDisconnect": null,
+ "Tasks": [
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "image": "ghcr.io/imagegenius/immich:2.2.3-noml",
+ "memory_hard_limit": "2048",
+ "ports": [
+ "http"
+ ],
+ "volumes": [
+ "/mnt/Public/configs/Immich:/config",
+ "/mnt/Public/Immich/Photos:/photos",
+ "/mnt/Public/Immich/libraries:/libraries"
+ ]
+ },
+ "Constraints": [
+ {
+ "LTarget": "${attr.consul.version}",
+ "Operand": "semver",
+ "RTarget": ">= 1.8.0"
+ }
+ ],
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": {
+ "DB_PORT": "5432",
+ "REDIS_HOSTNAME": "redis.service.dc1.consul",
+ "MACHINE_LEARNING_WORKER_TIMEOUT": "120",
+ "DB_PASSWORD": "postgres",
+ "PUID": "1000",
+ "DB_HOSTNAME": "master.postgres.service.dc1.consul",
+ "PGID": "1000",
+ "REDIS_PORT": "6379",
+ "MACHINE_LEARNING_PORT": "3003",
+ "MACHINE_LEARNING_HOST": "0.0.0.0",
+ "DB_VECTOR_EXTENSION": "pgvector",
+ "MACHINE_LEARNING_WORKERS": "1",
+ "DB_USERNAME": "postgres",
+ "REDIS_PASSWORD": "",
+ "TZ": "Etc/UTC",
+ "DB_DATABASE_NAME": "immich"
+ },
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 5000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": null,
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 10,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "immich",
+ "Resources": {
+ "CPU": 500,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 512,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 2,
+ "Delay": 30000000000,
+ "Interval": 300000000000,
+ "Mode": "delay",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": [
+ {
+ "Address": "",
+ "AddressMode": "auto",
+ "CanaryMeta": null,
+ "CanaryTags": null,
+ "Checks": null,
+ "Cluster": "default",
+ "Connect": null,
+ "EnableTagOverride": false,
+ "Identity": null,
+ "Meta": null,
+ "Name": "immich",
+ "Namespace": "default",
+ "OnUpdate": "require_healthy",
+ "PortLabel": "http",
+ "Provider": "consul",
+ "TaggedAddresses": null,
+ "Tags": [
+ "immich",
+ "tools",
+ "traefik.http.routers.immichlan.rule=Host(`immich.service.dc1.consul`)",
+ "traefik.http.routers.immichwan.rule=Host(`immich.fbleagh.duckdns.org`)",
+ "traefik.http.routers.immichwan.tls=true"
+ ],
+ "TaskName": "immich",
+ "Weights": null
+ }
+ ],
+ "ShutdownDelay": 0,
+ "Templates": null,
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ }
+ ],
+ "Update": {
+ "AutoPromote": false,
+ "AutoRevert": false,
+ "Canary": 0,
+ "HealthCheck": "checks",
+ "HealthyDeadline": 300000000000,
+ "MaxParallel": 1,
+ "MinHealthyTime": 10000000000,
+ "ProgressDeadline": 600000000000,
+ "Stagger": 30000000000
+ },
+ "Volumes": null
+ },
+ {
+ "Affinities": null,
+ "Constraints": null,
+ "Consul": null,
+ "Count": 1,
+ "Disconnect": null,
+ "EphemeralDisk": {
+ "Migrate": false,
+ "SizeMB": 300,
+ "Sticky": false
+ },
+ "MaxClientDisconnect": null,
+ "Meta": null,
+ "Migrate": {
+ "HealthCheck": "checks",
+ "HealthyDeadline": 300000000000,
+ "MaxParallel": 1,
+ "MinHealthyTime": 10000000000
+ },
+ "Name": "redis",
+ "Networks": [
+ {
+ "ReservedPorts": [
+ {
+ "HostNetwork": "default",
+ "Label": "redis",
+ "Value": 6379
+ }
+ ]
+ }
+ ],
+ "PreventRescheduleOnLost": false,
+ "ReschedulePolicy": {
+ "Attempts": 0,
+ "Delay": 30000000000,
+ "DelayFunction": "exponential",
+ "Interval": 0,
+ "MaxDelay": 3600000000000,
+ "Unlimited": true
+ },
+ "RestartPolicy": {
+ "Attempts": 2,
+ "Delay": 30000000000,
+ "Interval": 300000000000,
+ "Mode": "delay",
+ "RenderTemplates": false
+ },
+ "Scaling": null,
+ "Services": null,
+ "ShutdownDelay": null,
+ "Spreads": null,
+ "StopAfterClientDisconnect": null,
+ "Tasks": [
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "image": "redis",
+ "ports": [
+ "redis"
+ ]
+ },
+ "Constraints": [
+ {
+ "LTarget": "${attr.consul.version}",
+ "Operand": "semver",
+ "RTarget": ">= 1.8.0"
+ }
+ ],
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": null,
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 5000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": null,
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 10,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "redis",
+ "Resources": {
+ "CPU": 250,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 256,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 2,
+ "Delay": 30000000000,
+ "Interval": 300000000000,
+ "Mode": "delay",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": [
+ {
+ "Address": "",
+ "AddressMode": "auto",
+ "CanaryMeta": null,
+ "CanaryTags": null,
+ "Checks": null,
+ "Cluster": "default",
+ "Connect": null,
+ "EnableTagOverride": false,
+ "Identity": null,
+ "Meta": null,
+ "Name": "redis",
+ "Namespace": "default",
+ "OnUpdate": "require_healthy",
+ "PortLabel": "redis",
+ "Provider": "consul",
+ "TaggedAddresses": null,
+ "Tags": [
+ "wallabag",
+ "tools"
+ ],
+ "TaskName": "redis",
+ "Weights": null
+ }
+ ],
+ "ShutdownDelay": 0,
+ "Templates": null,
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ }
+ ],
+ "Update": {
+ "AutoPromote": false,
+ "AutoRevert": false,
+ "Canary": 0,
+ "HealthCheck": "checks",
+ "HealthyDeadline": 300000000000,
+ "MaxParallel": 1,
+ "MinHealthyTime": 10000000000,
+ "ProgressDeadline": 600000000000,
+ "Stagger": 30000000000
+ },
+ "Volumes": null
+ }
+ ],
+ "Type": "service",
+ "UI": null,
+ "Update": {
+ "AutoPromote": false,
+ "AutoRevert": false,
+ "Canary": 0,
+ "HealthCheck": "",
+ "HealthyDeadline": 0,
+ "MaxParallel": 1,
+ "MinHealthyTime": 0,
+ "ProgressDeadline": 0,
+ "Stagger": 30000000000
+ },
+ "VaultNamespace": "",
+ "Version": 15,
+ "VersionTag": null
+}
\ No newline at end of file
diff --git a/nomad_backup/20251115_141532/miniflux.json b/nomad_backup/20251115_141532/miniflux.json
new file mode 100644
index 0000000..8b5490b
--- /dev/null
+++ b/nomad_backup/20251115_141532/miniflux.json
@@ -0,0 +1,240 @@
+{
+ "Affinities": null,
+ "AllAtOnce": false,
+ "Constraints": null,
+ "ConsulNamespace": "",
+ "CreateIndex": 13716709,
+ "Datacenters": [
+ "dc1"
+ ],
+ "DispatchIdempotencyToken": "",
+ "Dispatched": false,
+ "ID": "miniflux",
+ "JobModifyIndex": 13716709,
+ "Meta": null,
+ "ModifyIndex": 13990946,
+ "Multiregion": null,
+ "Name": "miniflux",
+ "Namespace": "default",
+ "NodePool": "default",
+ "NomadTokenID": "",
+ "ParameterizedJob": null,
+ "ParentID": "",
+ "Payload": null,
+ "Periodic": null,
+ "Priority": 50,
+ "Region": "global",
+ "Spreads": null,
+ "Stable": true,
+ "Status": "running",
+ "StatusDescription": "",
+ "Stop": false,
+ "SubmitTime": 1745243550127001781,
+ "TaskGroups": [
+ {
+ "Affinities": null,
+ "Constraints": null,
+ "Consul": {
+ "Cluster": "default",
+ "Namespace": "",
+ "Partition": ""
+ },
+ "Count": 1,
+ "Disconnect": null,
+ "EphemeralDisk": {
+ "Migrate": false,
+ "SizeMB": 300,
+ "Sticky": false
+ },
+ "MaxClientDisconnect": null,
+ "Meta": null,
+ "Migrate": {
+ "HealthCheck": "checks",
+ "HealthyDeadline": 300000000000,
+ "MaxParallel": 1,
+ "MinHealthyTime": 10000000000
+ },
+ "Name": "miniflux",
+ "Networks": [
+ {
+ "DynamicPorts": [
+ {
+ "HostNetwork": "default",
+ "Label": "http",
+ "To": 8080
+ }
+ ]
+ }
+ ],
+ "PreventRescheduleOnLost": false,
+ "ReschedulePolicy": {
+ "Attempts": 0,
+ "Delay": 30000000000,
+ "DelayFunction": "exponential",
+ "Interval": 0,
+ "MaxDelay": 3600000000000,
+ "Unlimited": true
+ },
+ "RestartPolicy": {
+ "Attempts": 2,
+ "Delay": 15000000000,
+ "Interval": 1800000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "Scaling": null,
+ "Services": null,
+ "ShutdownDelay": null,
+ "Spreads": null,
+ "StopAfterClientDisconnect": null,
+ "Tasks": [
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "image": "miniflux/miniflux:latest",
+ "ports": [
+ "http"
+ ]
+ },
+ "Constraints": [
+ {
+ "LTarget": "${attr.consul.version}",
+ "Operand": "semver",
+ "RTarget": ">= 1.8.0"
+ }
+ ],
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": {
+ "ADMIN_USERNAME": "admin",
+ "OAUTH2_PROVIDER": "google",
+ "ADMIN_PASSWORD": "farscape5",
+ "OAUTH2_CLIENT_SECRET": "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",
+ "RUN_MIGRATIONS": "1",
+ "BASE_URL": "https://miniflux.fbleagh.duckdns.org",
+ "OAUTH2_REDIRECT_URL": "https://miniflux.fbleagh.duckdns.org/oauth2/google/callback",
+ "OAUTH2_CLIENT_ID": "807888907647-g6i7t2auvbrjinf151qupc663tgpn6gh.apps.googleusercontent.com",
+ "CREATE_ADMIN": "1",
+ "DATABASE_URL": "postgres://postgres:postgres@master.postgres.service.dc1.consul/miniflux?sslmode=disable",
+ "OAUTH2_USER_CREATION": "1"
+ },
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 5000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": null,
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 10,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "miniflux",
+ "Resources": {
+ "CPU": 500,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 256,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 2,
+ "Delay": 15000000000,
+ "Interval": 1800000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": [
+ {
+ "Address": "",
+ "AddressMode": "auto",
+ "CanaryMeta": null,
+ "CanaryTags": null,
+ "Checks": null,
+ "Cluster": "default",
+ "Connect": null,
+ "EnableTagOverride": false,
+ "Identity": null,
+ "Meta": null,
+ "Name": "miniflux",
+ "Namespace": "default",
+ "OnUpdate": "require_healthy",
+ "PortLabel": "http",
+ "Provider": "consul",
+ "TaggedAddresses": null,
+ "Tags": [
+ "miniflux",
+ "tools",
+ "traefik.http.routers.minifluxlan.rule=Host(`miniflux.service.dc1.consul`)",
+ "traefik.http.routers.minifluxwan.rule=Host(`miniflux.fbleagh.duckdns.org`)",
+ "traefik.http.routers.minifluxwan.tls=true",
+ "traefik.http.middlewares.vaultwardenwan-admin-ipwhitelist.ipwhitelist.sourcerange=127.0.0.1/32, 192.168.1.0/24",
+ "traefik.http.routers.nginx-admin.middlewares=vaultwardenwan-admin-ipwhitelist"
+ ],
+ "TaskName": "miniflux",
+ "Weights": null
+ }
+ ],
+ "ShutdownDelay": 0,
+ "Templates": null,
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ }
+ ],
+ "Update": {
+ "AutoPromote": false,
+ "AutoRevert": false,
+ "Canary": 0,
+ "HealthCheck": "checks",
+ "HealthyDeadline": 300000000000,
+ "MaxParallel": 1,
+ "MinHealthyTime": 10000000000,
+ "ProgressDeadline": 600000000000,
+ "Stagger": 30000000000
+ },
+ "Volumes": null
+ }
+ ],
+ "Type": "service",
+ "UI": null,
+ "Update": {
+ "AutoPromote": false,
+ "AutoRevert": false,
+ "Canary": 0,
+ "HealthCheck": "",
+ "HealthyDeadline": 0,
+ "MaxParallel": 1,
+ "MinHealthyTime": 0,
+ "ProgressDeadline": 0,
+ "Stagger": 30000000000
+ },
+ "VaultNamespace": "",
+ "Version": 0,
+ "VersionTag": null
+}
\ No newline at end of file
diff --git a/nomad_backup/20251115_141532/minihass.json b/nomad_backup/20251115_141532/minihass.json
new file mode 100644
index 0000000..69cd32f
--- /dev/null
+++ b/nomad_backup/20251115_141532/minihass.json
@@ -0,0 +1,254 @@
+{
+ "Affinities": null,
+ "AllAtOnce": false,
+ "Constraints": null,
+ "ConsulNamespace": "",
+ "CreateIndex": 14013004,
+ "Datacenters": [
+ "dc1"
+ ],
+ "DispatchIdempotencyToken": "",
+ "Dispatched": false,
+ "ID": "minihass",
+ "JobModifyIndex": 14013055,
+ "Meta": null,
+ "ModifyIndex": 14013061,
+ "Multiregion": null,
+ "Name": "minihass",
+ "Namespace": "default",
+ "NodePool": "default",
+ "NomadTokenID": "",
+ "ParameterizedJob": null,
+ "ParentID": "",
+ "Payload": null,
+ "Periodic": null,
+ "Priority": 50,
+ "Region": "global",
+ "Spreads": null,
+ "Stable": true,
+ "Status": "running",
+ "StatusDescription": "",
+ "Stop": false,
+ "SubmitTime": 1758392051490505959,
+ "TaskGroups": [
+ {
+ "Affinities": null,
+ "Constraints": [
+ {
+ "LTarget": "${attr.consul.version}",
+ "Operand": "semver",
+ "RTarget": ">= 1.8.0"
+ }
+ ],
+ "Consul": null,
+ "Count": 1,
+ "Disconnect": null,
+ "EphemeralDisk": {
+ "Migrate": false,
+ "SizeMB": 300,
+ "Sticky": false
+ },
+ "MaxClientDisconnect": null,
+ "Meta": null,
+ "Migrate": {
+ "HealthCheck": "checks",
+ "HealthyDeadline": 300000000000,
+ "MaxParallel": 1,
+ "MinHealthyTime": 10000000000
+ },
+ "Name": "smart-home",
+ "Networks": [
+ {
+ "DynamicPorts": [
+ {
+ "HostNetwork": "default",
+ "Label": "http",
+ "To": 5000
+ }
+ ],
+ "Mode": "host"
+ }
+ ],
+ "PreventRescheduleOnLost": false,
+ "ReschedulePolicy": {
+ "Attempts": 0,
+ "Delay": 30000000000,
+ "DelayFunction": "exponential",
+ "Interval": 0,
+ "MaxDelay": 3600000000000,
+ "Unlimited": true
+ },
+ "RestartPolicy": {
+ "Attempts": 2,
+ "Delay": 15000000000,
+ "Interval": 1800000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "Scaling": null,
+ "Services": [
+ {
+ "Address": "",
+ "AddressMode": "auto",
+ "CanaryMeta": null,
+ "CanaryTags": null,
+ "Checks": [
+ {
+ "AddressMode": "",
+ "Args": null,
+ "Body": "",
+ "CheckRestart": null,
+ "Command": "",
+ "Expose": false,
+ "FailuresBeforeCritical": 0,
+ "FailuresBeforeWarning": 0,
+ "GRPCService": "",
+ "GRPCUseTLS": false,
+ "Header": null,
+ "InitialStatus": "",
+ "Interval": 30000000000,
+ "Method": "",
+ "Name": "service: \"minihass\" check",
+ "Notes": "",
+ "OnUpdate": "require_healthy",
+ "Path": "/health",
+ "PortLabel": "",
+ "Protocol": "",
+ "SuccessBeforePassing": 0,
+ "TLSServerName": "",
+ "TLSSkipVerify": false,
+ "TaskName": "",
+ "Timeout": 7000000000,
+ "Type": "http"
+ }
+ ],
+ "Cluster": "default",
+ "Connect": null,
+ "EnableTagOverride": false,
+ "Identity": null,
+ "Meta": null,
+ "Name": "minihass",
+ "Namespace": "default",
+ "OnUpdate": "require_healthy",
+ "PortLabel": "http",
+ "Provider": "consul",
+ "TaggedAddresses": null,
+ "Tags": [
+ "traefik.http.routers.minihasslan.rule=Host(`minihass.service.dc1.consul`)",
+ "traefik.http.routers.minihasswan.rule=Host(`mh.fbleagh.duckdns.org`)",
+ "traefik.http.routers.minihasswan.middlewares=dex@consulcatalog",
+ "traefik.http.routers.minihasswan.tls=true"
+ ],
+ "TaskName": "",
+ "Weights": null
+ }
+ ],
+ "ShutdownDelay": null,
+ "Spreads": null,
+ "StopAfterClientDisconnect": null,
+ "Tasks": [
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "image": "ghcr.io/sstent/minihass",
+ "ports": [
+ "http"
+ ]
+ },
+ "Constraints": null,
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": {
+ "CONSUL_HOST": "consul.service.dc1.consul",
+ "CONSUL_PORT": "8500"
+ },
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 5000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": null,
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 10,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "app",
+ "Resources": {
+ "CPU": 500,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 256,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 2,
+ "Delay": 15000000000,
+ "Interval": 1800000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": null,
+ "ShutdownDelay": 0,
+ "Templates": null,
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ }
+ ],
+ "Update": {
+ "AutoPromote": false,
+ "AutoRevert": false,
+ "Canary": 0,
+ "HealthCheck": "checks",
+ "HealthyDeadline": 300000000000,
+ "MaxParallel": 1,
+ "MinHealthyTime": 10000000000,
+ "ProgressDeadline": 600000000000,
+ "Stagger": 30000000000
+ },
+ "Volumes": null
+ }
+ ],
+ "Type": "service",
+ "UI": null,
+ "Update": {
+ "AutoPromote": false,
+ "AutoRevert": false,
+ "Canary": 0,
+ "HealthCheck": "",
+ "HealthyDeadline": 0,
+ "MaxParallel": 1,
+ "MinHealthyTime": 0,
+ "ProgressDeadline": 0,
+ "Stagger": 30000000000
+ },
+ "VaultNamespace": "",
+ "Version": 3,
+ "VersionTag": null
+}
\ No newline at end of file
diff --git a/nomad_backup/20251115_141532/navidrome.json b/nomad_backup/20251115_141532/navidrome.json
new file mode 100644
index 0000000..21bff4f
--- /dev/null
+++ b/nomad_backup/20251115_141532/navidrome.json
@@ -0,0 +1,439 @@
+{
+ "Affinities": null,
+ "AllAtOnce": false,
+ "Constraints": [
+ {
+ "LTarget": "${attr.unique.hostname}",
+ "Operand": "regexp",
+ "RTarget": "odroid.*"
+ }
+ ],
+ "ConsulNamespace": "",
+ "CreateIndex": 13928915,
+ "Datacenters": [
+ "dc1"
+ ],
+ "DispatchIdempotencyToken": "",
+ "Dispatched": false,
+ "ID": "navidrome",
+ "JobModifyIndex": 14171074,
+ "Meta": null,
+ "ModifyIndex": 14171094,
+ "Multiregion": null,
+ "Name": "navidrome",
+ "Namespace": "default",
+ "NodePool": "default",
+ "NomadTokenID": "",
+ "ParameterizedJob": null,
+ "ParentID": "",
+ "Payload": null,
+ "Periodic": null,
+ "Priority": 50,
+ "Region": "global",
+ "Spreads": null,
+ "Stable": true,
+ "Status": "running",
+ "StatusDescription": "",
+ "Stop": false,
+ "SubmitTime": 1762404740673447473,
+ "TaskGroups": [
+ {
+ "Affinities": null,
+ "Constraints": null,
+ "Consul": null,
+ "Count": 1,
+ "Disconnect": null,
+ "EphemeralDisk": {
+ "Migrate": false,
+ "SizeMB": 300,
+ "Sticky": false
+ },
+ "MaxClientDisconnect": null,
+ "Meta": null,
+ "Migrate": {
+ "HealthCheck": "checks",
+ "HealthyDeadline": 300000000000,
+ "MaxParallel": 1,
+ "MinHealthyTime": 10000000000
+ },
+ "Name": "navidrome",
+ "Networks": [
+ {
+ "ReservedPorts": [
+ {
+ "HostNetwork": "default",
+ "Label": "http",
+ "To": 4533,
+ "Value": 4533
+ }
+ ]
+ }
+ ],
+ "PreventRescheduleOnLost": false,
+ "ReschedulePolicy": {
+ "Attempts": 0,
+ "Delay": 30000000000,
+ "DelayFunction": "exponential",
+ "Interval": 0,
+ "MaxDelay": 3600000000000,
+ "Unlimited": true
+ },
+ "RestartPolicy": {
+ "Attempts": 2,
+ "Delay": 15000000000,
+ "Interval": 1800000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "Scaling": null,
+ "Services": null,
+ "ShutdownDelay": null,
+ "Spreads": null,
+ "StopAfterClientDisconnect": null,
+ "Tasks": [
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "args": [
+ "restore",
+ "-if-replica-exists",
+ "-if-db-not-exists",
+ "-o",
+ "/alloc/tmp/navidrome.db",
+ "sftp://root:odroid@192.168.4.63/mnt/Shares/litestream/navidrome.db"
+ ],
+ "volumes": [
+ "/mnt/configs/navidrome:/data"
+ ],
+ "image": "litestream/litestream:latest"
+ },
+ "Constraints": null,
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": null,
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 5000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": {
+ "Hook": "prestart",
+ "Sidecar": false
+ },
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 10,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "restore",
+ "Resources": {
+ "CPU": 100,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 300,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 2,
+ "Delay": 15000000000,
+ "Interval": 1800000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": null,
+ "ShutdownDelay": 0,
+ "Templates": null,
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ },
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "memory_hard_limit": "2048",
+ "ports": [
+ "http"
+ ],
+ "volumes": [
+ "/mnt/Public/Downloads/Clean_Music:/music/CleanMusic:ro",
+ "/mnt/Public/Downloads/news/slskd/downloads:/music/slskd:ro",
+ "/mnt/Public/Downloads/incoming_music:/music/incomingmusic:ro",
+ "/mnt/configs/navidrome:/data"
+ ],
+ "image": "ghcr.io/navidrome/navidrome:latest"
+ },
+ "Constraints": [
+ {
+ "LTarget": "${attr.consul.version}",
+ "Operand": "semver",
+ "RTarget": ">= 1.8.0"
+ }
+ ],
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": {
+ "ND_BACKUP_COUNT": "7",
+ "ND_BACKUP_SCHEDULE": "0 0 * * *",
+ "ND_LOGLEVEL": "debug",
+ "ND_DATAFOLDER": "/alloc/tmp/",
+ "ND_REVERSEPROXYWHITELIST": "0.0.0.0/0",
+ "ND_SCANSCHEDULE": "32 8-20 * * *",
+ "ND_SCANNER_GROUPALBUMRELEASES": "False",
+ "ND_REVERSEPROXYUSERHEADER": "X-Forwarded-User",
+ "ND_BACKUP_PATH": "/data",
+ "ND_CACHEFOLDER": "./data/cache"
+ },
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 5000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": null,
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 10,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "navidrome",
+ "Resources": {
+ "CPU": 100,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 128,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 2,
+ "Delay": 15000000000,
+ "Interval": 1800000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": [
+ {
+ "Address": "",
+ "AddressMode": "auto",
+ "CanaryMeta": null,
+ "CanaryTags": null,
+ "Checks": [
+ {
+ "AddressMode": "",
+ "Args": null,
+ "Body": "",
+ "CheckRestart": null,
+ "Command": "",
+ "Expose": false,
+ "FailuresBeforeCritical": 0,
+ "FailuresBeforeWarning": 0,
+ "GRPCService": "",
+ "GRPCUseTLS": false,
+ "Header": null,
+ "InitialStatus": "",
+ "Interval": 10000000000,
+ "Method": "",
+ "Name": "service: \"navidrome\" check",
+ "Notes": "",
+ "OnUpdate": "require_healthy",
+ "Path": "",
+ "PortLabel": "",
+ "Protocol": "",
+ "SuccessBeforePassing": 0,
+ "TLSServerName": "",
+ "TLSSkipVerify": false,
+ "TaskName": "navidrome",
+ "Timeout": 2000000000,
+ "Type": "tcp"
+ }
+ ],
+ "Cluster": "default",
+ "Connect": null,
+ "EnableTagOverride": false,
+ "Identity": null,
+ "Meta": null,
+ "Name": "navidrome",
+ "Namespace": "default",
+ "OnUpdate": "require_healthy",
+ "PortLabel": "http",
+ "Provider": "consul",
+ "TaggedAddresses": null,
+ "Tags": [
+ "navidrome",
+ "web",
+ "urlprefix-/navidrome",
+ "tools",
+ "traefik.http.routers.navidromelan.rule=Host(`navidrome.service.dc1.consul`)",
+ "traefik.http.routers.navidromewan.rule=Host(`fbleagh-m.ignorelist.com`)",
+ "traefik.http.routers.navidromewan.rule=Host(`m.fbleagh.duckdns.org`,`m.fbleagh.dedyn.io`)",
+ "traefik.http.routers.navidromewan.middlewares=dex@consulcatalog",
+ "traefik.http.routers.navidromewan.tls=true"
+ ],
+ "TaskName": "navidrome",
+ "Weights": null
+ }
+ ],
+ "ShutdownDelay": 0,
+ "Templates": null,
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ },
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "image": "litestream/litestream:latest",
+ "args": [
+ "replicate",
+ "/alloc/tmp/navidrome.db",
+ "sftp://root:odroid@192.168.4.63/mnt/Shares/litestream/navidrome.db"
+ ],
+ "volumes": [
+ "/mnt/configs/navidrome:/data"
+ ]
+ },
+ "Constraints": null,
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": null,
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 5000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": {
+ "Hook": "poststart",
+ "Sidecar": true
+ },
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 10,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "litestream",
+ "Resources": {
+ "CPU": 100,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 300,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 2,
+ "Delay": 15000000000,
+ "Interval": 1800000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": null,
+ "ShutdownDelay": 0,
+ "Templates": null,
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ }
+ ],
+ "Update": {
+ "AutoPromote": false,
+ "AutoRevert": false,
+ "Canary": 0,
+ "HealthCheck": "checks",
+ "HealthyDeadline": 300000000000,
+ "MaxParallel": 1,
+ "MinHealthyTime": 10000000000,
+ "ProgressDeadline": 600000000000,
+ "Stagger": 30000000000
+ },
+ "Volumes": null
+ }
+ ],
+ "Type": "service",
+ "UI": null,
+ "Update": {
+ "AutoPromote": false,
+ "AutoRevert": false,
+ "Canary": 0,
+ "HealthCheck": "",
+ "HealthyDeadline": 0,
+ "MaxParallel": 1,
+ "MinHealthyTime": 0,
+ "ProgressDeadline": 0,
+ "Stagger": 30000000000
+ },
+ "VaultNamespace": "",
+ "Version": 22,
+ "VersionTag": null
+}
\ No newline at end of file
diff --git a/nomad_backup/20251115_141532/nginx.json b/nomad_backup/20251115_141532/nginx.json
new file mode 100644
index 0000000..e655e7a
--- /dev/null
+++ b/nomad_backup/20251115_141532/nginx.json
@@ -0,0 +1,292 @@
+{
+ "Affinities": null,
+ "AllAtOnce": false,
+ "Constraints": null,
+ "ConsulNamespace": "",
+ "CreateIndex": 13996170,
+ "Datacenters": [
+ "dc1"
+ ],
+ "DispatchIdempotencyToken": "",
+ "Dispatched": false,
+ "ID": "nginx",
+ "JobModifyIndex": 13996170,
+ "Meta": null,
+ "ModifyIndex": 13996178,
+ "Multiregion": null,
+ "Name": "nginx",
+ "Namespace": "default",
+ "NodePool": "default",
+ "NomadTokenID": "",
+ "ParameterizedJob": null,
+ "ParentID": "",
+ "Payload": null,
+ "Periodic": null,
+ "Priority": 50,
+ "Region": "global",
+ "Spreads": null,
+ "Stable": true,
+ "Status": "running",
+ "StatusDescription": "",
+ "Stop": false,
+ "SubmitTime": 1757964378356074970,
+ "TaskGroups": [
+ {
+ "Affinities": null,
+ "Constraints": null,
+ "Consul": null,
+ "Count": 1,
+ "Disconnect": null,
+ "EphemeralDisk": {
+ "Migrate": false,
+ "SizeMB": 300,
+ "Sticky": false
+ },
+ "MaxClientDisconnect": null,
+ "Meta": null,
+ "Migrate": {
+ "HealthCheck": "checks",
+ "HealthyDeadline": 300000000000,
+ "MaxParallel": 1,
+ "MinHealthyTime": 10000000000
+ },
+ "Name": "nginx",
+ "Networks": [
+ {
+ "DynamicPorts": [
+ {
+ "HostNetwork": "default",
+ "Label": "http",
+ "To": 8080
+ }
+ ]
+ }
+ ],
+ "PreventRescheduleOnLost": false,
+ "ReschedulePolicy": {
+ "Attempts": 0,
+ "Delay": 30000000000,
+ "DelayFunction": "exponential",
+ "Interval": 0,
+ "MaxDelay": 3600000000000,
+ "Unlimited": true
+ },
+ "RestartPolicy": {
+ "Attempts": 2,
+ "Delay": 15000000000,
+ "Interval": 1800000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "Scaling": null,
+ "Services": null,
+ "ShutdownDelay": null,
+ "Spreads": null,
+ "StopAfterClientDisconnect": null,
+ "Tasks": [
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "volumes": [
+ "custom/default.conf:/etc/nginx/conf.d/default.conf"
+ ],
+ "image": "nginx",
+ "ports": [
+ "http"
+ ]
+ },
+ "Constraints": [
+ {
+ "LTarget": "${attr.consul.version}",
+ "Operand": "semver",
+ "RTarget": ">= 1.8.0"
+ }
+ ],
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": null,
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 5000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": null,
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 10,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "nginx",
+ "Resources": {
+ "CPU": 100,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 64,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 2,
+ "Delay": 15000000000,
+ "Interval": 1800000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": [
+ {
+ "Address": "",
+ "AddressMode": "auto",
+ "CanaryMeta": null,
+ "CanaryTags": null,
+ "Checks": [
+ {
+ "AddressMode": "",
+ "Args": null,
+ "Body": "",
+ "CheckRestart": null,
+ "Command": "",
+ "Expose": false,
+ "FailuresBeforeCritical": 0,
+ "FailuresBeforeWarning": 0,
+ "GRPCService": "",
+ "GRPCUseTLS": false,
+ "Header": null,
+ "InitialStatus": "",
+ "Interval": 10000000000,
+ "Method": "",
+ "Name": "service: \"nginx\" check",
+ "Notes": "",
+ "OnUpdate": "require_healthy",
+ "Path": "",
+ "PortLabel": "",
+ "Protocol": "",
+ "SuccessBeforePassing": 0,
+ "TLSServerName": "",
+ "TLSSkipVerify": false,
+ "TaskName": "nginx",
+ "Timeout": 2000000000,
+ "Type": "tcp"
+ }
+ ],
+ "Cluster": "default",
+ "Connect": null,
+ "EnableTagOverride": false,
+ "Identity": null,
+ "Meta": null,
+ "Name": "nginx",
+ "Namespace": "default",
+ "OnUpdate": "require_healthy",
+ "PortLabel": "http",
+ "Provider": "consul",
+ "TaggedAddresses": null,
+ "Tags": [
+ "nginx",
+ "web",
+ "urlprefix-/nginx",
+ "backend"
+ ],
+ "TaskName": "nginx",
+ "Weights": null
+ }
+ ],
+ "ShutdownDelay": 0,
+ "Templates": [
+ {
+ "ChangeMode": "restart",
+ "ChangeScript": null,
+ "ChangeSignal": "",
+ "DestPath": "custom/default.conf",
+ "EmbeddedTmpl": " server {\n listen 8080;\n server_name nginx.service.dc1.consul;\n location / {\n root /local/data;\n }\n }\n",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "{{",
+ "Once": false,
+ "Perms": "0644",
+ "RightDelim": "}}",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ },
+ {
+ "ChangeMode": "noop",
+ "ChangeScript": null,
+ "ChangeSignal": "",
+ "DestPath": "local/data/index.html",
+ "EmbeddedTmpl": " Local Services - HTTP/HTTPS
\n \n \n Node Environment Information:
\n node_id: {{ env \"node.unique.id\" }}
\n datacenter: {{ env \"NOMAD_DC\" }}\n
\n",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "{{",
+ "Once": false,
+ "Perms": "0644",
+ "RightDelim": "}}",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ }
+ ],
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ }
+ ],
+ "Update": {
+ "AutoPromote": false,
+ "AutoRevert": false,
+ "Canary": 0,
+ "HealthCheck": "checks",
+ "HealthyDeadline": 300000000000,
+ "MaxParallel": 1,
+ "MinHealthyTime": 10000000000,
+ "ProgressDeadline": 600000000000,
+ "Stagger": 30000000000
+ },
+ "Volumes": null
+ }
+ ],
+ "Type": "service",
+ "UI": null,
+ "Update": {
+ "AutoPromote": false,
+ "AutoRevert": false,
+ "Canary": 0,
+ "HealthCheck": "",
+ "HealthyDeadline": 0,
+ "MaxParallel": 1,
+ "MinHealthyTime": 0,
+ "ProgressDeadline": 0,
+ "Stagger": 30000000000
+ },
+ "VaultNamespace": "",
+ "Version": 0,
+ "VersionTag": null
+}
\ No newline at end of file
diff --git a/nomad_backup/20251115_141532/nzbget.json b/nomad_backup/20251115_141532/nzbget.json
new file mode 100644
index 0000000..1b91ea5
--- /dev/null
+++ b/nomad_backup/20251115_141532/nzbget.json
@@ -0,0 +1,650 @@
+{
+ "Affinities": null,
+ "AllAtOnce": false,
+ "Constraints": [
+ {
+ "LTarget": "${attr.kernel.name}",
+ "Operand": "=",
+ "RTarget": "linux"
+ },
+ {
+ "LTarget": "${attr.unique.hostname}",
+ "Operand": "regexp",
+ "RTarget": "odroid.*"
+ }
+ ],
+ "ConsulNamespace": "",
+ "CreateIndex": 13572065,
+ "Datacenters": [
+ "dc1"
+ ],
+ "DispatchIdempotencyToken": "",
+ "Dispatched": false,
+ "ID": "nzbget",
+ "JobModifyIndex": 14132455,
+ "Meta": null,
+ "ModifyIndex": 14199835,
+ "Multiregion": null,
+ "Name": "nzbget",
+ "Namespace": "default",
+ "NodePool": "default",
+ "NomadTokenID": "",
+ "ParameterizedJob": null,
+ "ParentID": "",
+ "Payload": null,
+ "Periodic": null,
+ "Priority": 50,
+ "Region": "global",
+ "Spreads": null,
+ "Stable": true,
+ "Status": "running",
+ "StatusDescription": "",
+ "Stop": false,
+ "SubmitTime": 1761418699860703923,
+ "TaskGroups": [
+ {
+ "Affinities": null,
+ "Constraints": null,
+ "Consul": null,
+ "Count": 1,
+ "Disconnect": null,
+ "EphemeralDisk": {
+ "Migrate": false,
+ "SizeMB": 300,
+ "Sticky": false
+ },
+ "MaxClientDisconnect": null,
+ "Meta": null,
+ "Migrate": {
+ "HealthCheck": "checks",
+ "HealthyDeadline": 300000000000,
+ "MaxParallel": 1,
+ "MinHealthyTime": 10000000000
+ },
+ "Name": "nzbget",
+ "Networks": [
+ {
+ "ReservedPorts": [
+ {
+ "HostNetwork": "default",
+ "Label": "shadowsocks",
+ "To": 8388,
+ "Value": 8338
+ },
+ {
+ "HostNetwork": "default",
+ "Label": "http_proxy",
+ "To": 8888,
+ "Value": 8888
+ },
+ {
+ "HostNetwork": "default",
+ "Label": "http_admin",
+ "To": 8000,
+ "Value": 8000
+ },
+ {
+ "HostNetwork": "default",
+ "Label": "sabnzb_admin",
+ "To": 8080,
+ "Value": 8080
+ },
+ {
+ "HostNetwork": "default",
+ "Label": "socks",
+ "To": 1080,
+ "Value": 1080
+ },
+ {
+ "HostNetwork": "default",
+ "Label": "nzbget",
+ "To": 6789,
+ "Value": 6789
+ }
+ ]
+ }
+ ],
+ "PreventRescheduleOnLost": false,
+ "ReschedulePolicy": {
+ "Attempts": 0,
+ "Delay": 30000000000,
+ "DelayFunction": "exponential",
+ "Interval": 0,
+ "MaxDelay": 3600000000000,
+ "Unlimited": true
+ },
+ "RestartPolicy": {
+ "Attempts": 8,
+ "Delay": 10000000000,
+ "Interval": 1200000000000,
+ "Mode": "delay",
+ "RenderTemplates": false
+ },
+ "Scaling": null,
+ "Services": null,
+ "ShutdownDelay": null,
+ "Spreads": null,
+ "StopAfterClientDisconnect": null,
+ "Tasks": [
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "memory_hard_limit": "1024",
+ "ports": [
+ "shadowsocks",
+ "nzbget",
+ "http_proxy",
+ "http_admin",
+ "sabnzb_admin",
+ "socks"
+ ],
+ "cap_add": [
+ "NET_ADMIN",
+ "NET_BIND_SERVICE"
+ ],
+ "volumes": [
+ "/etc/localtime:/etc/localtime"
+ ],
+ "devices": [
+ {
+ "host_path": "/dev/net/tun",
+ "container_path": "/dev/net/tun"
+ }
+ ],
+ "image": "qmcgaw/gluetun"
+ },
+ "Constraints": [
+ {
+ "LTarget": "${attr.consul.version}",
+ "Operand": "semver",
+ "RTarget": ">= 1.8.0"
+ }
+ ],
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": {
+ "FIREWALL_VPN_INPUT_PORTS": "56987",
+ "CITY": "Toronto",
+ "WIREGUARD_ADDRESS": "10.66.246.4/32",
+ "WIREGUARD_PRIVATE_KEY": "2FHwQX1jxk+qeMmXUtSGRc2kKF1WHeSCyIgHNW+7akA=",
+ "DOT_PROVIDERS": "cloudflare,google,quad9,quadrant",
+ "COUNTRY": "Canada",
+ "UPDATER_PERIOD": "24h",
+ "VPNSP": "mullvad",
+ "DOT": "off",
+ "VPN_TYPE": "wireguard",
+ "SHADOWSOCKS": "off",
+ "HTTPPROXY": "on",
+ "SHADOWSOCKS_PASSWORD": "farscape5"
+ },
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 5000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": {
+ "Hook": "prestart",
+ "Sidecar": true
+ },
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 10,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "ovpn-client",
+ "Resources": {
+ "CPU": 100,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 100,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 8,
+ "Delay": 10000000000,
+ "Interval": 1200000000000,
+ "Mode": "delay",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": [
+ {
+ "Address": "",
+ "AddressMode": "auto",
+ "CanaryMeta": null,
+ "CanaryTags": null,
+ "Checks": null,
+ "Cluster": "default",
+ "Connect": null,
+ "EnableTagOverride": false,
+ "Identity": null,
+ "Meta": null,
+ "Name": "nzbget-admin",
+ "Namespace": "default",
+ "OnUpdate": "require_healthy",
+ "PortLabel": "http_admin",
+ "Provider": "consul",
+ "TaggedAddresses": null,
+ "Tags": [
+ "global",
+ "ovpn-openpyn"
+ ],
+ "TaskName": "ovpn-client",
+ "Weights": null
+ },
+ {
+ "Address": "",
+ "AddressMode": "auto",
+ "CanaryMeta": null,
+ "CanaryTags": null,
+ "Checks": null,
+ "Cluster": "default",
+ "Connect": null,
+ "EnableTagOverride": false,
+ "Identity": null,
+ "Meta": null,
+ "Name": "nzbget",
+ "Namespace": "default",
+ "OnUpdate": "require_healthy",
+ "PortLabel": "shadowsocks",
+ "Provider": "consul",
+ "TaggedAddresses": null,
+ "Tags": [
+ "global",
+ "ovpn-openpyn"
+ ],
+ "TaskName": "ovpn-client",
+ "Weights": null
+ },
+ {
+ "Address": "",
+ "AddressMode": "auto",
+ "CanaryMeta": null,
+ "CanaryTags": null,
+ "Checks": null,
+ "Cluster": "default",
+ "Connect": null,
+ "EnableTagOverride": false,
+ "Identity": null,
+ "Meta": null,
+ "Name": "nzbget",
+ "Namespace": "default",
+ "OnUpdate": "require_healthy",
+ "PortLabel": "nzbget",
+ "Provider": "consul",
+ "TaggedAddresses": null,
+ "Tags": [
+ "global",
+ "ovpn-openpyn"
+ ],
+ "TaskName": "ovpn-client",
+ "Weights": null
+ },
+ {
+ "Address": "",
+ "AddressMode": "auto",
+ "CanaryMeta": null,
+ "CanaryTags": null,
+ "Checks": null,
+ "Cluster": "default",
+ "Connect": null,
+ "EnableTagOverride": false,
+ "Identity": null,
+ "Meta": null,
+ "Name": "sabnzb",
+ "Namespace": "default",
+ "OnUpdate": "require_healthy",
+ "PortLabel": "sabnzb_admin",
+ "Provider": "consul",
+ "TaggedAddresses": null,
+ "Tags": [
+ "global",
+ "ovpn-openpyn",
+ "enable_gocast",
+ "gocast_vip=192.168.1.247/32",
+ "gocast_nat=tcp:8080:8080",
+ "gocast_nat=udp:8080:8080"
+ ],
+ "TaskName": "ovpn-client",
+ "Weights": null
+ },
+ {
+ "Address": "",
+ "AddressMode": "auto",
+ "CanaryMeta": null,
+ "CanaryTags": null,
+ "Checks": null,
+ "Cluster": "default",
+ "Connect": null,
+ "EnableTagOverride": false,
+ "Identity": null,
+ "Meta": null,
+ "Name": "socks-nord",
+ "Namespace": "default",
+ "OnUpdate": "require_healthy",
+ "PortLabel": "socks",
+ "Provider": "consul",
+ "TaggedAddresses": null,
+ "Tags": [
+ "global",
+ "ovpn-openpyn",
+ "enable_gocast",
+ "gocast_vip=192.168.1.243/32",
+ "gocast_nat=tcp:1080:1080",
+ "gocast_nat=udp:1080:1080"
+ ],
+ "TaskName": "ovpn-client",
+ "Weights": null
+ }
+ ],
+ "ShutdownDelay": 0,
+ "Templates": null,
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ },
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "image": "serjs/go-socks5-proxy",
+ "network_mode": "container:ovpn-client-${NOMAD_ALLOC_ID}",
+ "memory_hard_limit": 256.0,
+ "devices": [
+ {
+ "host_path": "/dev/net/tun",
+ "container_path": "/dev/net/tun"
+ }
+ ]
+ },
+ "Constraints": null,
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": {
+ "REQUIRE_AUTH": "false"
+ },
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 5000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": null,
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 10,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "dante",
+ "Resources": {
+ "CPU": 64,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 128,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 8,
+ "Delay": 10000000000,
+ "Interval": 1200000000000,
+ "Mode": "delay",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": null,
+ "ShutdownDelay": 0,
+ "Templates": null,
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ },
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "image": "ghcr.io/sstent/rsync:v0.3.5",
+ "memory_hard_limit": "2048",
+ "volumes": [
+ "/mnt/configs/${NOMAD_GROUP_NAME}:/config",
+ "/mnt/Public/config/${NOMAD_GROUP_NAME}:/configbackup",
+ "/mnt/Public/config/locks:/locks"
+ ],
+ "args": [
+ "flock",
+ "-x",
+ "/locks/${NOMAD_GROUP_NAME}_rsync.lock",
+ "rsync",
+ "-avz",
+ "--exclude=Backups",
+ "/configbackup/",
+ "/config/",
+ "--delete-before"
+ ]
+ },
+ "Constraints": null,
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": null,
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 5000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": {
+ "Hook": "prestart",
+ "Sidecar": false
+ },
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 10,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "init",
+ "Resources": {
+ "CPU": 20,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 20,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 8,
+ "Delay": 10000000000,
+ "Interval": 1200000000000,
+ "Mode": "delay",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": null,
+ "ShutdownDelay": 0,
+ "Templates": null,
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ },
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "memory_hard_limit": "2048",
+ "volumes": [
+ "/mnt/configs/${NOMAD_GROUP_NAME}:/config",
+ "/mnt/Public/config/${NOMAD_GROUP_NAME}:/configbackup",
+ "/mnt/Public/config/locks:/locks"
+ ],
+ "args": [
+ "flock",
+ "-x",
+ "/locks/${NOMAD_GROUP_NAME}_rsync.lock",
+ "rsync",
+ "-avz",
+ "/config/",
+ "/configbackup/"
+ ],
+ "image": "ghcr.io/sstent/rsync:v0.3.5"
+ },
+ "Constraints": null,
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": null,
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 5000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": {
+ "Hook": "poststop",
+ "Sidecar": false
+ },
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 10,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "finalsync",
+ "Resources": {
+ "CPU": 20,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 20,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 8,
+ "Delay": 10000000000,
+ "Interval": 1200000000000,
+ "Mode": "delay",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": null,
+ "ShutdownDelay": 0,
+ "Templates": null,
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ }
+ ],
+ "Update": {
+ "AutoPromote": false,
+ "AutoRevert": false,
+ "Canary": 0,
+ "HealthCheck": "checks",
+ "HealthyDeadline": 300000000000,
+ "MaxParallel": 1,
+ "MinHealthyTime": 10000000000,
+ "ProgressDeadline": 600000000000,
+ "Stagger": 90000000000
+ },
+ "Volumes": null
+ }
+ ],
+ "Type": "service",
+ "UI": null,
+ "Update": {
+ "AutoPromote": false,
+ "AutoRevert": false,
+ "Canary": 0,
+ "HealthCheck": "",
+ "HealthyDeadline": 0,
+ "MaxParallel": 1,
+ "MinHealthyTime": 0,
+ "ProgressDeadline": 0,
+ "Stagger": 90000000000
+ },
+ "VaultNamespace": "",
+ "Version": 10,
+ "VersionTag": null
+}
\ No newline at end of file
diff --git a/nomad_backup/20251115_141532/postgres-15.json b/nomad_backup/20251115_141532/postgres-15.json
new file mode 100644
index 0000000..936fde0
--- /dev/null
+++ b/nomad_backup/20251115_141532/postgres-15.json
@@ -0,0 +1,203 @@
+{
+ "Affinities": null,
+ "AllAtOnce": false,
+ "Constraints": null,
+ "ConsulNamespace": "",
+ "CreateIndex": 13569048,
+ "Datacenters": [
+ "dc1"
+ ],
+ "DispatchIdempotencyToken": "",
+ "Dispatched": false,
+ "ID": "postgres-15",
+ "JobModifyIndex": 13569135,
+ "Meta": null,
+ "ModifyIndex": 13569135,
+ "Multiregion": null,
+ "Name": "postgres-15",
+ "Namespace": "default",
+ "NodePool": "default",
+ "NomadTokenID": "",
+ "ParameterizedJob": null,
+ "ParentID": "",
+ "Payload": null,
+ "Periodic": null,
+ "Priority": 50,
+ "Region": "global",
+ "Spreads": null,
+ "Stable": false,
+ "Status": "running",
+ "StatusDescription": "",
+ "Stop": false,
+ "SubmitTime": 1738279443028435823,
+ "TaskGroups": [
+ {
+ "Affinities": null,
+ "Constraints": null,
+ "Consul": {
+ "Cluster": "default",
+ "Namespace": "",
+ "Partition": ""
+ },
+ "Count": 1,
+ "Disconnect": null,
+ "EphemeralDisk": {
+ "Migrate": false,
+ "SizeMB": 300,
+ "Sticky": false
+ },
+ "MaxClientDisconnect": null,
+ "Meta": null,
+ "Migrate": null,
+ "Name": "group",
+ "Networks": [
+ {
+ "ReservedPorts": [
+ {
+ "HostNetwork": "default",
+ "Label": "api",
+ "To": 8008,
+ "Value": 8008
+ },
+ {
+ "HostNetwork": "default",
+ "Label": "pg",
+ "To": 5432,
+ "Value": 5432
+ }
+ ]
+ }
+ ],
+ "PreventRescheduleOnLost": false,
+ "ReschedulePolicy": null,
+ "RestartPolicy": {
+ "Attempts": 2,
+ "Delay": 15000000000,
+ "Interval": 1800000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "Scaling": null,
+ "Services": null,
+ "ShutdownDelay": null,
+ "Spreads": null,
+ "StopAfterClientDisconnect": null,
+ "Tasks": [
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "ports": [
+ "api",
+ "pg"
+ ],
+ "image": "ghcr.io/sstent/nomad-pgsql-patroni:latest",
+ "volumes": [
+ "/mnt/configs/postgres:/store"
+ ]
+ },
+ "Constraints": null,
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": {
+ "PGDATA": "/store/data"
+ },
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 5000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": null,
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 10,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "db",
+ "Resources": {
+ "CPU": 100,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 1024,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 2,
+ "Delay": 15000000000,
+ "Interval": 1800000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": null,
+ "ShutdownDelay": 0,
+ "Templates": [
+ {
+ "ChangeMode": "restart",
+ "ChangeScript": null,
+ "ChangeSignal": "",
+ "DestPath": "/secrets/patroni.yml",
+ "EmbeddedTmpl": "scope: postgres\nname: pg-{{env \"node.unique.name\"}}\nnamespace: /nomad\n\nrestapi:\n listen: 0.0.0.0:8008\n connect_address: {{env \"attr.unique.network.ip-address\"}}:8008\n\nconsul:\n scheme: http\n host: {{env \"attr.unique.network.ip-address\"}}:8500\n register_service: True\n\nbootstrap:\n dcs:\n ttl: 30\n loop_wait: 10\n retry_timeout: 10\n maximum_lag_on_failover: 1048576\n postgresql:\n use_pg_rewind: true\n use_slots: true\n parameters:\n timezone: 'UTC'\n max_connections: 100\n shared_preload_libraries: pg_stat_statements\n shared_buffers: 64MB\n work_mem: 16MB\n effective_cache_size: 512MB\n tcp_keepalives_idle: 300\n timescaledb.telemetry_level: off\n\n method: local\n local:\n command: /usr/local/bin/docker-initdb.sh\n keep_existing_recovery_conf: True\n\n initdb:\n - encoding: UTF8\n\n pg_hba:\n - host all postgres all md5\n - host replication repl all md5\n - host all all all md5\n\n users:\n postgres:\n password: postgres\n options:\n - createrole\n - createdb\n repl:\n password: repl\n options:\n - replication\n\npostgresql:\n listen: 0.0.0.0:5432\n connect_address: {{env \"attr.unique.network.ip-address\"}}:5432\n use_unix_socket: true\n data_dir: /store/data\n authentication:\n replication:\n username: repl\n password: repl\n superuser:\n username: postgres\n password: postgres\n",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "{{",
+ "Once": false,
+ "Perms": "0644",
+ "RightDelim": "}}",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ }
+ ],
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ }
+ ],
+ "Update": null,
+ "Volumes": null
+ }
+ ],
+ "Type": "system",
+ "UI": null,
+ "Update": {
+ "AutoPromote": false,
+ "AutoRevert": false,
+ "Canary": 0,
+ "HealthCheck": "",
+ "HealthyDeadline": 0,
+ "MaxParallel": 0,
+ "MinHealthyTime": 0,
+ "ProgressDeadline": 0,
+ "Stagger": 0
+ },
+ "VaultNamespace": "",
+ "Version": 2,
+ "VersionTag": null
+}
\ No newline at end of file
diff --git a/nomad_backup/20251115_141532/prometheus.json b/nomad_backup/20251115_141532/prometheus.json
new file mode 100644
index 0000000..100e45c
--- /dev/null
+++ b/nomad_backup/20251115_141532/prometheus.json
@@ -0,0 +1,565 @@
+{
+ "Affinities": null,
+ "AllAtOnce": false,
+ "Constraints": [
+ {
+ "LTarget": "${attr.kernel.name}",
+ "Operand": "=",
+ "RTarget": "linux"
+ },
+ {
+ "LTarget": "${attr.unique.hostname}",
+ "Operand": "regexp",
+ "RTarget": "odroid.*"
+ }
+ ],
+ "ConsulNamespace": "",
+ "CreateIndex": 13995677,
+ "Datacenters": [
+ "dc1"
+ ],
+ "DispatchIdempotencyToken": "",
+ "Dispatched": false,
+ "ID": "prometheus",
+ "JobModifyIndex": 13995677,
+ "Meta": null,
+ "ModifyIndex": 13995698,
+ "Multiregion": null,
+ "Name": "prometheus",
+ "Namespace": "default",
+ "NodePool": "default",
+ "NomadTokenID": "",
+ "ParameterizedJob": null,
+ "ParentID": "",
+ "Payload": null,
+ "Periodic": null,
+ "Priority": 50,
+ "Region": "global",
+ "Spreads": null,
+ "Stable": true,
+ "Status": "running",
+ "StatusDescription": "",
+ "Stop": false,
+ "SubmitTime": 1757952031065143001,
+ "TaskGroups": [
+ {
+ "Affinities": null,
+ "Constraints": [
+ {
+ "LTarget": "${attr.os.signals}",
+ "Operand": "set_contains",
+ "RTarget": "SIGHUP"
+ }
+ ],
+ "Consul": null,
+ "Count": 2,
+ "Disconnect": null,
+ "EphemeralDisk": {
+ "Migrate": false,
+ "SizeMB": 300,
+ "Sticky": false
+ },
+ "MaxClientDisconnect": null,
+ "Meta": null,
+ "Migrate": {
+ "HealthCheck": "checks",
+ "HealthyDeadline": 300000000000,
+ "MaxParallel": 1,
+ "MinHealthyTime": 10000000000
+ },
+ "Name": "prometheus",
+ "Networks": [
+ {
+ "ReservedPorts": [
+ {
+ "HostNetwork": "default",
+ "Label": "http",
+ "To": 9090,
+ "Value": 9090
+ },
+ {
+ "HostNetwork": "default",
+ "Label": "alerthttp",
+ "To": 9093,
+ "Value": 9093
+ },
+ {
+ "HostNetwork": "default",
+ "Label": "gotifybridge",
+ "To": 8080,
+ "Value": 9094
+ }
+ ]
+ }
+ ],
+ "PreventRescheduleOnLost": false,
+ "ReschedulePolicy": {
+ "Attempts": 0,
+ "Delay": 30000000000,
+ "DelayFunction": "exponential",
+ "Interval": 0,
+ "MaxDelay": 3600000000000,
+ "Unlimited": true
+ },
+ "RestartPolicy": {
+ "Attempts": 2,
+ "Delay": 10000000000,
+ "Interval": 60000000000,
+ "Mode": "delay",
+ "RenderTemplates": false
+ },
+ "Scaling": null,
+ "Services": null,
+ "ShutdownDelay": null,
+ "Spreads": null,
+ "StopAfterClientDisconnect": null,
+ "Tasks": [
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "memory_hard_limit": "512",
+ "ports": [
+ "http"
+ ],
+ "volumes": [
+ "local/prometheus.yml:/etc/prometheus/prometheus.yml",
+ "local/alerts.yml:/etc/prometheus/alerts.yml"
+ ],
+ "args": [
+ "--web.enable-admin-api",
+ "--config.file=/etc/prometheus/prometheus.yml"
+ ],
+ "image": "prom/prometheus",
+ "logging": [
+ {
+ "type": "json-file"
+ }
+ ]
+ },
+ "Constraints": [
+ {
+ "LTarget": "${attr.consul.version}",
+ "Operand": "semver",
+ "RTarget": ">= 1.8.0"
+ }
+ ],
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": null,
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 10000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": null,
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 15,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "prometheus",
+ "Resources": {
+ "CPU": 500,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 48,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 2,
+ "Delay": 10000000000,
+ "Interval": 60000000000,
+ "Mode": "delay",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": [
+ {
+ "Address": "",
+ "AddressMode": "auto",
+ "CanaryMeta": null,
+ "CanaryTags": null,
+ "Checks": [
+ {
+ "AddressMode": "",
+ "Args": null,
+ "Body": "",
+ "CheckRestart": null,
+ "Command": "",
+ "Expose": false,
+ "FailuresBeforeCritical": 0,
+ "FailuresBeforeWarning": 0,
+ "GRPCService": "",
+ "GRPCUseTLS": false,
+ "Header": null,
+ "InitialStatus": "",
+ "Interval": 10000000000,
+ "Method": "",
+ "Name": "alive",
+ "Notes": "",
+ "OnUpdate": "require_healthy",
+ "Path": "/status",
+ "PortLabel": "http",
+ "Protocol": "",
+ "SuccessBeforePassing": 0,
+ "TLSServerName": "",
+ "TLSSkipVerify": false,
+ "TaskName": "prometheus",
+ "Timeout": 120000000000,
+ "Type": "http"
+ }
+ ],
+ "Cluster": "default",
+ "Connect": null,
+ "EnableTagOverride": false,
+ "Identity": null,
+ "Meta": null,
+ "Name": "prometheus",
+ "Namespace": "default",
+ "OnUpdate": "require_healthy",
+ "PortLabel": "http",
+ "Provider": "consul",
+ "TaggedAddresses": null,
+ "Tags": [
+ "global",
+ "prometheus"
+ ],
+ "TaskName": "prometheus",
+ "Weights": null
+ }
+ ],
+ "ShutdownDelay": 0,
+ "Templates": [
+ {
+ "ChangeMode": "signal",
+ "ChangeScript": null,
+ "ChangeSignal": "SIGHUP",
+ "DestPath": "local/prometheus.yml",
+ "EmbeddedTmpl": "{{ key \"prometheus_yml\" }}",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "{{",
+ "Once": false,
+ "Perms": "0644",
+ "RightDelim": "}}",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ },
+ {
+ "ChangeMode": "restart",
+ "ChangeScript": null,
+ "ChangeSignal": "",
+ "DestPath": "local/alerts.yml",
+ "EmbeddedTmpl": "{{ key \"alerts\" }}",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "{{",
+ "Once": false,
+ "Perms": "0644",
+ "RightDelim": "}}",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ }
+ ],
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ },
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "args": [
+ "--config.file=/local/alertmanager.yml"
+ ],
+ "image": "prom/alertmanager",
+ "logging": [
+ {
+ "type": "json-file"
+ }
+ ],
+ "ports": [
+ "alerthttp"
+ ]
+ },
+ "Constraints": [
+ {
+ "LTarget": "${attr.consul.version}",
+ "Operand": "semver",
+ "RTarget": ">= 1.8.0"
+ }
+ ],
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": null,
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 10000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": null,
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 15,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "alertmanager",
+ "Resources": {
+ "CPU": 128,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 48,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 2,
+ "Delay": 10000000000,
+ "Interval": 60000000000,
+ "Mode": "delay",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": [
+ {
+ "Address": "",
+ "AddressMode": "auto",
+ "CanaryMeta": null,
+ "CanaryTags": null,
+ "Checks": [
+ {
+ "AddressMode": "",
+ "Args": null,
+ "Body": "",
+ "CheckRestart": null,
+ "Command": "",
+ "Expose": false,
+ "FailuresBeforeCritical": 0,
+ "FailuresBeforeWarning": 0,
+ "GRPCService": "",
+ "GRPCUseTLS": false,
+ "Header": null,
+ "InitialStatus": "",
+ "Interval": 60000000000,
+ "Method": "",
+ "Name": "alive",
+ "Notes": "",
+ "OnUpdate": "require_healthy",
+ "Path": "/status",
+ "PortLabel": "http",
+ "Protocol": "",
+ "SuccessBeforePassing": 0,
+ "TLSServerName": "",
+ "TLSSkipVerify": false,
+ "TaskName": "alertmanager",
+ "Timeout": 120000000000,
+ "Type": "http"
+ }
+ ],
+ "Cluster": "default",
+ "Connect": null,
+ "EnableTagOverride": false,
+ "Identity": null,
+ "Meta": null,
+ "Name": "alertmanager",
+ "Namespace": "default",
+ "OnUpdate": "require_healthy",
+ "PortLabel": "alerthttp",
+ "Provider": "consul",
+ "TaggedAddresses": null,
+ "Tags": [
+ "global",
+ "prometheus"
+ ],
+ "TaskName": "alertmanager",
+ "Weights": null
+ }
+ ],
+ "ShutdownDelay": 0,
+ "Templates": [
+ {
+ "ChangeMode": "restart",
+ "ChangeScript": null,
+ "ChangeSignal": "",
+ "DestPath": "local/alertmanager.yml",
+ "EmbeddedTmpl": "global:\nreceivers:\n - name: default-receiver\n - name: gotify-webhook\n webhook_configs:\n - url: \"http://prometheus.service.dc1.consul:9094/gotify_webhook\"\nroute:\n group_wait: 10s\n group_interval: 5m\n receiver: gotify-webhook\n repeat_interval: 3h\n\n",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "{{",
+ "Once": false,
+ "Perms": "0644",
+ "RightDelim": "}}",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ }
+ ],
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ },
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "ports": [
+ "gotifybridge"
+ ],
+ "args": [
+ "--debug"
+ ],
+ "image": "ghcr.io/druggeri/alertmanager_gotify_bridge"
+ },
+ "Constraints": null,
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": {
+ "GOTIFY_ENDPOINT": "http://gotify.service.dc1.consul/message",
+ "GOTIFY_TOKEN": "AQ7l7NVgtylam86"
+ },
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 5000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": null,
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 10,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "gotifybridge",
+ "Resources": {
+ "CPU": 100,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 300,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 2,
+ "Delay": 10000000000,
+ "Interval": 60000000000,
+ "Mode": "delay",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": null,
+ "ShutdownDelay": 0,
+ "Templates": null,
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ }
+ ],
+ "Update": {
+ "AutoPromote": false,
+ "AutoRevert": false,
+ "Canary": 0,
+ "HealthCheck": "checks",
+ "HealthyDeadline": 300000000000,
+ "MaxParallel": 1,
+ "MinHealthyTime": 10000000000,
+ "ProgressDeadline": 600000000000,
+ "Stagger": 60000000000
+ },
+ "Volumes": null
+ }
+ ],
+ "Type": "service",
+ "UI": null,
+ "Update": {
+ "AutoPromote": false,
+ "AutoRevert": false,
+ "Canary": 0,
+ "HealthCheck": "",
+ "HealthyDeadline": 0,
+ "MaxParallel": 1,
+ "MinHealthyTime": 0,
+ "ProgressDeadline": 0,
+ "Stagger": 60000000000
+ },
+ "VaultNamespace": "",
+ "Version": 0,
+ "VersionTag": null
+}
\ No newline at end of file
diff --git a/nomad_backup/20251115_141532/prowlarr.json b/nomad_backup/20251115_141532/prowlarr.json
new file mode 100644
index 0000000..52d7207
--- /dev/null
+++ b/nomad_backup/20251115_141532/prowlarr.json
@@ -0,0 +1,377 @@
+{
+ "Affinities": null,
+ "AllAtOnce": false,
+ "Constraints": [
+ {
+ "LTarget": "${attr.kernel.name}",
+ "Operand": "=",
+ "RTarget": "linux"
+ },
+ {
+ "LTarget": "${attr.unique.hostname}",
+ "Operand": "regexp",
+ "RTarget": "odroid.*"
+ }
+ ],
+ "ConsulNamespace": "",
+ "CreateIndex": 13572040,
+ "Datacenters": [
+ "dc1"
+ ],
+ "DispatchIdempotencyToken": "",
+ "Dispatched": false,
+ "ID": "prowlarr",
+ "JobModifyIndex": 13998460,
+ "Meta": null,
+ "ModifyIndex": 13998474,
+ "Multiregion": null,
+ "Name": "prowlarr",
+ "Namespace": "default",
+ "NodePool": "default",
+ "NomadTokenID": "",
+ "ParameterizedJob": null,
+ "ParentID": "",
+ "Payload": null,
+ "Periodic": null,
+ "Priority": 50,
+ "Region": "global",
+ "Spreads": null,
+ "Stable": true,
+ "Status": "running",
+ "StatusDescription": "",
+ "Stop": false,
+ "SubmitTime": 1758023732088250725,
+ "TaskGroups": [
+ {
+ "Affinities": null,
+ "Constraints": null,
+ "Consul": null,
+ "Count": 1,
+ "Disconnect": null,
+ "EphemeralDisk": {
+ "Migrate": false,
+ "SizeMB": 300,
+ "Sticky": false
+ },
+ "MaxClientDisconnect": null,
+ "Meta": null,
+ "Migrate": {
+ "HealthCheck": "checks",
+ "HealthyDeadline": 300000000000,
+ "MaxParallel": 1,
+ "MinHealthyTime": 10000000000
+ },
+ "Name": "prowlarr",
+ "Networks": [
+ {
+ "ReservedPorts": [
+ {
+ "HostNetwork": "default",
+ "Label": "http",
+ "To": 9696,
+ "Value": 9696
+ },
+ {
+ "HostNetwork": "default",
+ "Label": "http_flare",
+ "To": 8191,
+ "Value": 8191
+ }
+ ]
+ }
+ ],
+ "PreventRescheduleOnLost": false,
+ "ReschedulePolicy": {
+ "Attempts": 0,
+ "Delay": 30000000000,
+ "DelayFunction": "exponential",
+ "Interval": 0,
+ "MaxDelay": 3600000000000,
+ "Unlimited": true
+ },
+ "RestartPolicy": {
+ "Attempts": 2,
+ "Delay": 10000000000,
+ "Interval": 60000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "Scaling": null,
+ "Services": null,
+ "ShutdownDelay": null,
+ "Spreads": null,
+ "StopAfterClientDisconnect": null,
+ "Tasks": [
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "image": "ghcr.io/flaresolverr/flaresolverr:latest",
+ "ports": [
+ "http_flare"
+ ],
+ "dns_servers": [
+ "192.168.1.1",
+ "1.1.1.1"
+ ],
+ "memory_hard_limit": "2048",
+ "force_pull": false
+ },
+ "Constraints": [
+ {
+ "LTarget": "${attr.consul.version}",
+ "Operand": "semver",
+ "RTarget": ">= 1.8.0"
+ }
+ ],
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": null,
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 5000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": null,
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 10,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "flaresolver",
+ "Resources": {
+ "CPU": 100,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 300,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 2,
+ "Delay": 10000000000,
+ "Interval": 60000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": [
+ {
+ "Address": "",
+ "AddressMode": "auto",
+ "CanaryMeta": null,
+ "CanaryTags": null,
+ "Checks": null,
+ "Cluster": "default",
+ "Connect": null,
+ "EnableTagOverride": false,
+ "Identity": null,
+ "Meta": null,
+ "Name": "prowlarr",
+ "Namespace": "default",
+ "OnUpdate": "require_healthy",
+ "PortLabel": "http_flare",
+ "Provider": "consul",
+ "TaggedAddresses": null,
+ "Tags": [
+ "prowlarr_pg",
+ "tools"
+ ],
+ "TaskName": "flaresolver",
+ "Weights": null
+ }
+ ],
+ "ShutdownDelay": 0,
+ "Templates": null,
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ },
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "volumes": [
+ "/mnt/Public/configs/prowlarr_pg:/config"
+ ],
+ "force_pull": false,
+ "image": "ghcr.io/linuxserver/prowlarr:develop",
+ "ports": [
+ "http"
+ ],
+ "dns_servers": [
+ "192.168.1.1",
+ "1.1.1.1"
+ ],
+ "memory_hard_limit": "2048"
+ },
+ "Constraints": [
+ {
+ "LTarget": "${attr.consul.version}",
+ "Operand": "semver",
+ "RTarget": ">= 1.8.0"
+ }
+ ],
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": {
+ "PUID": "1000",
+ "PGID": "1000",
+ "TZ": "EST5EDT"
+ },
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 10000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": null,
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 15,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "prowlarr",
+ "Resources": {
+ "CPU": 500,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 256,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 2,
+ "Delay": 10000000000,
+ "Interval": 60000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": [
+ {
+ "Address": "",
+ "AddressMode": "auto",
+ "CanaryMeta": null,
+ "CanaryTags": null,
+ "Checks": null,
+ "Cluster": "default",
+ "Connect": null,
+ "EnableTagOverride": false,
+ "Identity": null,
+ "Meta": null,
+ "Name": "prowlarr",
+ "Namespace": "default",
+ "OnUpdate": "require_healthy",
+ "PortLabel": "http",
+ "Provider": "consul",
+ "TaggedAddresses": null,
+ "Tags": [
+ "prowlarr_pg",
+ "tools"
+ ],
+ "TaskName": "prowlarr",
+ "Weights": null
+ }
+ ],
+ "ShutdownDelay": 0,
+ "Templates": [
+ {
+ "ChangeMode": "restart",
+ "ChangeScript": null,
+ "ChangeSignal": "",
+ "DestPath": "local/healthcheck.sh",
+ "EmbeddedTmpl": "#!/bin/bash\n/usr/bin/curl -f \"http://localhost:${NOMAD_PORT_http}/api/v1/system/status?apikey=$(grep -Po '\\K.*?(?=<.*?>)' /config/config.xml)\"\n",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "{{",
+ "Once": false,
+ "Perms": "0755",
+ "RightDelim": "}}",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ }
+ ],
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ }
+ ],
+ "Update": {
+ "AutoPromote": false,
+ "AutoRevert": false,
+ "Canary": 0,
+ "HealthCheck": "checks",
+ "HealthyDeadline": 300000000000,
+ "MaxParallel": 1,
+ "MinHealthyTime": 10000000000,
+ "ProgressDeadline": 600000000000,
+ "Stagger": 10000000000
+ },
+ "Volumes": null
+ }
+ ],
+ "Type": "service",
+ "UI": null,
+ "Update": {
+ "AutoPromote": false,
+ "AutoRevert": false,
+ "Canary": 0,
+ "HealthCheck": "",
+ "HealthyDeadline": 0,
+ "MaxParallel": 1,
+ "MinHealthyTime": 0,
+ "ProgressDeadline": 0,
+ "Stagger": 10000000000
+ },
+ "VaultNamespace": "",
+ "Version": 2,
+ "VersionTag": null
+}
\ No newline at end of file
diff --git a/nomad_backup/20251115_141532/qautomate.json b/nomad_backup/20251115_141532/qautomate.json
new file mode 100644
index 0000000..9d6d374
--- /dev/null
+++ b/nomad_backup/20251115_141532/qautomate.json
@@ -0,0 +1,233 @@
+{
+ "Affinities": null,
+ "AllAtOnce": false,
+ "Constraints": null,
+ "ConsulNamespace": "",
+ "CreateIndex": 13930001,
+ "Datacenters": [
+ "dc1"
+ ],
+ "DispatchIdempotencyToken": "",
+ "Dispatched": false,
+ "ID": "qautomate",
+ "JobModifyIndex": 13930001,
+ "Meta": null,
+ "ModifyIndex": 13930001,
+ "Multiregion": null,
+ "Name": "qautomate",
+ "Namespace": "default",
+ "NodePool": "default",
+ "NomadTokenID": "",
+ "ParameterizedJob": null,
+ "ParentID": "",
+ "Payload": null,
+ "Periodic": {
+ "Enabled": true,
+ "ProhibitOverlap": true,
+ "Spec": "*/30 * * * *",
+ "SpecType": "cron",
+ "Specs": [],
+ "TimeZone": "UTC"
+ },
+ "Priority": 50,
+ "Region": "global",
+ "Spreads": null,
+ "Stable": false,
+ "Status": "running",
+ "StatusDescription": "",
+ "Stop": false,
+ "SubmitTime": 1755347244371339444,
+ "TaskGroups": [
+ {
+ "Affinities": null,
+ "Constraints": null,
+ "Consul": null,
+ "Count": 1,
+ "Disconnect": null,
+ "EphemeralDisk": {
+ "Migrate": false,
+ "SizeMB": 300,
+ "Sticky": false
+ },
+ "MaxClientDisconnect": null,
+ "Meta": null,
+ "Migrate": null,
+ "Name": "app",
+ "Networks": null,
+ "PreventRescheduleOnLost": false,
+ "ReschedulePolicy": {
+ "Attempts": 1,
+ "Delay": 5000000000,
+ "DelayFunction": "constant",
+ "Interval": 86400000000000,
+ "MaxDelay": 0,
+ "Unlimited": false
+ },
+ "RestartPolicy": {
+ "Attempts": 3,
+ "Delay": 15000000000,
+ "Interval": 86400000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "Scaling": null,
+ "Services": null,
+ "ShutdownDelay": null,
+ "Spreads": null,
+ "StopAfterClientDisconnect": null,
+ "Tasks": [
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "args": [
+ "-v",
+ "-c",
+ "/local/prestart.sh"
+ ],
+ "image": "ghcr.io/sstent/ubuntu-python3"
+ },
+ "Constraints": null,
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": null,
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 5000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": {
+ "Hook": "prestart",
+ "Sidecar": false
+ },
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 10,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "setup",
+ "Resources": {
+ "CPU": 100,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 300,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 3,
+ "Delay": 15000000000,
+ "Interval": 86400000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": null,
+ "ShutdownDelay": 0,
+ "Templates": [
+ {
+ "ChangeMode": "restart",
+ "ChangeScript": null,
+ "ChangeSignal": "",
+ "DestPath": "local/prestart.sh",
+ "EmbeddedTmpl": "#!/bin/bash\nrm /usr/lib/python3.11/EXTERNALLY-MANAGED\npip3 install qbittorrent-api --upgrade\npython3 /local/torrent_tagger.py\npython3 /local/torrent_tidy.py\n\n",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "{{",
+ "Once": false,
+ "Perms": "777",
+ "RightDelim": "}}",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ },
+ {
+ "ChangeMode": "restart",
+ "ChangeScript": null,
+ "ChangeSignal": "",
+ "DestPath": "local/torrent_tagger.py",
+ "EmbeddedTmpl": "{{ key \"functions/torrent_tagger\" }}",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "{{",
+ "Once": false,
+ "Perms": "0644",
+ "RightDelim": "}}",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ },
+ {
+ "ChangeMode": "restart",
+ "ChangeScript": null,
+ "ChangeSignal": "",
+ "DestPath": "local/torrent_tidy.py",
+ "EmbeddedTmpl": "{{ key \"functions/torrent_tidy\" }}",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "{{",
+ "Once": false,
+ "Perms": "0644",
+ "RightDelim": "}}",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ }
+ ],
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ }
+ ],
+ "Update": null,
+ "Volumes": null
+ }
+ ],
+ "Type": "batch",
+ "UI": null,
+ "Update": {
+ "AutoPromote": false,
+ "AutoRevert": false,
+ "Canary": 0,
+ "HealthCheck": "",
+ "HealthyDeadline": 0,
+ "MaxParallel": 0,
+ "MinHealthyTime": 0,
+ "ProgressDeadline": 0,
+ "Stagger": 0
+ },
+ "VaultNamespace": "",
+ "Version": 0,
+ "VersionTag": null
+}
\ No newline at end of file
diff --git a/nomad_backup/20251115_141532/qautomate_periodic-1763231400.json b/nomad_backup/20251115_141532/qautomate_periodic-1763231400.json
new file mode 100644
index 0000000..5fac92d
--- /dev/null
+++ b/nomad_backup/20251115_141532/qautomate_periodic-1763231400.json
@@ -0,0 +1,226 @@
+{
+ "Affinities": null,
+ "AllAtOnce": false,
+ "Constraints": null,
+ "ConsulNamespace": "",
+ "CreateIndex": 14202455,
+ "Datacenters": [
+ "dc1"
+ ],
+ "DispatchIdempotencyToken": "",
+ "Dispatched": false,
+ "ID": "qautomate/periodic-1763231400",
+ "JobModifyIndex": 14202455,
+ "Meta": null,
+ "ModifyIndex": 14202464,
+ "Multiregion": null,
+ "Name": "qautomate/periodic-1763231400",
+ "Namespace": "default",
+ "NodePool": "default",
+ "NomadTokenID": "",
+ "ParameterizedJob": null,
+ "ParentID": "qautomate",
+ "Payload": null,
+ "Periodic": null,
+ "Priority": 50,
+ "Region": "global",
+ "Spreads": null,
+ "Stable": false,
+ "Status": "dead",
+ "StatusDescription": "",
+ "Stop": false,
+ "SubmitTime": 1763231400001780238,
+ "TaskGroups": [
+ {
+ "Affinities": null,
+ "Constraints": null,
+ "Consul": null,
+ "Count": 1,
+ "Disconnect": null,
+ "EphemeralDisk": {
+ "Migrate": false,
+ "SizeMB": 300,
+ "Sticky": false
+ },
+ "MaxClientDisconnect": null,
+ "Meta": null,
+ "Migrate": null,
+ "Name": "app",
+ "Networks": null,
+ "PreventRescheduleOnLost": false,
+ "ReschedulePolicy": {
+ "Attempts": 1,
+ "Delay": 5000000000,
+ "DelayFunction": "constant",
+ "Interval": 86400000000000,
+ "MaxDelay": 0,
+ "Unlimited": false
+ },
+ "RestartPolicy": {
+ "Attempts": 3,
+ "Delay": 15000000000,
+ "Interval": 86400000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "Scaling": null,
+ "Services": null,
+ "ShutdownDelay": null,
+ "Spreads": null,
+ "StopAfterClientDisconnect": null,
+ "Tasks": [
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "args": [
+ "-v",
+ "-c",
+ "/local/prestart.sh"
+ ],
+ "image": "ghcr.io/sstent/ubuntu-python3"
+ },
+ "Constraints": null,
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": null,
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 5000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": {
+ "Hook": "prestart",
+ "Sidecar": false
+ },
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 10,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "setup",
+ "Resources": {
+ "CPU": 100,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 300,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 3,
+ "Delay": 15000000000,
+ "Interval": 86400000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": null,
+ "ShutdownDelay": 0,
+ "Templates": [
+ {
+ "ChangeMode": "restart",
+ "ChangeScript": null,
+ "ChangeSignal": "",
+ "DestPath": "local/prestart.sh",
+ "EmbeddedTmpl": "#!/bin/bash\nrm /usr/lib/python3.11/EXTERNALLY-MANAGED\npip3 install qbittorrent-api --upgrade\npython3 /local/torrent_tagger.py\npython3 /local/torrent_tidy.py\n\n",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "{{",
+ "Once": false,
+ "Perms": "777",
+ "RightDelim": "}}",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ },
+ {
+ "ChangeMode": "restart",
+ "ChangeScript": null,
+ "ChangeSignal": "",
+ "DestPath": "local/torrent_tagger.py",
+ "EmbeddedTmpl": "{{ key \"functions/torrent_tagger\" }}",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "{{",
+ "Once": false,
+ "Perms": "0644",
+ "RightDelim": "}}",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ },
+ {
+ "ChangeMode": "restart",
+ "ChangeScript": null,
+ "ChangeSignal": "",
+ "DestPath": "local/torrent_tidy.py",
+ "EmbeddedTmpl": "{{ key \"functions/torrent_tidy\" }}",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "{{",
+ "Once": false,
+ "Perms": "0644",
+ "RightDelim": "}}",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ }
+ ],
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ }
+ ],
+ "Update": null,
+ "Volumes": null
+ }
+ ],
+ "Type": "batch",
+ "UI": null,
+ "Update": {
+ "AutoPromote": false,
+ "AutoRevert": false,
+ "Canary": 0,
+ "HealthCheck": "",
+ "HealthyDeadline": 0,
+ "MaxParallel": 0,
+ "MinHealthyTime": 0,
+ "ProgressDeadline": 0,
+ "Stagger": 0
+ },
+ "VaultNamespace": "",
+ "Version": 0,
+ "VersionTag": null
+}
\ No newline at end of file
diff --git a/nomad_backup/20251115_141532/qautomate_periodic-1763233200.json b/nomad_backup/20251115_141532/qautomate_periodic-1763233200.json
new file mode 100644
index 0000000..61174fb
--- /dev/null
+++ b/nomad_backup/20251115_141532/qautomate_periodic-1763233200.json
@@ -0,0 +1,226 @@
+{
+ "Affinities": null,
+ "AllAtOnce": false,
+ "Constraints": null,
+ "ConsulNamespace": "",
+ "CreateIndex": 14202496,
+ "Datacenters": [
+ "dc1"
+ ],
+ "DispatchIdempotencyToken": "",
+ "Dispatched": false,
+ "ID": "qautomate/periodic-1763233200",
+ "JobModifyIndex": 14202496,
+ "Meta": null,
+ "ModifyIndex": 14202504,
+ "Multiregion": null,
+ "Name": "qautomate/periodic-1763233200",
+ "Namespace": "default",
+ "NodePool": "default",
+ "NomadTokenID": "",
+ "ParameterizedJob": null,
+ "ParentID": "qautomate",
+ "Payload": null,
+ "Periodic": null,
+ "Priority": 50,
+ "Region": "global",
+ "Spreads": null,
+ "Stable": false,
+ "Status": "dead",
+ "StatusDescription": "",
+ "Stop": false,
+ "SubmitTime": 1763233200005089389,
+ "TaskGroups": [
+ {
+ "Affinities": null,
+ "Constraints": null,
+ "Consul": null,
+ "Count": 1,
+ "Disconnect": null,
+ "EphemeralDisk": {
+ "Migrate": false,
+ "SizeMB": 300,
+ "Sticky": false
+ },
+ "MaxClientDisconnect": null,
+ "Meta": null,
+ "Migrate": null,
+ "Name": "app",
+ "Networks": null,
+ "PreventRescheduleOnLost": false,
+ "ReschedulePolicy": {
+ "Attempts": 1,
+ "Delay": 5000000000,
+ "DelayFunction": "constant",
+ "Interval": 86400000000000,
+ "MaxDelay": 0,
+ "Unlimited": false
+ },
+ "RestartPolicy": {
+ "Attempts": 3,
+ "Delay": 15000000000,
+ "Interval": 86400000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "Scaling": null,
+ "Services": null,
+ "ShutdownDelay": null,
+ "Spreads": null,
+ "StopAfterClientDisconnect": null,
+ "Tasks": [
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "args": [
+ "-v",
+ "-c",
+ "/local/prestart.sh"
+ ],
+ "image": "ghcr.io/sstent/ubuntu-python3"
+ },
+ "Constraints": null,
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": null,
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 5000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": {
+ "Hook": "prestart",
+ "Sidecar": false
+ },
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 10,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "setup",
+ "Resources": {
+ "CPU": 100,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 300,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 3,
+ "Delay": 15000000000,
+ "Interval": 86400000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": null,
+ "ShutdownDelay": 0,
+ "Templates": [
+ {
+ "ChangeMode": "restart",
+ "ChangeScript": null,
+ "ChangeSignal": "",
+ "DestPath": "local/prestart.sh",
+ "EmbeddedTmpl": "#!/bin/bash\nrm /usr/lib/python3.11/EXTERNALLY-MANAGED\npip3 install qbittorrent-api --upgrade\npython3 /local/torrent_tagger.py\npython3 /local/torrent_tidy.py\n\n",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "{{",
+ "Once": false,
+ "Perms": "777",
+ "RightDelim": "}}",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ },
+ {
+ "ChangeMode": "restart",
+ "ChangeScript": null,
+ "ChangeSignal": "",
+ "DestPath": "local/torrent_tagger.py",
+ "EmbeddedTmpl": "{{ key \"functions/torrent_tagger\" }}",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "{{",
+ "Once": false,
+ "Perms": "0644",
+ "RightDelim": "}}",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ },
+ {
+ "ChangeMode": "restart",
+ "ChangeScript": null,
+ "ChangeSignal": "",
+ "DestPath": "local/torrent_tidy.py",
+ "EmbeddedTmpl": "{{ key \"functions/torrent_tidy\" }}",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "{{",
+ "Once": false,
+ "Perms": "0644",
+ "RightDelim": "}}",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ }
+ ],
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ }
+ ],
+ "Update": null,
+ "Volumes": null
+ }
+ ],
+ "Type": "batch",
+ "UI": null,
+ "Update": {
+ "AutoPromote": false,
+ "AutoRevert": false,
+ "Canary": 0,
+ "HealthCheck": "",
+ "HealthyDeadline": 0,
+ "MaxParallel": 0,
+ "MinHealthyTime": 0,
+ "ProgressDeadline": 0,
+ "Stagger": 0
+ },
+ "VaultNamespace": "",
+ "Version": 0,
+ "VersionTag": null
+}
\ No newline at end of file
diff --git a/nomad_backup/20251115_141532/qautomate_periodic-1763235000.json b/nomad_backup/20251115_141532/qautomate_periodic-1763235000.json
new file mode 100644
index 0000000..e2aeabc
--- /dev/null
+++ b/nomad_backup/20251115_141532/qautomate_periodic-1763235000.json
@@ -0,0 +1,226 @@
+{
+ "Affinities": null,
+ "AllAtOnce": false,
+ "Constraints": null,
+ "ConsulNamespace": "",
+ "CreateIndex": 14202549,
+ "Datacenters": [
+ "dc1"
+ ],
+ "DispatchIdempotencyToken": "",
+ "Dispatched": false,
+ "ID": "qautomate/periodic-1763235000",
+ "JobModifyIndex": 14202549,
+ "Meta": null,
+ "ModifyIndex": 14202558,
+ "Multiregion": null,
+ "Name": "qautomate/periodic-1763235000",
+ "Namespace": "default",
+ "NodePool": "default",
+ "NomadTokenID": "",
+ "ParameterizedJob": null,
+ "ParentID": "qautomate",
+ "Payload": null,
+ "Periodic": null,
+ "Priority": 50,
+ "Region": "global",
+ "Spreads": null,
+ "Stable": false,
+ "Status": "dead",
+ "StatusDescription": "",
+ "Stop": false,
+ "SubmitTime": 1763235000002643660,
+ "TaskGroups": [
+ {
+ "Affinities": null,
+ "Constraints": null,
+ "Consul": null,
+ "Count": 1,
+ "Disconnect": null,
+ "EphemeralDisk": {
+ "Migrate": false,
+ "SizeMB": 300,
+ "Sticky": false
+ },
+ "MaxClientDisconnect": null,
+ "Meta": null,
+ "Migrate": null,
+ "Name": "app",
+ "Networks": null,
+ "PreventRescheduleOnLost": false,
+ "ReschedulePolicy": {
+ "Attempts": 1,
+ "Delay": 5000000000,
+ "DelayFunction": "constant",
+ "Interval": 86400000000000,
+ "MaxDelay": 0,
+ "Unlimited": false
+ },
+ "RestartPolicy": {
+ "Attempts": 3,
+ "Delay": 15000000000,
+ "Interval": 86400000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "Scaling": null,
+ "Services": null,
+ "ShutdownDelay": null,
+ "Spreads": null,
+ "StopAfterClientDisconnect": null,
+ "Tasks": [
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "image": "ghcr.io/sstent/ubuntu-python3",
+ "args": [
+ "-v",
+ "-c",
+ "/local/prestart.sh"
+ ]
+ },
+ "Constraints": null,
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": null,
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 5000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": {
+ "Hook": "prestart",
+ "Sidecar": false
+ },
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 10,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "setup",
+ "Resources": {
+ "CPU": 100,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 300,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 3,
+ "Delay": 15000000000,
+ "Interval": 86400000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": null,
+ "ShutdownDelay": 0,
+ "Templates": [
+ {
+ "ChangeMode": "restart",
+ "ChangeScript": null,
+ "ChangeSignal": "",
+ "DestPath": "local/prestart.sh",
+ "EmbeddedTmpl": "#!/bin/bash\nrm /usr/lib/python3.11/EXTERNALLY-MANAGED\npip3 install qbittorrent-api --upgrade\npython3 /local/torrent_tagger.py\npython3 /local/torrent_tidy.py\n\n",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "{{",
+ "Once": false,
+ "Perms": "777",
+ "RightDelim": "}}",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ },
+ {
+ "ChangeMode": "restart",
+ "ChangeScript": null,
+ "ChangeSignal": "",
+ "DestPath": "local/torrent_tagger.py",
+ "EmbeddedTmpl": "{{ key \"functions/torrent_tagger\" }}",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "{{",
+ "Once": false,
+ "Perms": "0644",
+ "RightDelim": "}}",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ },
+ {
+ "ChangeMode": "restart",
+ "ChangeScript": null,
+ "ChangeSignal": "",
+ "DestPath": "local/torrent_tidy.py",
+ "EmbeddedTmpl": "{{ key \"functions/torrent_tidy\" }}",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "{{",
+ "Once": false,
+ "Perms": "0644",
+ "RightDelim": "}}",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ }
+ ],
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ }
+ ],
+ "Update": null,
+ "Volumes": null
+ }
+ ],
+ "Type": "batch",
+ "UI": null,
+ "Update": {
+ "AutoPromote": false,
+ "AutoRevert": false,
+ "Canary": 0,
+ "HealthCheck": "",
+ "HealthyDeadline": 0,
+ "MaxParallel": 0,
+ "MinHealthyTime": 0,
+ "ProgressDeadline": 0,
+ "Stagger": 0
+ },
+ "VaultNamespace": "",
+ "Version": 0,
+ "VersionTag": null
+}
\ No newline at end of file
diff --git a/nomad_backup/20251115_141532/qautomate_periodic-1763236800.json b/nomad_backup/20251115_141532/qautomate_periodic-1763236800.json
new file mode 100644
index 0000000..4b7abcc
--- /dev/null
+++ b/nomad_backup/20251115_141532/qautomate_periodic-1763236800.json
@@ -0,0 +1,226 @@
+{
+ "Affinities": null,
+ "AllAtOnce": false,
+ "Constraints": null,
+ "ConsulNamespace": "",
+ "CreateIndex": 14202593,
+ "Datacenters": [
+ "dc1"
+ ],
+ "DispatchIdempotencyToken": "",
+ "Dispatched": false,
+ "ID": "qautomate/periodic-1763236800",
+ "JobModifyIndex": 14202593,
+ "Meta": null,
+ "ModifyIndex": 14202601,
+ "Multiregion": null,
+ "Name": "qautomate/periodic-1763236800",
+ "Namespace": "default",
+ "NodePool": "default",
+ "NomadTokenID": "",
+ "ParameterizedJob": null,
+ "ParentID": "qautomate",
+ "Payload": null,
+ "Periodic": null,
+ "Priority": 50,
+ "Region": "global",
+ "Spreads": null,
+ "Stable": false,
+ "Status": "dead",
+ "StatusDescription": "",
+ "Stop": false,
+ "SubmitTime": 1763236800001635486,
+ "TaskGroups": [
+ {
+ "Affinities": null,
+ "Constraints": null,
+ "Consul": null,
+ "Count": 1,
+ "Disconnect": null,
+ "EphemeralDisk": {
+ "Migrate": false,
+ "SizeMB": 300,
+ "Sticky": false
+ },
+ "MaxClientDisconnect": null,
+ "Meta": null,
+ "Migrate": null,
+ "Name": "app",
+ "Networks": null,
+ "PreventRescheduleOnLost": false,
+ "ReschedulePolicy": {
+ "Attempts": 1,
+ "Delay": 5000000000,
+ "DelayFunction": "constant",
+ "Interval": 86400000000000,
+ "MaxDelay": 0,
+ "Unlimited": false
+ },
+ "RestartPolicy": {
+ "Attempts": 3,
+ "Delay": 15000000000,
+ "Interval": 86400000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "Scaling": null,
+ "Services": null,
+ "ShutdownDelay": null,
+ "Spreads": null,
+ "StopAfterClientDisconnect": null,
+ "Tasks": [
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "args": [
+ "-v",
+ "-c",
+ "/local/prestart.sh"
+ ],
+ "image": "ghcr.io/sstent/ubuntu-python3"
+ },
+ "Constraints": null,
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": null,
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 5000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": {
+ "Hook": "prestart",
+ "Sidecar": false
+ },
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 10,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "setup",
+ "Resources": {
+ "CPU": 100,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 300,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 3,
+ "Delay": 15000000000,
+ "Interval": 86400000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": null,
+ "ShutdownDelay": 0,
+ "Templates": [
+ {
+ "ChangeMode": "restart",
+ "ChangeScript": null,
+ "ChangeSignal": "",
+ "DestPath": "local/prestart.sh",
+ "EmbeddedTmpl": "#!/bin/bash\nrm /usr/lib/python3.11/EXTERNALLY-MANAGED\npip3 install qbittorrent-api --upgrade\npython3 /local/torrent_tagger.py\npython3 /local/torrent_tidy.py\n\n",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "{{",
+ "Once": false,
+ "Perms": "777",
+ "RightDelim": "}}",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ },
+ {
+ "ChangeMode": "restart",
+ "ChangeScript": null,
+ "ChangeSignal": "",
+ "DestPath": "local/torrent_tagger.py",
+ "EmbeddedTmpl": "{{ key \"functions/torrent_tagger\" }}",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "{{",
+ "Once": false,
+ "Perms": "0644",
+ "RightDelim": "}}",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ },
+ {
+ "ChangeMode": "restart",
+ "ChangeScript": null,
+ "ChangeSignal": "",
+ "DestPath": "local/torrent_tidy.py",
+ "EmbeddedTmpl": "{{ key \"functions/torrent_tidy\" }}",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "{{",
+ "Once": false,
+ "Perms": "0644",
+ "RightDelim": "}}",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ }
+ ],
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ }
+ ],
+ "Update": null,
+ "Volumes": null
+ }
+ ],
+ "Type": "batch",
+ "UI": null,
+ "Update": {
+ "AutoPromote": false,
+ "AutoRevert": false,
+ "Canary": 0,
+ "HealthCheck": "",
+ "HealthyDeadline": 0,
+ "MaxParallel": 0,
+ "MinHealthyTime": 0,
+ "ProgressDeadline": 0,
+ "Stagger": 0
+ },
+ "VaultNamespace": "",
+ "Version": 0,
+ "VersionTag": null
+}
\ No newline at end of file
diff --git a/nomad_backup/20251115_141532/qautomate_periodic-1763238600.json b/nomad_backup/20251115_141532/qautomate_periodic-1763238600.json
new file mode 100644
index 0000000..b20c705
--- /dev/null
+++ b/nomad_backup/20251115_141532/qautomate_periodic-1763238600.json
@@ -0,0 +1,226 @@
+{
+ "Affinities": null,
+ "AllAtOnce": false,
+ "Constraints": null,
+ "ConsulNamespace": "",
+ "CreateIndex": 14202645,
+ "Datacenters": [
+ "dc1"
+ ],
+ "DispatchIdempotencyToken": "",
+ "Dispatched": false,
+ "ID": "qautomate/periodic-1763238600",
+ "JobModifyIndex": 14202645,
+ "Meta": null,
+ "ModifyIndex": 14202653,
+ "Multiregion": null,
+ "Name": "qautomate/periodic-1763238600",
+ "Namespace": "default",
+ "NodePool": "default",
+ "NomadTokenID": "",
+ "ParameterizedJob": null,
+ "ParentID": "qautomate",
+ "Payload": null,
+ "Periodic": null,
+ "Priority": 50,
+ "Region": "global",
+ "Spreads": null,
+ "Stable": false,
+ "Status": "dead",
+ "StatusDescription": "",
+ "Stop": false,
+ "SubmitTime": 1763238600002832252,
+ "TaskGroups": [
+ {
+ "Affinities": null,
+ "Constraints": null,
+ "Consul": null,
+ "Count": 1,
+ "Disconnect": null,
+ "EphemeralDisk": {
+ "Migrate": false,
+ "SizeMB": 300,
+ "Sticky": false
+ },
+ "MaxClientDisconnect": null,
+ "Meta": null,
+ "Migrate": null,
+ "Name": "app",
+ "Networks": null,
+ "PreventRescheduleOnLost": false,
+ "ReschedulePolicy": {
+ "Attempts": 1,
+ "Delay": 5000000000,
+ "DelayFunction": "constant",
+ "Interval": 86400000000000,
+ "MaxDelay": 0,
+ "Unlimited": false
+ },
+ "RestartPolicy": {
+ "Attempts": 3,
+ "Delay": 15000000000,
+ "Interval": 86400000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "Scaling": null,
+ "Services": null,
+ "ShutdownDelay": null,
+ "Spreads": null,
+ "StopAfterClientDisconnect": null,
+ "Tasks": [
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "image": "ghcr.io/sstent/ubuntu-python3",
+ "args": [
+ "-v",
+ "-c",
+ "/local/prestart.sh"
+ ]
+ },
+ "Constraints": null,
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": null,
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 5000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": {
+ "Hook": "prestart",
+ "Sidecar": false
+ },
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 10,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "setup",
+ "Resources": {
+ "CPU": 100,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 300,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 3,
+ "Delay": 15000000000,
+ "Interval": 86400000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": null,
+ "ShutdownDelay": 0,
+ "Templates": [
+ {
+ "ChangeMode": "restart",
+ "ChangeScript": null,
+ "ChangeSignal": "",
+ "DestPath": "local/prestart.sh",
+ "EmbeddedTmpl": "#!/bin/bash\nrm /usr/lib/python3.11/EXTERNALLY-MANAGED\npip3 install qbittorrent-api --upgrade\npython3 /local/torrent_tagger.py\npython3 /local/torrent_tidy.py\n\n",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "{{",
+ "Once": false,
+ "Perms": "777",
+ "RightDelim": "}}",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ },
+ {
+ "ChangeMode": "restart",
+ "ChangeScript": null,
+ "ChangeSignal": "",
+ "DestPath": "local/torrent_tagger.py",
+ "EmbeddedTmpl": "{{ key \"functions/torrent_tagger\" }}",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "{{",
+ "Once": false,
+ "Perms": "0644",
+ "RightDelim": "}}",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ },
+ {
+ "ChangeMode": "restart",
+ "ChangeScript": null,
+ "ChangeSignal": "",
+ "DestPath": "local/torrent_tidy.py",
+ "EmbeddedTmpl": "{{ key \"functions/torrent_tidy\" }}",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "{{",
+ "Once": false,
+ "Perms": "0644",
+ "RightDelim": "}}",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ }
+ ],
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ }
+ ],
+ "Update": null,
+ "Volumes": null
+ }
+ ],
+ "Type": "batch",
+ "UI": null,
+ "Update": {
+ "AutoPromote": false,
+ "AutoRevert": false,
+ "Canary": 0,
+ "HealthCheck": "",
+ "HealthyDeadline": 0,
+ "MaxParallel": 0,
+ "MinHealthyTime": 0,
+ "ProgressDeadline": 0,
+ "Stagger": 0
+ },
+ "VaultNamespace": "",
+ "Version": 0,
+ "VersionTag": null
+}
\ No newline at end of file
diff --git a/nomad_backup/20251115_141532/qautomate_periodic-1763240400.json b/nomad_backup/20251115_141532/qautomate_periodic-1763240400.json
new file mode 100644
index 0000000..d81a8b0
--- /dev/null
+++ b/nomad_backup/20251115_141532/qautomate_periodic-1763240400.json
@@ -0,0 +1,226 @@
+{
+ "Affinities": null,
+ "AllAtOnce": false,
+ "Constraints": null,
+ "ConsulNamespace": "",
+ "CreateIndex": 14202755,
+ "Datacenters": [
+ "dc1"
+ ],
+ "DispatchIdempotencyToken": "",
+ "Dispatched": false,
+ "ID": "qautomate/periodic-1763240400",
+ "JobModifyIndex": 14202755,
+ "Meta": null,
+ "ModifyIndex": 14202920,
+ "Multiregion": null,
+ "Name": "qautomate/periodic-1763240400",
+ "Namespace": "default",
+ "NodePool": "default",
+ "NomadTokenID": "",
+ "ParameterizedJob": null,
+ "ParentID": "qautomate",
+ "Payload": null,
+ "Periodic": null,
+ "Priority": 50,
+ "Region": "global",
+ "Spreads": null,
+ "Stable": false,
+ "Status": "dead",
+ "StatusDescription": "",
+ "Stop": false,
+ "SubmitTime": 1763240400003151783,
+ "TaskGroups": [
+ {
+ "Affinities": null,
+ "Constraints": null,
+ "Consul": null,
+ "Count": 1,
+ "Disconnect": null,
+ "EphemeralDisk": {
+ "Migrate": false,
+ "SizeMB": 300,
+ "Sticky": false
+ },
+ "MaxClientDisconnect": null,
+ "Meta": null,
+ "Migrate": null,
+ "Name": "app",
+ "Networks": null,
+ "PreventRescheduleOnLost": false,
+ "ReschedulePolicy": {
+ "Attempts": 1,
+ "Delay": 5000000000,
+ "DelayFunction": "constant",
+ "Interval": 86400000000000,
+ "MaxDelay": 0,
+ "Unlimited": false
+ },
+ "RestartPolicy": {
+ "Attempts": 3,
+ "Delay": 15000000000,
+ "Interval": 86400000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "Scaling": null,
+ "Services": null,
+ "ShutdownDelay": null,
+ "Spreads": null,
+ "StopAfterClientDisconnect": null,
+ "Tasks": [
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "image": "ghcr.io/sstent/ubuntu-python3",
+ "args": [
+ "-v",
+ "-c",
+ "/local/prestart.sh"
+ ]
+ },
+ "Constraints": null,
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": null,
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 5000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": {
+ "Hook": "prestart",
+ "Sidecar": false
+ },
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 10,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "setup",
+ "Resources": {
+ "CPU": 100,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 300,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 3,
+ "Delay": 15000000000,
+ "Interval": 86400000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": null,
+ "ShutdownDelay": 0,
+ "Templates": [
+ {
+ "ChangeMode": "restart",
+ "ChangeScript": null,
+ "ChangeSignal": "",
+ "DestPath": "local/prestart.sh",
+ "EmbeddedTmpl": "#!/bin/bash\nrm /usr/lib/python3.11/EXTERNALLY-MANAGED\npip3 install qbittorrent-api --upgrade\npython3 /local/torrent_tagger.py\npython3 /local/torrent_tidy.py\n\n",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "{{",
+ "Once": false,
+ "Perms": "777",
+ "RightDelim": "}}",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ },
+ {
+ "ChangeMode": "restart",
+ "ChangeScript": null,
+ "ChangeSignal": "",
+ "DestPath": "local/torrent_tagger.py",
+ "EmbeddedTmpl": "{{ key \"functions/torrent_tagger\" }}",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "{{",
+ "Once": false,
+ "Perms": "0644",
+ "RightDelim": "}}",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ },
+ {
+ "ChangeMode": "restart",
+ "ChangeScript": null,
+ "ChangeSignal": "",
+ "DestPath": "local/torrent_tidy.py",
+ "EmbeddedTmpl": "{{ key \"functions/torrent_tidy\" }}",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "{{",
+ "Once": false,
+ "Perms": "0644",
+ "RightDelim": "}}",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ }
+ ],
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ }
+ ],
+ "Update": null,
+ "Volumes": null
+ }
+ ],
+ "Type": "batch",
+ "UI": null,
+ "Update": {
+ "AutoPromote": false,
+ "AutoRevert": false,
+ "Canary": 0,
+ "HealthCheck": "",
+ "HealthyDeadline": 0,
+ "MaxParallel": 0,
+ "MinHealthyTime": 0,
+ "ProgressDeadline": 0,
+ "Stagger": 0
+ },
+ "VaultNamespace": "",
+ "Version": 0,
+ "VersionTag": null
+}
\ No newline at end of file
diff --git a/nomad_backup/20251115_141532/qautomate_periodic-1763242200.json b/nomad_backup/20251115_141532/qautomate_periodic-1763242200.json
new file mode 100644
index 0000000..7863c3c
--- /dev/null
+++ b/nomad_backup/20251115_141532/qautomate_periodic-1763242200.json
@@ -0,0 +1,226 @@
+{
+ "Affinities": null,
+ "AllAtOnce": false,
+ "Constraints": null,
+ "ConsulNamespace": "",
+ "CreateIndex": 14202806,
+ "Datacenters": [
+ "dc1"
+ ],
+ "DispatchIdempotencyToken": "",
+ "Dispatched": false,
+ "ID": "qautomate/periodic-1763242200",
+ "JobModifyIndex": 14202806,
+ "Meta": null,
+ "ModifyIndex": 14202815,
+ "Multiregion": null,
+ "Name": "qautomate/periodic-1763242200",
+ "Namespace": "default",
+ "NodePool": "default",
+ "NomadTokenID": "",
+ "ParameterizedJob": null,
+ "ParentID": "qautomate",
+ "Payload": null,
+ "Periodic": null,
+ "Priority": 50,
+ "Region": "global",
+ "Spreads": null,
+ "Stable": false,
+ "Status": "dead",
+ "StatusDescription": "",
+ "Stop": false,
+ "SubmitTime": 1763242200002299173,
+ "TaskGroups": [
+ {
+ "Affinities": null,
+ "Constraints": null,
+ "Consul": null,
+ "Count": 1,
+ "Disconnect": null,
+ "EphemeralDisk": {
+ "Migrate": false,
+ "SizeMB": 300,
+ "Sticky": false
+ },
+ "MaxClientDisconnect": null,
+ "Meta": null,
+ "Migrate": null,
+ "Name": "app",
+ "Networks": null,
+ "PreventRescheduleOnLost": false,
+ "ReschedulePolicy": {
+ "Attempts": 1,
+ "Delay": 5000000000,
+ "DelayFunction": "constant",
+ "Interval": 86400000000000,
+ "MaxDelay": 0,
+ "Unlimited": false
+ },
+ "RestartPolicy": {
+ "Attempts": 3,
+ "Delay": 15000000000,
+ "Interval": 86400000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "Scaling": null,
+ "Services": null,
+ "ShutdownDelay": null,
+ "Spreads": null,
+ "StopAfterClientDisconnect": null,
+ "Tasks": [
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "image": "ghcr.io/sstent/ubuntu-python3",
+ "args": [
+ "-v",
+ "-c",
+ "/local/prestart.sh"
+ ]
+ },
+ "Constraints": null,
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": null,
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 5000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": {
+ "Hook": "prestart",
+ "Sidecar": false
+ },
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 10,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "setup",
+ "Resources": {
+ "CPU": 100,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 300,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 3,
+ "Delay": 15000000000,
+ "Interval": 86400000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": null,
+ "ShutdownDelay": 0,
+ "Templates": [
+ {
+ "ChangeMode": "restart",
+ "ChangeScript": null,
+ "ChangeSignal": "",
+ "DestPath": "local/prestart.sh",
+ "EmbeddedTmpl": "#!/bin/bash\nrm /usr/lib/python3.11/EXTERNALLY-MANAGED\npip3 install qbittorrent-api --upgrade\npython3 /local/torrent_tagger.py\npython3 /local/torrent_tidy.py\n\n",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "{{",
+ "Once": false,
+ "Perms": "777",
+ "RightDelim": "}}",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ },
+ {
+ "ChangeMode": "restart",
+ "ChangeScript": null,
+ "ChangeSignal": "",
+ "DestPath": "local/torrent_tagger.py",
+ "EmbeddedTmpl": "{{ key \"functions/torrent_tagger\" }}",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "{{",
+ "Once": false,
+ "Perms": "0644",
+ "RightDelim": "}}",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ },
+ {
+ "ChangeMode": "restart",
+ "ChangeScript": null,
+ "ChangeSignal": "",
+ "DestPath": "local/torrent_tidy.py",
+ "EmbeddedTmpl": "{{ key \"functions/torrent_tidy\" }}",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "{{",
+ "Once": false,
+ "Perms": "0644",
+ "RightDelim": "}}",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ }
+ ],
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ }
+ ],
+ "Update": null,
+ "Volumes": null
+ }
+ ],
+ "Type": "batch",
+ "UI": null,
+ "Update": {
+ "AutoPromote": false,
+ "AutoRevert": false,
+ "Canary": 0,
+ "HealthCheck": "",
+ "HealthyDeadline": 0,
+ "MaxParallel": 0,
+ "MinHealthyTime": 0,
+ "ProgressDeadline": 0,
+ "Stagger": 0
+ },
+ "VaultNamespace": "",
+ "Version": 0,
+ "VersionTag": null
+}
\ No newline at end of file
diff --git a/nomad_backup/20251115_141532/qautomate_periodic-1763244000.json b/nomad_backup/20251115_141532/qautomate_periodic-1763244000.json
new file mode 100644
index 0000000..971c95c
--- /dev/null
+++ b/nomad_backup/20251115_141532/qautomate_periodic-1763244000.json
@@ -0,0 +1,226 @@
+{
+ "Affinities": null,
+ "AllAtOnce": false,
+ "Constraints": null,
+ "ConsulNamespace": "",
+ "CreateIndex": 14202856,
+ "Datacenters": [
+ "dc1"
+ ],
+ "DispatchIdempotencyToken": "",
+ "Dispatched": false,
+ "ID": "qautomate/periodic-1763244000",
+ "JobModifyIndex": 14202856,
+ "Meta": null,
+ "ModifyIndex": 14202864,
+ "Multiregion": null,
+ "Name": "qautomate/periodic-1763244000",
+ "Namespace": "default",
+ "NodePool": "default",
+ "NomadTokenID": "",
+ "ParameterizedJob": null,
+ "ParentID": "qautomate",
+ "Payload": null,
+ "Periodic": null,
+ "Priority": 50,
+ "Region": "global",
+ "Spreads": null,
+ "Stable": false,
+ "Status": "dead",
+ "StatusDescription": "",
+ "Stop": false,
+ "SubmitTime": 1763244000001892686,
+ "TaskGroups": [
+ {
+ "Affinities": null,
+ "Constraints": null,
+ "Consul": null,
+ "Count": 1,
+ "Disconnect": null,
+ "EphemeralDisk": {
+ "Migrate": false,
+ "SizeMB": 300,
+ "Sticky": false
+ },
+ "MaxClientDisconnect": null,
+ "Meta": null,
+ "Migrate": null,
+ "Name": "app",
+ "Networks": null,
+ "PreventRescheduleOnLost": false,
+ "ReschedulePolicy": {
+ "Attempts": 1,
+ "Delay": 5000000000,
+ "DelayFunction": "constant",
+ "Interval": 86400000000000,
+ "MaxDelay": 0,
+ "Unlimited": false
+ },
+ "RestartPolicy": {
+ "Attempts": 3,
+ "Delay": 15000000000,
+ "Interval": 86400000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "Scaling": null,
+ "Services": null,
+ "ShutdownDelay": null,
+ "Spreads": null,
+ "StopAfterClientDisconnect": null,
+ "Tasks": [
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "args": [
+ "-v",
+ "-c",
+ "/local/prestart.sh"
+ ],
+ "image": "ghcr.io/sstent/ubuntu-python3"
+ },
+ "Constraints": null,
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": null,
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 5000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": {
+ "Hook": "prestart",
+ "Sidecar": false
+ },
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 10,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "setup",
+ "Resources": {
+ "CPU": 100,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 300,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 3,
+ "Delay": 15000000000,
+ "Interval": 86400000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": null,
+ "ShutdownDelay": 0,
+ "Templates": [
+ {
+ "ChangeMode": "restart",
+ "ChangeScript": null,
+ "ChangeSignal": "",
+ "DestPath": "local/prestart.sh",
+ "EmbeddedTmpl": "#!/bin/bash\nrm /usr/lib/python3.11/EXTERNALLY-MANAGED\npip3 install qbittorrent-api --upgrade\npython3 /local/torrent_tagger.py\npython3 /local/torrent_tidy.py\n\n",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "{{",
+ "Once": false,
+ "Perms": "777",
+ "RightDelim": "}}",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ },
+ {
+ "ChangeMode": "restart",
+ "ChangeScript": null,
+ "ChangeSignal": "",
+ "DestPath": "local/torrent_tagger.py",
+ "EmbeddedTmpl": "{{ key \"functions/torrent_tagger\" }}",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "{{",
+ "Once": false,
+ "Perms": "0644",
+ "RightDelim": "}}",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ },
+ {
+ "ChangeMode": "restart",
+ "ChangeScript": null,
+ "ChangeSignal": "",
+ "DestPath": "local/torrent_tidy.py",
+ "EmbeddedTmpl": "{{ key \"functions/torrent_tidy\" }}",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "{{",
+ "Once": false,
+ "Perms": "0644",
+ "RightDelim": "}}",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ }
+ ],
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ }
+ ],
+ "Update": null,
+ "Volumes": null
+ }
+ ],
+ "Type": "batch",
+ "UI": null,
+ "Update": {
+ "AutoPromote": false,
+ "AutoRevert": false,
+ "Canary": 0,
+ "HealthCheck": "",
+ "HealthyDeadline": 0,
+ "MaxParallel": 0,
+ "MinHealthyTime": 0,
+ "ProgressDeadline": 0,
+ "Stagger": 0
+ },
+ "VaultNamespace": "",
+ "Version": 0,
+ "VersionTag": null
+}
\ No newline at end of file
diff --git a/nomad_backup/20251115_141532/qbittorrent.json b/nomad_backup/20251115_141532/qbittorrent.json
new file mode 100644
index 0000000..05a3faf
--- /dev/null
+++ b/nomad_backup/20251115_141532/qbittorrent.json
@@ -0,0 +1,593 @@
+{
+ "Affinities": null,
+ "AllAtOnce": false,
+ "Constraints": [
+ {
+ "LTarget": "${attr.kernel.name}",
+ "Operand": "=",
+ "RTarget": "linux"
+ },
+ {
+ "LTarget": "${attr.cpu.arch}",
+ "Operand": "regexp",
+ "RTarget": "amd64"
+ }
+ ],
+ "ConsulNamespace": "",
+ "CreateIndex": 13572099,
+ "Datacenters": [
+ "dc1"
+ ],
+ "DispatchIdempotencyToken": "",
+ "Dispatched": false,
+ "ID": "qbittorrent",
+ "JobModifyIndex": 14186766,
+ "Meta": null,
+ "ModifyIndex": 14202925,
+ "Multiregion": null,
+ "Name": "qbittorrent",
+ "Namespace": "default",
+ "NodePool": "default",
+ "NomadTokenID": "",
+ "ParameterizedJob": null,
+ "ParentID": "",
+ "Payload": null,
+ "Periodic": null,
+ "Priority": 50,
+ "Region": "global",
+ "Spreads": null,
+ "Stable": true,
+ "Status": "running",
+ "StatusDescription": "",
+ "Stop": false,
+ "SubmitTime": 1762817545936576873,
+ "TaskGroups": [
+ {
+ "Affinities": null,
+ "Constraints": null,
+ "Consul": null,
+ "Count": 1,
+ "Disconnect": null,
+ "EphemeralDisk": {
+ "Migrate": false,
+ "SizeMB": 300,
+ "Sticky": false
+ },
+ "MaxClientDisconnect": null,
+ "Meta": null,
+ "Migrate": {
+ "HealthCheck": "checks",
+ "HealthyDeadline": 300000000000,
+ "MaxParallel": 1,
+ "MinHealthyTime": 10000000000
+ },
+ "Name": "qbittorrent",
+ "Networks": [
+ {
+ "ReservedPorts": [
+ {
+ "HostNetwork": "default",
+ "Label": "qbittorrent_51413",
+ "To": 6881,
+ "Value": 6881
+ },
+ {
+ "HostNetwork": "default",
+ "Label": "shadowsocks",
+ "To": 8388,
+ "Value": 8388
+ },
+ {
+ "HostNetwork": "default",
+ "Label": "socks",
+ "To": 1080,
+ "Value": 1080
+ },
+ {
+ "HostNetwork": "default",
+ "Label": "http_proxy",
+ "To": 8888,
+ "Value": 8888
+ },
+ {
+ "HostNetwork": "default",
+ "Label": "http_admin",
+ "To": 8000,
+ "Value": 8000
+ },
+ {
+ "HostNetwork": "default",
+ "Label": "qbittorrent_80",
+ "To": 8080,
+ "Value": 8080
+ }
+ ]
+ }
+ ],
+ "PreventRescheduleOnLost": false,
+ "ReschedulePolicy": {
+ "Attempts": 0,
+ "Delay": 30000000000,
+ "DelayFunction": "exponential",
+ "Interval": 0,
+ "MaxDelay": 3600000000000,
+ "Unlimited": true
+ },
+ "RestartPolicy": {
+ "Attempts": 8,
+ "Delay": 10000000000,
+ "Interval": 1200000000000,
+ "Mode": "delay",
+ "RenderTemplates": false
+ },
+ "Scaling": null,
+ "Services": null,
+ "ShutdownDelay": null,
+ "Spreads": null,
+ "StopAfterClientDisconnect": null,
+ "Tasks": [
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "devices": [
+ {
+ "container_path": "/dev/net/tun",
+ "host_path": "/dev/net/tun"
+ }
+ ],
+ "image": "qmcgaw/gluetun",
+ "memory_hard_limit": "1024",
+ "ports": [
+ "shadowsocks",
+ "http_proxy",
+ "http_admin",
+ "qbittorrent_51413",
+ "qbittorrent_80",
+ "socks"
+ ],
+ "volumes": [
+ "/etc/localtime:/etc/localtime",
+ "/mnt/syncthing/mullvad:/vpn",
+ "local/gluetun.toml:/gluetun/config.toml"
+ ],
+ "cap_add": [
+ "NET_ADMIN",
+ "NET_BIND_SERVICE"
+ ]
+ },
+ "Constraints": [
+ {
+ "LTarget": "${attr.consul.version}",
+ "Operand": "semver",
+ "RTarget": ">= 1.8.0"
+ }
+ ],
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": {
+ "HTTP_CONTROL_SERVER_AUTH_CONFIG_FILEPATH": "/custom/auth.toml",
+ "SERVER_CITIES": "Vancouver,Montreal,Toronto",
+ "HEALTH_VPN_DURATION_INITIAL": "3600s",
+ "DOT": "off",
+ "SHADOWSOCKS": "on",
+ "SHADOWSOCKS_PASSWORD": "farscape5",
+ "DOT_PROVIDERS": "cloudflare,google,quad9,quadrant",
+ "WIREGUARD_PRIVATE_KEY": "EIos1A9eGCIoCHr02aOsEu8S4C0gqhNLIYF/vMykEV0=",
+ "SERVER_COUNTRIES": "Canada",
+ "HEALTH_TARGET_ADDRESS": "1.1.1.1",
+ "WIREGUARD_PRESHARED_KEY": "RzPcraPA24hLFxGiB7z5JMWrtI+JBbEzvmeiEX36XWo=",
+ "HEALTH_SUCCESS_WAIT_DURATION": "30s",
+ "HTTPPROXY": "on",
+ "FIREWALL_VPN_INPUT_PORTS": "61944,53304",
+ "VPN_SERVICE_PROVIDER": "airvpn",
+ "WIREGUARD_ADDRESSES": "10.161.31.240/32",
+ "HEALTH_VPN_DURATION_ADDITION": "600s",
+ "WEBUI_PORT": "8080",
+ "VPN_TYPE": "wireguard"
+ },
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 5000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": {
+ "Hook": "prestart",
+ "Sidecar": true
+ },
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 10,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "qbittorrent-vpn",
+ "Resources": {
+ "CPU": 100,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 250,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 8,
+ "Delay": 10000000000,
+ "Interval": 1200000000000,
+ "Mode": "delay",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": [
+ {
+ "Address": "",
+ "AddressMode": "auto",
+ "CanaryMeta": null,
+ "CanaryTags": null,
+ "Checks": null,
+ "Cluster": "default",
+ "Connect": null,
+ "EnableTagOverride": false,
+ "Identity": null,
+ "Meta": null,
+ "Name": "qbittorrent",
+ "Namespace": "default",
+ "OnUpdate": "require_healthy",
+ "PortLabel": "qbittorrent_80",
+ "Provider": "consul",
+ "TaggedAddresses": null,
+ "Tags": [
+ "global",
+ "tools"
+ ],
+ "TaskName": "qbittorrent-vpn",
+ "Weights": null
+ },
+ {
+ "Address": "",
+ "AddressMode": "auto",
+ "CanaryMeta": null,
+ "CanaryTags": null,
+ "Checks": null,
+ "Cluster": "default",
+ "Connect": null,
+ "EnableTagOverride": false,
+ "Identity": null,
+ "Meta": null,
+ "Name": "qbittorrent-admin",
+ "Namespace": "default",
+ "OnUpdate": "require_healthy",
+ "PortLabel": "http_admin",
+ "Provider": "consul",
+ "TaggedAddresses": null,
+ "Tags": [
+ "global"
+ ],
+ "TaskName": "qbittorrent-vpn",
+ "Weights": null
+ },
+ {
+ "Address": "",
+ "AddressMode": "auto",
+ "CanaryMeta": null,
+ "CanaryTags": null,
+ "Checks": null,
+ "Cluster": "default",
+ "Connect": null,
+ "EnableTagOverride": false,
+ "Identity": null,
+ "Meta": null,
+ "Name": "sp",
+ "Namespace": "default",
+ "OnUpdate": "require_healthy",
+ "PortLabel": "socks",
+ "Provider": "consul",
+ "TaggedAddresses": null,
+ "Tags": [
+ "global",
+ "ovpn-openpyn",
+ "enable_gocast",
+ "gocast_vip=192.168.1.242/32",
+ "gocast_nat=tcp:1080:1080",
+ "gocast_nat=udp:1080:1080"
+ ],
+ "TaskName": "qbittorrent-vpn",
+ "Weights": null
+ }
+ ],
+ "ShutdownDelay": 0,
+ "Templates": [
+ {
+ "ChangeMode": "restart",
+ "ChangeScript": null,
+ "ChangeSignal": "",
+ "DestPath": "custom/auth.toml",
+ "EmbeddedTmpl": "[[roles]]\nname = \"qbittorrent\"\n# Define a list of routes with the syntax \"Http-Method /path\"\nroutes = [\"GET /v1/openvpn/status\", \"PUT /v1/openvpn/status\", \"PUT /v1/openvpn/status\", \"GET /v1/openvpn/portforwarded\", \"GET /v1/openvpn/settings\", \"GET /v1/dns/status\", \"PUT /v1/dns/status\", \"PUT /v1/dns/status\", \"GET /v1/updater/status\", \"PUT /v1/updater/status\", \"PUT /v1/updater/status\", \"GET /v1/publicip/ip\", \"GET /v1/version\", \"GET /v1/vpn/status\", \"PUT /v1/vpn/status\", \"GET /v1/vpn/settings\", \"PUT /v1/vpn/settings\"]\nauth = \"none\"\n",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "{{",
+ "Once": false,
+ "Perms": "0644",
+ "RightDelim": "}}",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ }
+ ],
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ },
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "devices": [
+ {
+ "container_path": "/dev/net/tun",
+ "host_path": "/dev/net/tun"
+ }
+ ],
+ "image": "serjs/go-socks5-proxy",
+ "memory_hard_limit": 256.0,
+ "network_mode": "container:qbittorrent-vpn-${NOMAD_ALLOC_ID}"
+ },
+ "Constraints": null,
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": {
+ "REQUIRE_AUTH": "false"
+ },
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 5000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": null,
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 10,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "dante",
+ "Resources": {
+ "CPU": 64,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 128,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 8,
+ "Delay": 10000000000,
+ "Interval": 1200000000000,
+ "Mode": "delay",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": null,
+ "ShutdownDelay": 0,
+ "Templates": null,
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ },
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "volumes": [
+ "/mnt/Public/Downloads/news/qbittorrent:/downloads/",
+ "/mnt/configs/qbittorrent:/config",
+ "/mnt/Archive/seeding:/archiveseeding",
+ "/mnt/odroid5:/odroid5"
+ ],
+ "image": "linuxserver/qbittorrent:5.1.0",
+ "memory_hard_limit": 2048.0,
+ "network_mode": "container:qbittorrent-vpn-${NOMAD_ALLOC_ID}",
+ "sysctl": [
+ {
+ "net.core.somaxconn": "4096"
+ }
+ ]
+ },
+ "Constraints": [
+ {
+ "LTarget": "${attr.consul.version}",
+ "Operand": "semver",
+ "RTarget": ">= 1.8.0"
+ }
+ ],
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": {
+ "TZ": "EST5EDT",
+ "WEBUI_PORT": "8080",
+ "PGID": "1000",
+ "PUID": "1000"
+ },
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 5000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": null,
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 10,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "qbittorrent",
+ "Resources": {
+ "CPU": 128,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 256,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 8,
+ "Delay": 10000000000,
+ "Interval": 1200000000000,
+ "Mode": "delay",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": [
+ {
+ "Address": "",
+ "AddressMode": "auto",
+ "CanaryMeta": null,
+ "CanaryTags": null,
+ "Checks": null,
+ "Cluster": "default",
+ "Connect": null,
+ "EnableTagOverride": false,
+ "Identity": null,
+ "Meta": null,
+ "Name": "qb",
+ "Namespace": "default",
+ "OnUpdate": "require_healthy",
+ "PortLabel": "qbittorrent_80",
+ "Provider": "consul",
+ "TaggedAddresses": null,
+ "Tags": [
+ "global",
+ "ovpn-openpyn",
+ "enable_gocast",
+ "gocast_vip=192.168.1.244/32",
+ "gocast_nat=tcp:8080:8080",
+ "gocast_nat=udp:8080:8080"
+ ],
+ "TaskName": "qbittorrent",
+ "Weights": null
+ }
+ ],
+ "ShutdownDelay": 0,
+ "Templates": [
+ {
+ "ChangeMode": "noop",
+ "ChangeScript": null,
+ "ChangeSignal": "",
+ "DestPath": "local/qbithealth.sh",
+ "EmbeddedTmpl": " #!/bin/bash\n curl -sL http://127.0.0.1:8080/api/v2/transfer/info | grep connected || exit;\n",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "{{",
+ "Once": false,
+ "Perms": "0777",
+ "RightDelim": "}}",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ }
+ ],
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ }
+ ],
+ "Update": {
+ "AutoPromote": false,
+ "AutoRevert": false,
+ "Canary": 0,
+ "HealthCheck": "task_states",
+ "HealthyDeadline": 120000000000,
+ "MaxParallel": 1,
+ "MinHealthyTime": 10000000000,
+ "ProgressDeadline": 600000000000,
+ "Stagger": 90000000000
+ },
+ "Volumes": null
+ }
+ ],
+ "Type": "service",
+ "UI": null,
+ "Update": {
+ "AutoPromote": false,
+ "AutoRevert": false,
+ "Canary": 0,
+ "HealthCheck": "",
+ "HealthyDeadline": 0,
+ "MaxParallel": 1,
+ "MinHealthyTime": 0,
+ "ProgressDeadline": 0,
+ "Stagger": 90000000000
+ },
+ "VaultNamespace": "",
+ "Version": 21,
+ "VersionTag": null
+}
\ No newline at end of file
diff --git a/nomad_backup/20251115_141532/radarr.json b/nomad_backup/20251115_141532/radarr.json
new file mode 100644
index 0000000..3860a9c
--- /dev/null
+++ b/nomad_backup/20251115_141532/radarr.json
@@ -0,0 +1,342 @@
+{
+ "Affinities": null,
+ "AllAtOnce": false,
+ "Constraints": [
+ {
+ "LTarget": "${attr.kernel.name}",
+ "Operand": "=",
+ "RTarget": "linux"
+ },
+ {
+ "LTarget": "${attr.unique.hostname}",
+ "Operand": "regexp",
+ "RTarget": "odroid.*"
+ },
+ {
+ "LTarget": "${attr.cpu.arch}",
+ "Operand": "regexp",
+ "RTarget": "arm64"
+ }
+ ],
+ "ConsulNamespace": "",
+ "CreateIndex": 13572027,
+ "Datacenters": [
+ "dc1"
+ ],
+ "DispatchIdempotencyToken": "",
+ "Dispatched": false,
+ "ID": "radarr",
+ "JobModifyIndex": 13928632,
+ "Meta": null,
+ "ModifyIndex": 13928632,
+ "Multiregion": null,
+ "Name": "radarr",
+ "Namespace": "default",
+ "NodePool": "default",
+ "NomadTokenID": "",
+ "ParameterizedJob": null,
+ "ParentID": "",
+ "Payload": null,
+ "Periodic": null,
+ "Priority": 50,
+ "Region": "global",
+ "Spreads": null,
+ "Stable": false,
+ "Status": "running",
+ "StatusDescription": "",
+ "Stop": false,
+ "SubmitTime": 1755286992506450506,
+ "TaskGroups": [
+ {
+ "Affinities": null,
+ "Constraints": null,
+ "Consul": null,
+ "Count": 1,
+ "Disconnect": null,
+ "EphemeralDisk": {
+ "Migrate": false,
+ "SizeMB": 300,
+ "Sticky": false
+ },
+ "MaxClientDisconnect": null,
+ "Meta": null,
+ "Migrate": {
+ "HealthCheck": "checks",
+ "HealthyDeadline": 300000000000,
+ "MaxParallel": 1,
+ "MinHealthyTime": 10000000000
+ },
+ "Name": "radarr",
+ "Networks": [
+ {
+ "ReservedPorts": [
+ {
+ "HostNetwork": "default",
+ "Label": "http",
+ "To": 7878,
+ "Value": 7878
+ }
+ ]
+ }
+ ],
+ "PreventRescheduleOnLost": false,
+ "ReschedulePolicy": {
+ "Attempts": 0,
+ "Delay": 30000000000,
+ "DelayFunction": "exponential",
+ "Interval": 0,
+ "MaxDelay": 3600000000000,
+ "Unlimited": true
+ },
+ "RestartPolicy": {
+ "Attempts": 5,
+ "Delay": 10000000000,
+ "Interval": 60000000000,
+ "Mode": "delay",
+ "RenderTemplates": false
+ },
+ "Scaling": null,
+ "Services": null,
+ "ShutdownDelay": null,
+ "Spreads": null,
+ "StopAfterClientDisconnect": null,
+ "Tasks": [
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "dns_servers": [
+ "192.168.4.250",
+ "192.168.4.1"
+ ],
+ "image": "linuxserver/radarr:latest",
+ "memory_hard_limit": "2048",
+ "ports": [
+ "http"
+ ],
+ "volumes": [
+ "/mnt/Public/Downloads/news:/downloads",
+ "/mnt/Public/Downloads/movies:/movies",
+ "/mnt/Archive/Movies:/archive",
+ "/mnt/Public/configs/radarr_pg:/config"
+ ]
+ },
+ "Constraints": [
+ {
+ "LTarget": "${attr.consul.version}",
+ "Operand": "semver",
+ "RTarget": ">= 1.8.0"
+ }
+ ],
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": {
+ "PUID": "1000",
+ "TZ": "EST5EDT",
+ "PGID": "1000"
+ },
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 10000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": null,
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 15,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "radarr",
+ "Resources": {
+ "CPU": 500,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 256,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 5,
+ "Delay": 10000000000,
+ "Interval": 60000000000,
+ "Mode": "delay",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": [
+ {
+ "Address": "",
+ "AddressMode": "auto",
+ "CanaryMeta": null,
+ "CanaryTags": null,
+ "Checks": [
+ {
+ "AddressMode": "",
+ "Args": null,
+ "Body": "",
+ "CheckRestart": {
+ "Grace": 90000000000,
+ "IgnoreWarnings": false,
+ "Limit": 3
+ },
+ "Command": "/local/healthcheck.sh",
+ "Expose": false,
+ "FailuresBeforeCritical": 0,
+ "FailuresBeforeWarning": 0,
+ "GRPCService": "",
+ "GRPCUseTLS": false,
+ "Header": null,
+ "InitialStatus": "",
+ "Interval": 300000000000,
+ "Method": "",
+ "Name": "check_up",
+ "Notes": "",
+ "OnUpdate": "require_healthy",
+ "Path": "",
+ "PortLabel": "",
+ "Protocol": "",
+ "SuccessBeforePassing": 0,
+ "TLSServerName": "",
+ "TLSSkipVerify": false,
+ "TaskName": "radarr",
+ "Timeout": 25000000000,
+ "Type": "script"
+ }
+ ],
+ "Cluster": "default",
+ "Connect": null,
+ "EnableTagOverride": false,
+ "Identity": null,
+ "Meta": null,
+ "Name": "radarr",
+ "Namespace": "default",
+ "OnUpdate": "require_healthy",
+ "PortLabel": "http",
+ "Provider": "consul",
+ "TaggedAddresses": null,
+ "Tags": [
+ "radarr",
+ "tools"
+ ],
+ "TaskName": "radarr",
+ "Weights": null
+ }
+ ],
+ "ShutdownDelay": 0,
+ "Templates": [
+ {
+ "ChangeMode": "restart",
+ "ChangeScript": null,
+ "ChangeSignal": "",
+ "DestPath": "local/file.yml",
+ "EmbeddedTmpl": "---\nkey: {{ key \"ovpn-client\" }}",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "{{",
+ "Once": false,
+ "Perms": "0644",
+ "RightDelim": "}}",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ },
+ {
+ "ChangeMode": "restart",
+ "ChangeScript": null,
+ "ChangeSignal": "",
+ "DestPath": "local/config.xml",
+ "EmbeddedTmpl": "\nInfo\n7878\n\n*\n9898\nFalse\n237c27f22504440385e5ee295fd65eb5\nForms\nmaster\n\nTrue\n\nDocker\nFalse\nRadarr\nDisabledForLocalAddresses\npostgres\npostgres\n5432\nmaster.postgres.service.dc1.consul\n\n",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "{{",
+ "Once": false,
+ "Perms": "0755",
+ "RightDelim": "}}",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ },
+ {
+ "ChangeMode": "restart",
+ "ChangeScript": null,
+ "ChangeSignal": "",
+ "DestPath": "local/healthcheck.sh",
+ "EmbeddedTmpl": "#!/bin/bash\n/usr/bin/curl -f \"http://localhost:${NOMAD_PORT_http}/api/v3/system/status?apikey=$(grep -Eo '(.*)' /config/config.xml | sed -e 's/<[^>]*>//g')\"\n",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "{{",
+ "Once": false,
+ "Perms": "0755",
+ "RightDelim": "}}",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ }
+ ],
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ }
+ ],
+ "Update": {
+ "AutoPromote": false,
+ "AutoRevert": false,
+ "Canary": 0,
+ "HealthCheck": "checks",
+ "HealthyDeadline": 300000000000,
+ "MaxParallel": 1,
+ "MinHealthyTime": 10000000000,
+ "ProgressDeadline": 600000000000,
+ "Stagger": 10000000000
+ },
+ "Volumes": null
+ }
+ ],
+ "Type": "service",
+ "UI": null,
+ "Update": {
+ "AutoPromote": false,
+ "AutoRevert": false,
+ "Canary": 0,
+ "HealthCheck": "",
+ "HealthyDeadline": 0,
+ "MaxParallel": 1,
+ "MinHealthyTime": 0,
+ "ProgressDeadline": 0,
+ "Stagger": 10000000000
+ },
+ "VaultNamespace": "",
+ "Version": 13,
+ "VersionTag": null
+}
\ No newline at end of file
diff --git a/nomad_backup/20251115_141532/slskd.json b/nomad_backup/20251115_141532/slskd.json
new file mode 100644
index 0000000..b29635d
--- /dev/null
+++ b/nomad_backup/20251115_141532/slskd.json
@@ -0,0 +1,331 @@
+{
+ "Affinities": null,
+ "AllAtOnce": false,
+ "Constraints": [
+ {
+ "LTarget": "${attr.kernel.name}",
+ "Operand": "=",
+ "RTarget": "linux"
+ },
+ {
+ "LTarget": "${attr.cpu.arch}",
+ "Operand": "regexp",
+ "RTarget": "amd64"
+ }
+ ],
+ "ConsulNamespace": "",
+ "CreateIndex": 13572054,
+ "Datacenters": [
+ "dc1"
+ ],
+ "DispatchIdempotencyToken": "",
+ "Dispatched": false,
+ "ID": "slskd",
+ "JobModifyIndex": 14202950,
+ "Meta": null,
+ "ModifyIndex": 14202963,
+ "Multiregion": null,
+ "Name": "slskd",
+ "Namespace": "default",
+ "NodePool": "default",
+ "NomadTokenID": "",
+ "ParameterizedJob": null,
+ "ParentID": "",
+ "Payload": null,
+ "Periodic": null,
+ "Priority": 50,
+ "Region": "global",
+ "Spreads": null,
+ "Stable": true,
+ "Status": "running",
+ "StatusDescription": "",
+ "Stop": false,
+ "SubmitTime": 1763244688965100324,
+ "TaskGroups": [
+ {
+ "Affinities": null,
+ "Constraints": null,
+ "Consul": null,
+ "Count": 1,
+ "Disconnect": null,
+ "EphemeralDisk": {
+ "Migrate": false,
+ "SizeMB": 300,
+ "Sticky": false
+ },
+ "MaxClientDisconnect": null,
+ "Meta": null,
+ "Migrate": {
+ "HealthCheck": "checks",
+ "HealthyDeadline": 300000000000,
+ "MaxParallel": 1,
+ "MinHealthyTime": 10000000000
+ },
+ "Name": "slskd",
+ "Networks": [
+ {
+ "ReservedPorts": [
+ {
+ "HostNetwork": "default",
+ "Label": "http",
+ "To": 5000,
+ "Value": 5000
+ },
+ {
+ "HostNetwork": "default",
+ "Label": "https",
+ "To": 5001,
+ "Value": 5001
+ },
+ {
+ "HostNetwork": "default",
+ "Label": "guac",
+ "To": 6080,
+ "Value": 6080
+ }
+ ]
+ }
+ ],
+ "PreventRescheduleOnLost": false,
+ "ReschedulePolicy": {
+ "Attempts": 0,
+ "Delay": 30000000000,
+ "DelayFunction": "exponential",
+ "Interval": 0,
+ "MaxDelay": 3600000000000,
+ "Unlimited": true
+ },
+ "RestartPolicy": {
+ "Attempts": 2,
+ "Delay": 10000000000,
+ "Interval": 60000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "Scaling": null,
+ "Services": null,
+ "ShutdownDelay": null,
+ "Spreads": null,
+ "StopAfterClientDisconnect": null,
+ "Tasks": [
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "cap_add": [
+ "NET_ADMIN",
+ "NET_BIND_SERVICE"
+ ],
+ "volumes": [
+ "/etc/localtime:/etc/localtime",
+ "/mnt/syncthing/mullvad:/vpn"
+ ],
+ "devices": [
+ {
+ "host_path": "/dev/net/tun",
+ "container_path": "/dev/net/tun"
+ }
+ ],
+ "image": "qmcgaw/gluetun",
+ "memory_hard_limit": "1024",
+ "ports": [
+ "http",
+ "https",
+ "guac"
+ ]
+ },
+ "Constraints": null,
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": {
+ "HEALTH_VPN_DURATION_ADDITION": "600s",
+ "SERVER_CITIES": "Montreal",
+ "SHADOWSOCKS_PASSWORD": "farscape5",
+ "WIREGUARD_ADDRESSES": "10.186.222.247/32",
+ "VPN_TYPE": "wireguard",
+ "HTTPPROXY": "on",
+ "WEBUI_PORT": "8080",
+ "HEALTH_TARGET_ADDRESS": "1.1.1.1",
+ "HEALTH_VPN_DURATION_INITIAL": "3600s",
+ "DOT_PROVIDERS": "cloudflare,google,quad9,quadrant",
+ "HEALTH_SUCCESS_WAIT_DURATION": "30s",
+ "SERVER_COUNTRIES": "Canada",
+ "VPN_SERVICE_PROVIDER": "airvpn",
+ "SHADOWSOCKS": "on",
+ "WIREGUARD_PRIVATE_KEY": "SPpgnVCsOnz+zzorzTiOmvDF8GElgp27dSIeYAq43Vk=",
+ "FIREWALL_VPN_INPUT_PORTS": "53304",
+ "WIREGUARD_PRESHARED_KEY": "TBb2gU8pSTSG6lT4QYr7pzNWN7wZEn0yeG4VDTtuy50=",
+ "DOT": "off"
+ },
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 5000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": {
+ "Hook": "prestart",
+ "Sidecar": true
+ },
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 10,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "slskd-vpn",
+ "Resources": {
+ "CPU": 100,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 250,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 2,
+ "Delay": 10000000000,
+ "Interval": 60000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": null,
+ "ShutdownDelay": 0,
+ "Templates": null,
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ },
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "image": "ghcr.io/fletchto99/nicotine-plus-docker:latest",
+ "memory_hard_limit": "1024",
+ "network_mode": "container:slskd-vpn-${NOMAD_ALLOC_ID}",
+ "volumes": [
+ "/mnt/Public/Downloads/news/slskd/config:/config",
+ "/mnt/Public/Downloads/news/slskd/shared:/shared",
+ "/mnt/Public/Downloads/news/slskd/downloads/:/downloads",
+ "/mnt/Public/Downloads/news/slskd/incomplete/:/incomplete"
+ ]
+ },
+ "Constraints": null,
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": {
+ "PGID": "1000",
+ "TZ": "Etc/UTC",
+ "LISTENING_PORT": "53304",
+ "PUID": "1000"
+ },
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 5000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": null,
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 10,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "nicotine",
+ "Resources": {
+ "CPU": 100,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 300,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 2,
+ "Delay": 10000000000,
+ "Interval": 60000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": null,
+ "ShutdownDelay": 0,
+ "Templates": null,
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ }
+ ],
+ "Update": {
+ "AutoPromote": false,
+ "AutoRevert": false,
+ "Canary": 0,
+ "HealthCheck": "checks",
+ "HealthyDeadline": 300000000000,
+ "MaxParallel": 1,
+ "MinHealthyTime": 10000000000,
+ "ProgressDeadline": 600000000000,
+ "Stagger": 10000000000
+ },
+ "Volumes": null
+ }
+ ],
+ "Type": "service",
+ "UI": null,
+ "Update": {
+ "AutoPromote": false,
+ "AutoRevert": false,
+ "Canary": 0,
+ "HealthCheck": "",
+ "HealthyDeadline": 0,
+ "MaxParallel": 1,
+ "MinHealthyTime": 0,
+ "ProgressDeadline": 0,
+ "Stagger": 10000000000
+ },
+ "VaultNamespace": "",
+ "Version": 14,
+ "VersionTag": null
+}
\ No newline at end of file
diff --git a/nomad_backup/20251115_141532/sonarr.json b/nomad_backup/20251115_141532/sonarr.json
new file mode 100644
index 0000000..38a6e5d
--- /dev/null
+++ b/nomad_backup/20251115_141532/sonarr.json
@@ -0,0 +1,333 @@
+{
+ "Affinities": null,
+ "AllAtOnce": false,
+ "Constraints": [
+ {
+ "LTarget": "${attr.kernel.name}",
+ "Operand": "=",
+ "RTarget": "linux"
+ },
+ {
+ "LTarget": "${attr.cpu.arch}",
+ "Operand": "regexp",
+ "RTarget": "amd64"
+ }
+ ],
+ "ConsulNamespace": "",
+ "CreateIndex": 13572015,
+ "Datacenters": [
+ "dc1"
+ ],
+ "DispatchIdempotencyToken": "",
+ "Dispatched": false,
+ "ID": "sonarr",
+ "JobModifyIndex": 13991917,
+ "Meta": null,
+ "ModifyIndex": 14202918,
+ "Multiregion": null,
+ "Name": "sonarr",
+ "Namespace": "default",
+ "NodePool": "default",
+ "NomadTokenID": "",
+ "ParameterizedJob": null,
+ "ParentID": "",
+ "Payload": null,
+ "Periodic": null,
+ "Priority": 50,
+ "Region": "global",
+ "Spreads": null,
+ "Stable": true,
+ "Status": "running",
+ "StatusDescription": "",
+ "Stop": false,
+ "SubmitTime": 1757855044385846000,
+ "TaskGroups": [
+ {
+ "Affinities": null,
+ "Constraints": null,
+ "Consul": null,
+ "Count": 1,
+ "Disconnect": null,
+ "EphemeralDisk": {
+ "Migrate": false,
+ "SizeMB": 300,
+ "Sticky": false
+ },
+ "MaxClientDisconnect": null,
+ "Meta": null,
+ "Migrate": {
+ "HealthCheck": "checks",
+ "HealthyDeadline": 300000000000,
+ "MaxParallel": 1,
+ "MinHealthyTime": 10000000000
+ },
+ "Name": "sonarr",
+ "Networks": [
+ {
+ "ReservedPorts": [
+ {
+ "HostNetwork": "default",
+ "Label": "http",
+ "To": 8989,
+ "Value": 8989
+ }
+ ]
+ }
+ ],
+ "PreventRescheduleOnLost": false,
+ "ReschedulePolicy": {
+ "Attempts": 0,
+ "Delay": 30000000000,
+ "DelayFunction": "exponential",
+ "Interval": 0,
+ "MaxDelay": 3600000000000,
+ "Unlimited": true
+ },
+ "RestartPolicy": {
+ "Attempts": 2,
+ "Delay": 10000000000,
+ "Interval": 60000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "Scaling": null,
+ "Services": null,
+ "ShutdownDelay": null,
+ "Spreads": null,
+ "StopAfterClientDisconnect": null,
+ "Tasks": [
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "memory_hard_limit": "2048",
+ "volumes": [
+ "/mnt/Public/Downloads/news:/downloads",
+ "/mnt/Public/Downloads/tv:/tv",
+ "/mnt/Public/configs/sonarr_pg:/config"
+ ],
+ "force_pull": false,
+ "image": "linuxserver/sonarr:develop",
+ "ports": [
+ "http"
+ ]
+ },
+ "Constraints": [
+ {
+ "LTarget": "${attr.consul.version}",
+ "Operand": "semver",
+ "RTarget": ">= 1.8.0"
+ }
+ ],
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": {
+ "TZ": "EST5EDT",
+ "PUID": "1000",
+ "PGID": "1000"
+ },
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 10000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": null,
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 15,
+ "MaxFiles": 12
+ },
+ "Meta": null,
+ "Name": "sonarr",
+ "Resources": {
+ "CPU": 500,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 256,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 2,
+ "Delay": 10000000000,
+ "Interval": 60000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": [
+ {
+ "Address": "",
+ "AddressMode": "auto",
+ "CanaryMeta": null,
+ "CanaryTags": null,
+ "Checks": [
+ {
+ "AddressMode": "",
+ "Args": null,
+ "Body": "",
+ "CheckRestart": {
+ "Grace": 90000000000,
+ "IgnoreWarnings": false,
+ "Limit": 3
+ },
+ "Command": "/local/healthcheck.sh",
+ "Expose": false,
+ "FailuresBeforeCritical": 0,
+ "FailuresBeforeWarning": 0,
+ "GRPCService": "",
+ "GRPCUseTLS": false,
+ "Header": null,
+ "InitialStatus": "",
+ "Interval": 60000000000,
+ "Method": "",
+ "Name": "check_up",
+ "Notes": "",
+ "OnUpdate": "require_healthy",
+ "Path": "",
+ "PortLabel": "",
+ "Protocol": "",
+ "SuccessBeforePassing": 0,
+ "TLSServerName": "",
+ "TLSSkipVerify": false,
+ "TaskName": "sonarr",
+ "Timeout": 5000000000,
+ "Type": "script"
+ }
+ ],
+ "Cluster": "default",
+ "Connect": null,
+ "EnableTagOverride": false,
+ "Identity": null,
+ "Meta": null,
+ "Name": "sonarr",
+ "Namespace": "default",
+ "OnUpdate": "require_healthy",
+ "PortLabel": "http",
+ "Provider": "consul",
+ "TaggedAddresses": null,
+ "Tags": [
+ "sonarr",
+ "tools"
+ ],
+ "TaskName": "sonarr",
+ "Weights": null
+ }
+ ],
+ "ShutdownDelay": 0,
+ "Templates": [
+ {
+ "ChangeMode": "restart",
+ "ChangeScript": null,
+ "ChangeSignal": "",
+ "DestPath": "local/healthcheck.sh",
+ "EmbeddedTmpl": "#!/bin/bash\n/usr/bin/curl -f \"http://localhost:${NOMAD_PORT_http}/api/v3/system/status?apikey=$(grep -Eo '(.*)' /config/config.xml | sed -e 's/<[^>]*>//g')\"\n",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "{{",
+ "Once": false,
+ "Perms": "0755",
+ "RightDelim": "}}",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ },
+ {
+ "ChangeMode": "restart",
+ "ChangeScript": null,
+ "ChangeSignal": "",
+ "DestPath": "local/file.yml",
+ "EmbeddedTmpl": "---\nkey: {{ key \"ovpn-client\" }}",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "{{",
+ "Once": false,
+ "Perms": "0644",
+ "RightDelim": "}}",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ },
+ {
+ "ChangeMode": "restart",
+ "ChangeScript": null,
+ "ChangeSignal": "",
+ "DestPath": "local/config.xml",
+ "EmbeddedTmpl": "\nInfo\n8989\n/sonarr\n*\n9898\nFalse\n1632787062fb47a9a6eb4c88e32b3ff3\nNone\ndevelop\nTrue\n\nDocker\nFalse\n/config/restart.sh\nSonarr\npostgres\npostgres\n5432\nmaster.postgres.service.dc1.consul\n\n",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "{{",
+ "Once": false,
+ "Perms": "0755",
+ "RightDelim": "}}",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ }
+ ],
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ }
+ ],
+ "Update": {
+ "AutoPromote": false,
+ "AutoRevert": false,
+ "Canary": 0,
+ "HealthCheck": "checks",
+ "HealthyDeadline": 300000000000,
+ "MaxParallel": 1,
+ "MinHealthyTime": 10000000000,
+ "ProgressDeadline": 600000000000,
+ "Stagger": 10000000000
+ },
+ "Volumes": null
+ }
+ ],
+ "Type": "service",
+ "UI": null,
+ "Update": {
+ "AutoPromote": false,
+ "AutoRevert": false,
+ "Canary": 0,
+ "HealthCheck": "",
+ "HealthyDeadline": 0,
+ "MaxParallel": 1,
+ "MinHealthyTime": 0,
+ "ProgressDeadline": 0,
+ "Stagger": 10000000000
+ },
+ "VaultNamespace": "",
+ "Version": 20,
+ "VersionTag": null
+}
\ No newline at end of file
diff --git a/nomad_backup/20251115_141532/traefik.json b/nomad_backup/20251115_141532/traefik.json
new file mode 100644
index 0000000..f41a9cc
--- /dev/null
+++ b/nomad_backup/20251115_141532/traefik.json
@@ -0,0 +1,391 @@
+{
+ "Affinities": null,
+ "AllAtOnce": false,
+ "Constraints": [
+ {
+ "LTarget": "${attr.kernel.name}",
+ "Operand": "=",
+ "RTarget": "linux"
+ }
+ ],
+ "ConsulNamespace": "",
+ "CreateIndex": 13570367,
+ "Datacenters": [
+ "dc1"
+ ],
+ "DispatchIdempotencyToken": "",
+ "Dispatched": false,
+ "ID": "traefik",
+ "JobModifyIndex": 14202342,
+ "Meta": null,
+ "ModifyIndex": 14202342,
+ "Multiregion": null,
+ "Name": "traefik",
+ "Namespace": "default",
+ "NodePool": "default",
+ "NomadTokenID": "",
+ "ParameterizedJob": null,
+ "ParentID": "",
+ "Payload": null,
+ "Periodic": null,
+ "Priority": 50,
+ "Region": "global",
+ "Spreads": null,
+ "Stable": false,
+ "Status": "running",
+ "StatusDescription": "",
+ "Stop": false,
+ "SubmitTime": 1763227820495039263,
+ "TaskGroups": [
+ {
+ "Affinities": null,
+ "Constraints": null,
+ "Consul": null,
+ "Count": 1,
+ "Disconnect": null,
+ "EphemeralDisk": {
+ "Migrate": false,
+ "SizeMB": 300,
+ "Sticky": false
+ },
+ "MaxClientDisconnect": null,
+ "Meta": null,
+ "Migrate": null,
+ "Name": "traefik",
+ "Networks": [
+ {
+ "ReservedPorts": [
+ {
+ "HostNetwork": "default",
+ "Label": "traefik",
+ "To": 80,
+ "Value": 80
+ },
+ {
+ "HostNetwork": "default",
+ "Label": "traefikui",
+ "To": 8080,
+ "Value": 8090
+ },
+ {
+ "HostNetwork": "default",
+ "Label": "traefikhttps",
+ "To": 443,
+ "Value": 443
+ }
+ ]
+ }
+ ],
+ "PreventRescheduleOnLost": false,
+ "ReschedulePolicy": null,
+ "RestartPolicy": {
+ "Attempts": 6,
+ "Delay": 10000000000,
+ "Interval": 60000000000,
+ "Mode": "delay",
+ "RenderTemplates": false
+ },
+ "Scaling": null,
+ "Services": null,
+ "ShutdownDelay": null,
+ "Spreads": null,
+ "StopAfterClientDisconnect": null,
+ "Tasks": [
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "dns_servers": [
+ "192.168.1.1",
+ "192.168.1.250"
+ ],
+ "ports": [
+ "traefik",
+ "traefikhttps",
+ "traefikui"
+ ],
+ "memory_hard_limit": 2048.0,
+ "image": "traefik:2.9",
+ "args": [
+ "--configFile=/local/file.yml",
+ "--accesslog=true"
+ ],
+ "volumes": [
+ "/var/run/docker.sock:/var/run/docker.sock",
+ "/mnt/mnt/configs/letsencrypt:/acmecert/"
+ ]
+ },
+ "Constraints": [
+ {
+ "LTarget": "${attr.consul.version}",
+ "Operand": "semver",
+ "RTarget": ">= 1.8.0"
+ }
+ ],
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": {
+ "DUCKDNS_TOKEN": "e4b5ca33-1f4d-494b-b06d-6dd4600df662",
+ "TZ": "EST5EDT",
+ "PUID": "1000",
+ "PGID": "1000"
+ },
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 5000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": null,
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 10,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "traefik",
+ "Resources": {
+ "CPU": 256,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 256,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 6,
+ "Delay": 10000000000,
+ "Interval": 60000000000,
+ "Mode": "delay",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": [
+ {
+ "Address": "",
+ "AddressMode": "auto",
+ "CanaryMeta": null,
+ "CanaryTags": null,
+ "Checks": null,
+ "Cluster": "default",
+ "Connect": null,
+ "EnableTagOverride": false,
+ "Identity": null,
+ "Meta": null,
+ "Name": "traefik",
+ "Namespace": "default",
+ "OnUpdate": "require_healthy",
+ "PortLabel": "traefik",
+ "Provider": "consul",
+ "TaggedAddresses": null,
+ "Tags": [
+ "global",
+ "traefik",
+ "enable_gocast",
+ "gocast_vip=192.168.1.249/32",
+ "gocast_nat=tcp:443:443",
+ "gocast_nat=udp:443:443"
+ ],
+ "TaskName": "traefik",
+ "Weights": null
+ },
+ {
+ "Address": "",
+ "AddressMode": "auto",
+ "CanaryMeta": null,
+ "CanaryTags": null,
+ "Checks": null,
+ "Cluster": "default",
+ "Connect": null,
+ "EnableTagOverride": false,
+ "Identity": null,
+ "Meta": null,
+ "Name": "traefik-ui",
+ "Namespace": "default",
+ "OnUpdate": "require_healthy",
+ "PortLabel": "traefik",
+ "Provider": "consul",
+ "TaggedAddresses": null,
+ "Tags": [
+ "global",
+ "traefik",
+ "traefik.http.routers.dashboard.rule=Host(`traefik-ui.service.dc1.consul`)",
+ "traefik.http.routers.dashboard.service=api@internal"
+ ],
+ "TaskName": "traefik",
+ "Weights": null
+ }
+ ],
+ "ShutdownDelay": 0,
+ "Templates": [
+ {
+ "ChangeMode": "restart",
+ "ChangeScript": null,
+ "ChangeSignal": "",
+ "DestPath": "local/file.yml",
+ "EmbeddedTmpl": "http:\n serversTransports:\n insecureSkipVerify: true\n\nentryPoints:\n web:\n address: :80\n websecure:\n address: :443\n\nlog:\n level: DEBUG\n\nmetrics:\n prometheus:\n addRoutersLabels: true\n addServicesLabels: true\n\napi:\n dashboard: true\n insecure: true\n\nproviders:\n consulCatalog:\n exposedByDefault: true\n refreshInterval: 30s\n defaultRule: \"Host(`{{ .Name }}.service.dc1.consul`)\"\n endpoint:\n address: \"[[env \"attr.unique.network.ip-address\"]]:8500\"\n file:\n filename: /local/tls.yml\n\n\n",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "[[",
+ "Once": false,
+ "Perms": "0644",
+ "RightDelim": "]]",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ },
+ {
+ "ChangeMode": "restart",
+ "ChangeScript": null,
+ "ChangeSignal": "",
+ "DestPath": "local/tls.yml",
+ "EmbeddedTmpl": "tls:\n certificates:\n - certFile: /local/duckdns_fullchain.pem\n keyFile: /local/duckdns_privkey.pem\n - certFile: /local/dedyn_fullchain.pem\n keyFile: /local/dedyn_privkey.pem\n stores:\n default:\n defaultCertificate:\n certFile: /local/duckdns_fullchain.pem\n keyFile: /local/duckdns_privkey.pem\n\n",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "{{",
+ "Once": false,
+ "Perms": "0644",
+ "RightDelim": "}}",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ },
+ {
+ "ChangeMode": "restart",
+ "ChangeScript": null,
+ "ChangeSignal": "",
+ "DestPath": "local/duckdns_fullchain.pem",
+ "EmbeddedTmpl": "{{ key \"letsconsul/*.fbleagh.duckdns.org/fullchain.cer\" }}",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "{{",
+ "Once": false,
+ "Perms": "777",
+ "RightDelim": "}}",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ },
+ {
+ "ChangeMode": "noop",
+ "ChangeScript": null,
+ "ChangeSignal": "",
+ "DestPath": "local/duckdns_privkey.pem",
+ "EmbeddedTmpl": "{{ key \"letsconsul/*.fbleagh.duckdns.org/*.fbleagh.duckdns.org.key\" }}",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "{{",
+ "Once": false,
+ "Perms": "777",
+ "RightDelim": "}}",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ },
+ {
+ "ChangeMode": "restart",
+ "ChangeScript": null,
+ "ChangeSignal": "",
+ "DestPath": "local/dedyn_fullchain.pem",
+ "EmbeddedTmpl": "{{ key \"letsconsul/*.fbleagh.dedyn.io/fullchain.cer\" }}",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "{{",
+ "Once": false,
+ "Perms": "777",
+ "RightDelim": "}}",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ },
+ {
+ "ChangeMode": "noop",
+ "ChangeScript": null,
+ "ChangeSignal": "",
+ "DestPath": "local/dedyn_privkey.pem",
+ "EmbeddedTmpl": "{{ key \"letsconsul/*.fbleagh.dedyn.io/*.fbleagh.dedyn.io.key\" }}",
+ "Envvars": false,
+ "ErrMissingKey": false,
+ "Gid": null,
+ "LeftDelim": "{{",
+ "Once": false,
+ "Perms": "777",
+ "RightDelim": "}}",
+ "SourcePath": "",
+ "Splay": 5000000000,
+ "Uid": null,
+ "VaultGrace": 0,
+ "Wait": null
+ }
+ ],
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ }
+ ],
+ "Update": {
+ "AutoPromote": false,
+ "AutoRevert": false,
+ "Canary": 0,
+ "HealthCheck": "checks",
+ "HealthyDeadline": 300000000000,
+ "MaxParallel": 1,
+ "MinHealthyTime": 10000000000,
+ "ProgressDeadline": 600000000000,
+ "Stagger": 10000000000
+ },
+ "Volumes": null
+ }
+ ],
+ "Type": "system",
+ "UI": null,
+ "Update": {
+ "AutoPromote": false,
+ "AutoRevert": false,
+ "Canary": 0,
+ "HealthCheck": "",
+ "HealthyDeadline": 0,
+ "MaxParallel": 1,
+ "MinHealthyTime": 0,
+ "ProgressDeadline": 0,
+ "Stagger": 10000000000
+ },
+ "VaultNamespace": "",
+ "Version": 7,
+ "VersionTag": null
+}
\ No newline at end of file
diff --git a/nomad_backup/20251115_141532/trilium.json b/nomad_backup/20251115_141532/trilium.json
new file mode 100644
index 0000000..a1ea095
--- /dev/null
+++ b/nomad_backup/20251115_141532/trilium.json
@@ -0,0 +1,424 @@
+{
+ "Affinities": null,
+ "AllAtOnce": false,
+ "Constraints": null,
+ "ConsulNamespace": "",
+ "CreateIndex": 14152854,
+ "Datacenters": [
+ "dc1"
+ ],
+ "DispatchIdempotencyToken": "",
+ "Dispatched": false,
+ "ID": "trilium",
+ "JobModifyIndex": 14153433,
+ "Meta": null,
+ "ModifyIndex": 14153445,
+ "Multiregion": null,
+ "Name": "trilium",
+ "Namespace": "default",
+ "NodePool": "default",
+ "NomadTokenID": "",
+ "ParameterizedJob": null,
+ "ParentID": "",
+ "Payload": null,
+ "Periodic": null,
+ "Priority": 50,
+ "Region": "global",
+ "Spreads": null,
+ "Stable": true,
+ "Status": "running",
+ "StatusDescription": "",
+ "Stop": false,
+ "SubmitTime": 1761948663361166597,
+ "TaskGroups": [
+ {
+ "Affinities": null,
+ "Constraints": null,
+ "Consul": null,
+ "Count": 1,
+ "Disconnect": null,
+ "EphemeralDisk": {
+ "Migrate": false,
+ "SizeMB": 300,
+ "Sticky": false
+ },
+ "MaxClientDisconnect": null,
+ "Meta": null,
+ "Migrate": {
+ "HealthCheck": "checks",
+ "HealthyDeadline": 300000000000,
+ "MaxParallel": 1,
+ "MinHealthyTime": 10000000000
+ },
+ "Name": "trilium",
+ "Networks": [
+ {
+ "ReservedPorts": [
+ {
+ "HostNetwork": "default",
+ "Label": "http",
+ "To": 8080,
+ "Value": 6699
+ }
+ ]
+ }
+ ],
+ "PreventRescheduleOnLost": false,
+ "ReschedulePolicy": {
+ "Attempts": 0,
+ "Delay": 30000000000,
+ "DelayFunction": "exponential",
+ "Interval": 0,
+ "MaxDelay": 3600000000000,
+ "Unlimited": true
+ },
+ "RestartPolicy": {
+ "Attempts": 2,
+ "Delay": 15000000000,
+ "Interval": 1800000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "Scaling": null,
+ "Services": null,
+ "ShutdownDelay": null,
+ "Spreads": null,
+ "StopAfterClientDisconnect": null,
+ "Tasks": [
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "volumes": [
+ "/mnt/configs/trilium:/data"
+ ],
+ "image": "litestream/litestream:latest",
+ "args": [
+ "restore",
+ "-if-replica-exists",
+ "-if-db-not-exists",
+ "-o",
+ "/alloc/tmp/trilium.db",
+ "sftp://root:odroid@192.168.4.63/mnt/Shares/litestream/trilium.db"
+ ]
+ },
+ "Constraints": null,
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": null,
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 5000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": {
+ "Hook": "prestart",
+ "Sidecar": false
+ },
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 10,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "restore",
+ "Resources": {
+ "CPU": 100,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 300,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 2,
+ "Delay": 15000000000,
+ "Interval": 1800000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": null,
+ "ShutdownDelay": 0,
+ "Templates": null,
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ },
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "volumes": [
+ "/mnt/configs/trilium:/home/node/trilium-data/data",
+ "/mnt/Public/configs/trilium/backup:/home/node/trilium-data/backup",
+ "/mnt/Public/configs/trilium/config:/home/node/trilium-data/config"
+ ],
+ "image": "triliumnext/trilium:stable",
+ "memory_hard_limit": "2048",
+ "ports": [
+ "http"
+ ]
+ },
+ "Constraints": [
+ {
+ "LTarget": "${attr.consul.version}",
+ "Operand": "semver",
+ "RTarget": ">= 1.8.0"
+ }
+ ],
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": {
+ "TRILIUM_DATA_DIR": "/home/node/trilium-data/data",
+ "TRILIUM_BACKUP_DIR": "/home/node/trilium-data/backup",
+ "TRILIUM_CONFIG_INI_PATH": "/home/node/trilium-data/config/config.ini"
+ },
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 5000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": null,
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 10,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "trilium",
+ "Resources": {
+ "CPU": 100,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 128,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 2,
+ "Delay": 15000000000,
+ "Interval": 1800000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": [
+ {
+ "Address": "",
+ "AddressMode": "auto",
+ "CanaryMeta": null,
+ "CanaryTags": null,
+ "Checks": [
+ {
+ "AddressMode": "",
+ "Args": null,
+ "Body": "",
+ "CheckRestart": null,
+ "Command": "",
+ "Expose": false,
+ "FailuresBeforeCritical": 0,
+ "FailuresBeforeWarning": 0,
+ "GRPCService": "",
+ "GRPCUseTLS": false,
+ "Header": null,
+ "InitialStatus": "",
+ "Interval": 10000000000,
+ "Method": "",
+ "Name": "service: \"trilium\" check",
+ "Notes": "",
+ "OnUpdate": "require_healthy",
+ "Path": "",
+ "PortLabel": "",
+ "Protocol": "",
+ "SuccessBeforePassing": 0,
+ "TLSServerName": "",
+ "TLSSkipVerify": false,
+ "TaskName": "trilium",
+ "Timeout": 2000000000,
+ "Type": "tcp"
+ }
+ ],
+ "Cluster": "default",
+ "Connect": null,
+ "EnableTagOverride": false,
+ "Identity": null,
+ "Meta": null,
+ "Name": "trilium",
+ "Namespace": "default",
+ "OnUpdate": "require_healthy",
+ "PortLabel": "http",
+ "Provider": "consul",
+ "TaggedAddresses": null,
+ "Tags": [
+ "trilium",
+ "web",
+ "urlprefix-/trilium",
+ "tools",
+ "traefik.http.routers.triliumlan.rule=Host(`trilium.service.dc1.consul`)",
+ "traefik.http.routers.triliumwan.rule=Host(`tril.fbleagh.duckdns.org`)",
+ "traefik.http.routers.triliumwan.middlewares=dex@consulcatalog",
+ "traefik.http.routers.triliumwan.tls=true"
+ ],
+ "TaskName": "trilium",
+ "Weights": null
+ }
+ ],
+ "ShutdownDelay": 0,
+ "Templates": null,
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ },
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "volumes": [
+ "/mnt/configs/trilium:/data"
+ ],
+ "image": "litestream/litestream:latest",
+ "args": [
+ "replicate",
+ "/alloc/tmp/trilium.db",
+ "sftp://root:odroid@192.168.4.63/mnt/Shares/litestream/trilium.db"
+ ]
+ },
+ "Constraints": null,
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": null,
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 5000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": {
+ "Hook": "poststart",
+ "Sidecar": true
+ },
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 10,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "litestream",
+ "Resources": {
+ "CPU": 100,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 300,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 2,
+ "Delay": 15000000000,
+ "Interval": 1800000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": null,
+ "ShutdownDelay": 0,
+ "Templates": null,
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ }
+ ],
+ "Update": {
+ "AutoPromote": false,
+ "AutoRevert": false,
+ "Canary": 0,
+ "HealthCheck": "checks",
+ "HealthyDeadline": 300000000000,
+ "MaxParallel": 1,
+ "MinHealthyTime": 10000000000,
+ "ProgressDeadline": 600000000000,
+ "Stagger": 30000000000
+ },
+ "Volumes": null
+ }
+ ],
+ "Type": "service",
+ "UI": null,
+ "Update": {
+ "AutoPromote": false,
+ "AutoRevert": false,
+ "Canary": 0,
+ "HealthCheck": "",
+ "HealthyDeadline": 0,
+ "MaxParallel": 1,
+ "MinHealthyTime": 0,
+ "ProgressDeadline": 0,
+ "Stagger": 30000000000
+ },
+ "VaultNamespace": "",
+ "Version": 14,
+ "VersionTag": null
+}
\ No newline at end of file
diff --git a/nomad_backup/20251115_141532/vaultwarden.json b/nomad_backup/20251115_141532/vaultwarden.json
new file mode 100644
index 0000000..ff24528
--- /dev/null
+++ b/nomad_backup/20251115_141532/vaultwarden.json
@@ -0,0 +1,542 @@
+{
+ "Affinities": null,
+ "AllAtOnce": false,
+ "Constraints": [
+ {
+ "LTarget": "${attr.kernel.name}",
+ "Operand": "=",
+ "RTarget": "linux"
+ },
+ {
+ "LTarget": "${attr.cpu.arch}",
+ "Operand": "regexp",
+ "RTarget": "arm64"
+ }
+ ],
+ "ConsulNamespace": "",
+ "CreateIndex": 13569506,
+ "Datacenters": [
+ "dc1"
+ ],
+ "DispatchIdempotencyToken": "",
+ "Dispatched": false,
+ "ID": "vaultwarden",
+ "JobModifyIndex": 13570343,
+ "Meta": null,
+ "ModifyIndex": 13991135,
+ "Multiregion": null,
+ "Name": "vaultwarden",
+ "Namespace": "default",
+ "NodePool": "default",
+ "NomadTokenID": "",
+ "ParameterizedJob": null,
+ "ParentID": "",
+ "Payload": null,
+ "Periodic": null,
+ "Priority": 50,
+ "Region": "global",
+ "Spreads": null,
+ "Stable": true,
+ "Status": "running",
+ "StatusDescription": "",
+ "Stop": false,
+ "SubmitTime": 1738335274858544947,
+ "TaskGroups": [
+ {
+ "Affinities": null,
+ "Constraints": null,
+ "Consul": {
+ "Cluster": "default",
+ "Namespace": "",
+ "Partition": ""
+ },
+ "Count": 1,
+ "Disconnect": null,
+ "EphemeralDisk": {
+ "Migrate": false,
+ "SizeMB": 300,
+ "Sticky": false
+ },
+ "MaxClientDisconnect": null,
+ "Meta": null,
+ "Migrate": {
+ "HealthCheck": "checks",
+ "HealthyDeadline": 300000000000,
+ "MaxParallel": 1,
+ "MinHealthyTime": 10000000000
+ },
+ "Name": "vaultwarden",
+ "Networks": [
+ {
+ "ReservedPorts": [
+ {
+ "HostNetwork": "default",
+ "Label": "http",
+ "To": 80,
+ "Value": 8081
+ }
+ ]
+ }
+ ],
+ "PreventRescheduleOnLost": false,
+ "ReschedulePolicy": {
+ "Attempts": 0,
+ "Delay": 30000000000,
+ "DelayFunction": "exponential",
+ "Interval": 0,
+ "MaxDelay": 3600000000000,
+ "Unlimited": true
+ },
+ "RestartPolicy": {
+ "Attempts": 2,
+ "Delay": 15000000000,
+ "Interval": 1800000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "Scaling": null,
+ "Services": null,
+ "ShutdownDelay": null,
+ "Spreads": null,
+ "StopAfterClientDisconnect": null,
+ "Tasks": [
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "image": "vaultwarden/server:1.32.7",
+ "memory_hard_limit": 2048.0,
+ "ports": [
+ "http"
+ ],
+ "volumes": [
+ "/mnt/configs/${NOMAD_GROUP_NAME}/data:/data"
+ ]
+ },
+ "Constraints": [
+ {
+ "LTarget": "${attr.consul.version}",
+ "Operand": "semver",
+ "RTarget": ">= 1.8.0"
+ }
+ ],
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": {
+ "ADMIN_TOKEN": "VReYRX0RuSw3mxmGFG4+2ECY71l/wYmuD52NOWDur6e43z/inbUmJGUr5KU4wtjW",
+ "DATABASE_URL": "postgresql://postgres:postgres@master.postgres.service.dc1.consul:5432/vaultwarden",
+ "ENABLE_DB_WAL": "false"
+ },
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 5000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": null,
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 10,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "vaultwarden",
+ "Resources": {
+ "CPU": 100,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 128,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 2,
+ "Delay": 15000000000,
+ "Interval": 1800000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": [
+ {
+ "Address": "",
+ "AddressMode": "auto",
+ "CanaryMeta": null,
+ "CanaryTags": null,
+ "Checks": [
+ {
+ "AddressMode": "",
+ "Args": null,
+ "Body": "",
+ "CheckRestart": null,
+ "Command": "",
+ "Expose": false,
+ "FailuresBeforeCritical": 0,
+ "FailuresBeforeWarning": 0,
+ "GRPCService": "",
+ "GRPCUseTLS": false,
+ "Header": null,
+ "InitialStatus": "",
+ "Interval": 10000000000,
+ "Method": "",
+ "Name": "service: \"vaultwarden\" check",
+ "Notes": "",
+ "OnUpdate": "require_healthy",
+ "Path": "",
+ "PortLabel": "",
+ "Protocol": "",
+ "SuccessBeforePassing": 0,
+ "TLSServerName": "",
+ "TLSSkipVerify": false,
+ "TaskName": "vaultwarden",
+ "Timeout": 2000000000,
+ "Type": "tcp"
+ }
+ ],
+ "Cluster": "default",
+ "Connect": null,
+ "EnableTagOverride": false,
+ "Identity": null,
+ "Meta": {
+ "ALLOC": "${NOMAD_ALLOC_ID}"
+ },
+ "Name": "vaultwarden",
+ "Namespace": "default",
+ "OnUpdate": "require_healthy",
+ "PortLabel": "http",
+ "Provider": "consul",
+ "TaggedAddresses": null,
+ "Tags": [
+ "vaultwarden",
+ "web",
+ "urlprefix-/vaultwarden",
+ "backend",
+ "traefik.http.routers.vaultwardenlan.rule=Host(`vaultwarden.service.dc1.consul`)",
+ "traefik.http.routers.vaultwardenwan.rule=Host(`vault.fbleagh.duckdns.org`)",
+ "traefik.http.routers.vaultwardenwan-admin.rule=(Host(`vault.fbleagh.duckdns.org`) && PathPrefix(`/admin/`))",
+ "traefik.http.routers.vaultwardenwan.tls=true",
+ "traefik.http.middlewares.vaultwardenwan-admin-ipwhitelist.ipwhitelist.sourcerange=127.0.0.1/32, 192.168.4.0/22",
+ "traefik.http.routers.nginx-admin.middlewares=vaultwardenwan-admin-ipwhitelist",
+ "enable_gocast",
+ "gocast_vip=192.168.1.246/32",
+ "gocast_nat=tcp:8081:8081",
+ "gocast_nat=udp:8081:8081"
+ ],
+ "TaskName": "vaultwarden",
+ "Weights": null
+ }
+ ],
+ "ShutdownDelay": 0,
+ "Templates": null,
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ },
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "args": [
+ "flock",
+ "-x",
+ "/locks/${NOMAD_GROUP_NAME}_rsync.lock",
+ "rsync",
+ "-avz",
+ "--exclude='logs'",
+ "--exclude='/run/*.sock'",
+ "/configbackup/",
+ "/config/",
+ "--delete-before"
+ ],
+ "image": "ghcr.io/sstent/rsync",
+ "memory_hard_limit": 2048.0,
+ "volumes": [
+ "/mnt/configs/${NOMAD_GROUP_NAME}/data:/config",
+ "/mnt/Public/config/${NOMAD_GROUP_NAME}:/configbackup",
+ "/mnt/Public/config/locks:/locks"
+ ]
+ },
+ "Constraints": null,
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": null,
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 5000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": {
+ "Hook": "prestart",
+ "Sidecar": false
+ },
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 10,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "init",
+ "Resources": {
+ "CPU": 20,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 20,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 2,
+ "Delay": 15000000000,
+ "Interval": 1800000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": null,
+ "ShutdownDelay": 0,
+ "Templates": null,
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ },
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "args": [
+ "flock",
+ "-x",
+ "/locks/${NOMAD_GROUP_NAME}_rsync.lock",
+ "rsync",
+ "-av",
+ "--exclude='logs'",
+ "--exclude='/run/*.sock'",
+ "/config/",
+ "/configbackup/",
+ "--remove-source-files"
+ ],
+ "image": "ghcr.io/sstent/rsync",
+ "memory_hard_limit": 2048.0,
+ "volumes": [
+ "/mnt/configs/${NOMAD_GROUP_NAME}/data:/config",
+ "/mnt/Public/config/${NOMAD_GROUP_NAME}:/configbackup",
+ "/mnt/Public/config/locks:/locks"
+ ]
+ },
+ "Constraints": null,
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": null,
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 5000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": {
+ "Hook": "poststop",
+ "Sidecar": false
+ },
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 10,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "finalsync",
+ "Resources": {
+ "CPU": 20,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 20,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 2,
+ "Delay": 15000000000,
+ "Interval": 1800000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": null,
+ "ShutdownDelay": 0,
+ "Templates": null,
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ },
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "memory_hard_limit": "2048",
+ "volumes": [
+ "/mnt/configs/${NOMAD_GROUP_NAME}/data:/config",
+ "/mnt/Public/config/${NOMAD_GROUP_NAME}:/configbackup"
+ ],
+ "args": [
+ "client"
+ ],
+ "image": "ghcr.io/sstent/rsync"
+ },
+ "Constraints": null,
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": {
+ "CRON_TASK_1": "50 * * * * rsync -av --exclude='*.db' --exclude='*.db' --exclude='.*.db-litestream' --exclude='generations' /config/ /configbackup/;"
+ },
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 5000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": {
+ "Hook": "poststart",
+ "Sidecar": true
+ },
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 10,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "sync",
+ "Resources": {
+ "CPU": 20,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 20,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 2,
+ "Delay": 15000000000,
+ "Interval": 1800000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": null,
+ "ShutdownDelay": 0,
+ "Templates": null,
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ }
+ ],
+ "Update": {
+ "AutoPromote": false,
+ "AutoRevert": false,
+ "Canary": 0,
+ "HealthCheck": "checks",
+ "HealthyDeadline": 300000000000,
+ "MaxParallel": 1,
+ "MinHealthyTime": 10000000000,
+ "ProgressDeadline": 600000000000,
+ "Stagger": 30000000000
+ },
+ "Volumes": null
+ }
+ ],
+ "Type": "service",
+ "UI": null,
+ "Update": {
+ "AutoPromote": false,
+ "AutoRevert": false,
+ "Canary": 0,
+ "HealthCheck": "",
+ "HealthyDeadline": 0,
+ "MaxParallel": 1,
+ "MinHealthyTime": 0,
+ "ProgressDeadline": 0,
+ "Stagger": 30000000000
+ },
+ "VaultNamespace": "",
+ "Version": 5,
+ "VersionTag": null
+}
\ No newline at end of file
diff --git a/nomad_backup/20251115_141532/wallabag.json b/nomad_backup/20251115_141532/wallabag.json
new file mode 100644
index 0000000..5005bd0
--- /dev/null
+++ b/nomad_backup/20251115_141532/wallabag.json
@@ -0,0 +1,242 @@
+{
+ "Affinities": null,
+ "AllAtOnce": false,
+ "Constraints": null,
+ "ConsulNamespace": "",
+ "CreateIndex": 13721718,
+ "Datacenters": [
+ "dc1"
+ ],
+ "DispatchIdempotencyToken": "",
+ "Dispatched": false,
+ "ID": "wallabag",
+ "JobModifyIndex": 13721718,
+ "Meta": null,
+ "ModifyIndex": 13990957,
+ "Multiregion": null,
+ "Name": "wallabag",
+ "Namespace": "default",
+ "NodePool": "default",
+ "NomadTokenID": "",
+ "ParameterizedJob": null,
+ "ParentID": "",
+ "Payload": null,
+ "Periodic": null,
+ "Priority": 50,
+ "Region": "global",
+ "Spreads": null,
+ "Stable": true,
+ "Status": "running",
+ "StatusDescription": "",
+ "Stop": false,
+ "SubmitTime": 1745512053324129511,
+ "TaskGroups": [
+ {
+ "Affinities": null,
+ "Constraints": null,
+ "Consul": {
+ "Cluster": "default",
+ "Namespace": "",
+ "Partition": ""
+ },
+ "Count": 1,
+ "Disconnect": null,
+ "EphemeralDisk": {
+ "Migrate": false,
+ "SizeMB": 300,
+ "Sticky": false
+ },
+ "MaxClientDisconnect": null,
+ "Meta": null,
+ "Migrate": {
+ "HealthCheck": "checks",
+ "HealthyDeadline": 300000000000,
+ "MaxParallel": 1,
+ "MinHealthyTime": 10000000000
+ },
+ "Name": "wallabag",
+ "Networks": [
+ {
+ "DynamicPorts": [
+ {
+ "HostNetwork": "default",
+ "Label": "http",
+ "To": 80
+ }
+ ]
+ }
+ ],
+ "PreventRescheduleOnLost": false,
+ "ReschedulePolicy": {
+ "Attempts": 0,
+ "Delay": 30000000000,
+ "DelayFunction": "exponential",
+ "Interval": 0,
+ "MaxDelay": 3600000000000,
+ "Unlimited": true
+ },
+ "RestartPolicy": {
+ "Attempts": 2,
+ "Delay": 15000000000,
+ "Interval": 1800000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "Scaling": null,
+ "Services": null,
+ "ShutdownDelay": null,
+ "Spreads": null,
+ "StopAfterClientDisconnect": null,
+ "Tasks": [
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "memory_hard_limit": 2048.0,
+ "ports": [
+ "http"
+ ],
+ "image": "wallabag/wallabag:latest"
+ },
+ "Constraints": [
+ {
+ "LTarget": "${attr.consul.version}",
+ "Operand": "semver",
+ "RTarget": ">= 1.8.0"
+ }
+ ],
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": {
+ "SYMFONY__ENV__DATABASE_NAME": "wallabag",
+ "SYMFONY__ENV__DOMAIN_NAME": "https://wallabag.fbleagh.duckdns.org",
+ "SYMFONY__ENV__DATABASE_PASSWORD": "wallabag",
+ "SYMFONY__ENV__MAILER_DSN": "gmail+smtp://stuart.stent@gmail.com:lsrhrzfembksmvgc@default",
+ "SYMFONY__ENV__FROM_EMAIL": "wallabag@wallabag.fbleagh.duckdns.org",
+ "SYMFONY__ENV__DATABASE_DRIVER": "pdo_pgsql",
+ "POSTGRES_PASSWORD": "postgres",
+ "SYMFONY__ENV__DATABASE_PORT": "5432",
+ "POPULATE_DATABASE": "False",
+ "SYMFONY__ENV__DATABASE_HOST": "master.postgres.service.dc1.consul",
+ "POSTGRES_USER": "postgres",
+ "SYMFONY__ENV__DATABASE_USER": "wallabag"
+ },
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 5000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": null,
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 10,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "wallabag",
+ "Resources": {
+ "CPU": 500,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 256,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 2,
+ "Delay": 15000000000,
+ "Interval": 1800000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": [
+ {
+ "Address": "",
+ "AddressMode": "auto",
+ "CanaryMeta": null,
+ "CanaryTags": null,
+ "Checks": null,
+ "Cluster": "default",
+ "Connect": null,
+ "EnableTagOverride": false,
+ "Identity": null,
+ "Meta": null,
+ "Name": "wallabag",
+ "Namespace": "default",
+ "OnUpdate": "require_healthy",
+ "PortLabel": "http",
+ "Provider": "consul",
+ "TaggedAddresses": null,
+ "Tags": [
+ "wallabag",
+ "tools",
+ "traefik.http.routers.wallabaglan.rule=Host(`wallabag.service.dc1.consul`)",
+ "traefik.http.routers.wallabagwan.rule=Host(`wallabag.fbleagh.duckdns.org`)",
+ "traefik.http.routers.wallabagwan.tls=true",
+ "traefik.http.middlewares.vaultwardenwan-admin-ipwhitelist.ipwhitelist.sourcerange=127.0.0.1/32, 192.168.1.0/24",
+ "traefik.http.routers.nginx-admin.middlewares=vaultwardenwan-admin-ipwhitelist"
+ ],
+ "TaskName": "wallabag",
+ "Weights": null
+ }
+ ],
+ "ShutdownDelay": 0,
+ "Templates": null,
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ }
+ ],
+ "Update": {
+ "AutoPromote": false,
+ "AutoRevert": false,
+ "Canary": 0,
+ "HealthCheck": "checks",
+ "HealthyDeadline": 300000000000,
+ "MaxParallel": 1,
+ "MinHealthyTime": 10000000000,
+ "ProgressDeadline": 600000000000,
+ "Stagger": 30000000000
+ },
+ "Volumes": null
+ }
+ ],
+ "Type": "service",
+ "UI": null,
+ "Update": {
+ "AutoPromote": false,
+ "AutoRevert": false,
+ "Canary": 0,
+ "HealthCheck": "",
+ "HealthyDeadline": 0,
+ "MaxParallel": 1,
+ "MinHealthyTime": 0,
+ "ProgressDeadline": 0,
+ "Stagger": 30000000000
+ },
+ "VaultNamespace": "",
+ "Version": 0,
+ "VersionTag": null
+}
\ No newline at end of file
diff --git a/nomad_backup/20251115_141532/wireguard.json b/nomad_backup/20251115_141532/wireguard.json
new file mode 100644
index 0000000..bc3a6f1
--- /dev/null
+++ b/nomad_backup/20251115_141532/wireguard.json
@@ -0,0 +1,259 @@
+{
+ "Affinities": null,
+ "AllAtOnce": false,
+ "Constraints": [
+ {
+ "LTarget": "${attr.cpu.arch}",
+ "Operand": "regexp",
+ "RTarget": "amd64"
+ }
+ ],
+ "ConsulNamespace": "",
+ "CreateIndex": 13571990,
+ "Datacenters": [
+ "dc1"
+ ],
+ "DispatchIdempotencyToken": "",
+ "Dispatched": false,
+ "ID": "wireguard",
+ "JobModifyIndex": 13892530,
+ "Meta": null,
+ "ModifyIndex": 14202927,
+ "Multiregion": null,
+ "Name": "wireguard",
+ "Namespace": "default",
+ "NodePool": "default",
+ "NomadTokenID": "",
+ "ParameterizedJob": null,
+ "ParentID": "",
+ "Payload": null,
+ "Periodic": null,
+ "Priority": 50,
+ "Region": "global",
+ "Spreads": null,
+ "Stable": true,
+ "Status": "running",
+ "StatusDescription": "",
+ "Stop": false,
+ "SubmitTime": 1753800396765131865,
+ "TaskGroups": [
+ {
+ "Affinities": null,
+ "Constraints": null,
+ "Consul": {
+ "Cluster": "default",
+ "Namespace": "",
+ "Partition": ""
+ },
+ "Count": 1,
+ "Disconnect": null,
+ "EphemeralDisk": {
+ "Migrate": false,
+ "SizeMB": 300,
+ "Sticky": false
+ },
+ "MaxClientDisconnect": null,
+ "Meta": null,
+ "Migrate": {
+ "HealthCheck": "checks",
+ "HealthyDeadline": 300000000000,
+ "MaxParallel": 1,
+ "MinHealthyTime": 10000000000
+ },
+ "Name": "wireguard",
+ "Networks": [
+ {
+ "ReservedPorts": [
+ {
+ "HostNetwork": "default",
+ "Label": "vpn",
+ "To": 51820,
+ "Value": 51820
+ },
+ {
+ "HostNetwork": "default",
+ "Label": "vpn_ui",
+ "To": 51821,
+ "Value": 51821
+ }
+ ]
+ }
+ ],
+ "PreventRescheduleOnLost": false,
+ "ReschedulePolicy": {
+ "Attempts": 0,
+ "Delay": 30000000000,
+ "DelayFunction": "exponential",
+ "Interval": 0,
+ "MaxDelay": 3600000000000,
+ "Unlimited": true
+ },
+ "RestartPolicy": {
+ "Attempts": 2,
+ "Delay": 15000000000,
+ "Interval": 1800000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "Scaling": null,
+ "Services": null,
+ "ShutdownDelay": null,
+ "Spreads": null,
+ "StopAfterClientDisconnect": null,
+ "Tasks": [
+ {
+ "Actions": null,
+ "Affinities": null,
+ "Artifacts": null,
+ "CSIPluginConfig": null,
+ "Config": {
+ "volumes": [
+ "/mnt/Public/config/wireguard:/etc/wireguard"
+ ],
+ "cap_add": [
+ "NET_ADMIN",
+ "SYS_MODULE"
+ ],
+ "sysctl": [
+ {
+ "net.ipv4.conf.all.src_valid_mark": "1",
+ "net.ipv4.ip_forward": "1"
+ }
+ ],
+ "image": "ghcr.io/wg-easy/wg-easy",
+ "ports": [
+ "vpn",
+ "vpn_ui"
+ ]
+ },
+ "Constraints": [
+ {
+ "LTarget": "${attr.consul.version}",
+ "Operand": "semver",
+ "RTarget": ">= 1.8.0"
+ }
+ ],
+ "Consul": null,
+ "DispatchPayload": null,
+ "Driver": "docker",
+ "Env": {
+ "UI_CHART_TYPE": "1",
+ "WG_PORT": "51820",
+ "UI_TRAFFIC_STATS": "true",
+ "WEBUI_HOST": "0.0.0.0",
+ "PGID": "1000",
+ "WG_ALLOWED_IPS": "0.0.0.0/0",
+ "PORT": "51821",
+ "WG_DEFAULT_DNS": "192.168.4.36, 8.8.8.8",
+ "PUID": "1000",
+ "WG_HOST": "wireguard.fbleagh.duckdns.org",
+ "TZ": "EST5EDT"
+ },
+ "Identities": null,
+ "Identity": {
+ "Audience": [
+ "nomadproject.io"
+ ],
+ "ChangeMode": "",
+ "ChangeSignal": "",
+ "Env": false,
+ "File": false,
+ "Filepath": "",
+ "Name": "default",
+ "ServiceName": "",
+ "TTL": 0
+ },
+ "KillSignal": "",
+ "KillTimeout": 5000000000,
+ "Kind": "",
+ "Leader": false,
+ "Lifecycle": null,
+ "LogConfig": {
+ "Disabled": false,
+ "MaxFileSizeMB": 10,
+ "MaxFiles": 10
+ },
+ "Meta": null,
+ "Name": "wireguard",
+ "Resources": {
+ "CPU": 50,
+ "Cores": 0,
+ "Devices": null,
+ "DiskMB": 0,
+ "IOPS": 0,
+ "MemoryMB": 100,
+ "MemoryMaxMB": 0,
+ "NUMA": null,
+ "Networks": null,
+ "SecretsMB": 0
+ },
+ "RestartPolicy": {
+ "Attempts": 2,
+ "Delay": 15000000000,
+ "Interval": 1800000000000,
+ "Mode": "fail",
+ "RenderTemplates": false
+ },
+ "ScalingPolicies": null,
+ "Schedule": null,
+ "Services": [
+ {
+ "Address": "",
+ "AddressMode": "auto",
+ "CanaryMeta": null,
+ "CanaryTags": null,
+ "Checks": null,
+ "Cluster": "default",
+ "Connect": null,
+ "EnableTagOverride": false,
+ "Identity": null,
+ "Meta": null,
+ "Name": "wireguard",
+ "Namespace": "default",
+ "OnUpdate": "require_healthy",
+ "PortLabel": "vpn",
+ "Provider": "consul",
+ "TaggedAddresses": null,
+ "Tags": null,
+ "TaskName": "wireguard",
+ "Weights": null
+ }
+ ],
+ "ShutdownDelay": 0,
+ "Templates": null,
+ "User": "",
+ "Vault": null,
+ "VolumeMounts": null
+ }
+ ],
+ "Update": {
+ "AutoPromote": false,
+ "AutoRevert": false,
+ "Canary": 0,
+ "HealthCheck": "checks",
+ "HealthyDeadline": 300000000000,
+ "MaxParallel": 1,
+ "MinHealthyTime": 10000000000,
+ "ProgressDeadline": 600000000000,
+ "Stagger": 30000000000
+ },
+ "Volumes": null
+ }
+ ],
+ "Type": "service",
+ "UI": null,
+ "Update": {
+ "AutoPromote": false,
+ "AutoRevert": false,
+ "Canary": 0,
+ "HealthCheck": "",
+ "HealthyDeadline": 0,
+ "MaxParallel": 1,
+ "MinHealthyTime": 0,
+ "ProgressDeadline": 0,
+ "Stagger": 30000000000
+ },
+ "VaultNamespace": "",
+ "Version": 6,
+ "VersionTag": null
+}
\ No newline at end of file
diff --git a/nomad_backup/20251115_142246/acme.json b/nomad_backup/20251115_142246/acme.json
new file mode 100644
index 0000000..74f1aba
--- /dev/null
+++ b/nomad_backup/20251115_142246/acme.json
@@ -0,0 +1,10 @@
+{
+ "Format": "hcl2",
+ "JobID": "acme",
+ "JobModifyIndex": 13570366,
+ "Namespace": "default",
+ "Source": "job \"acme\" {\n datacenters = [\"dc1\"]\n type = \"batch\"\n\n periodic {\n cron = \"@weekly\"\n prohibit_overlap = true\n }\n\n group \"acme\" {\n restart {\n attempts = 1\n delay = \"30s\"\n } \n task \"acme\" {\n driver = \"docker\"\n\n config {\n image = \"neilpang/acme.sh\"\n entrypoint = [\"/local/acme_wrapper.sh\"]\n volumes = [\n \"/mnt/configs/${NOMAD_GROUP_NAME}:/acme.sh\",\n ]\n }\n env {\n DEDYN_TOKEN=\"JPwQpUiWGkKHSkmGEC4YAeGiGFki\" \n DuckDNS_Token=\"e4b5ca33-1f4d-494b-b06d-6dd4600df662\" \n CONSUL_URL=\"${attr.unique.network.ip-address}\"\n\n }\n\n template {\n change_mode = \"noop\"\n data = \"{{ key \\\"scripts/acme.sh\\\" }}\"\n destination = \"local/acme_wrapper.sh\"\n perms = 0777\n }\n\n\n\n resources {\n cpu = 256\n memory = 64\n }\n }\n\n task \"init\" {\n driver = \"docker\"\n\n lifecycle {\n hook = \"prestart\"\n sidecar = false\n }\n\n config {\n image = \"ghcr.io/sstent/rsync\"\n memory_hard_limit = 2048\n\n volumes = [\n \"/mnt/configs/${NOMAD_GROUP_NAME}:/config\",\n \"/mnt/Public/config/${NOMAD_GROUP_NAME}:/configbackup\",\n \"/mnt/Public/config/locks:/locks\",\n ]\n\n args = [\"flock\", \"-x\", \"/locks/${NOMAD_GROUP_NAME}_rsync.lock\", \"rsync\", \"-avz\",\"--delete-excluded\",\"--exclude=renewal\",\"--exclude='live'\",\"--exclude='archive'\",\"--exclude='keys'\",\"--exclude='csr'\", \"/configbackup/\", \"/config/\", \"--delete-before\"]\n }\n resources {\n cpu = 20 # 500 MHz\n memory = 20 # 128MB\n }\n } #end init task\n\n task \"finalsync\" {\n driver = \"docker\"\n\n lifecycle {\n hook = \"poststop\"\n }\n\n config {\n // image = \"pebalk/rsync\"\n image = \"ghcr.io/sstent/rsync\"\n memory_hard_limit = 2048\n\n volumes = [\n \"/mnt/configs/${NOMAD_GROUP_NAME}:/config\",\n \"/mnt/Public/config/${NOMAD_GROUP_NAME}:/configbackup\",\n \"/mnt/Public/config/locks:/locks\",\n ]\n\n args = [\"flock\", \"-x\", \"/locks/${NOMAD_GROUP_NAME}_rsync.lock\", \"rsync\", \"-av\",\"--delete-excluded\",\"--exclude=renewal\",\"--exclude='live'\",\"--exclude='archive'\",\"--exclude='keys'\",\"--exclude='csr'\", \"/config/\", \"/configbackup/\",\"--remove-source-files\"]\n }\n resources {\n cpu = 20 # 500 MHz\n memory = 20 # 128MB\n }\n } #end finalsync task\n }\n}",
+ "VariableFlags": null,
+ "Variables": "",
+ "Version": 0
+}
\ No newline at end of file
diff --git a/nomad_backup/20251115_142246/auth.json b/nomad_backup/20251115_142246/auth.json
new file mode 100644
index 0000000..98f165b
--- /dev/null
+++ b/nomad_backup/20251115_142246/auth.json
@@ -0,0 +1,10 @@
+{
+ "Format": "hcl2",
+ "JobID": "auth",
+ "JobModifyIndex": 13770263,
+ "Namespace": "default",
+ "Source": "job \"auth\" {\n datacenters = [\"dc1\"]\n type = \"service\"\n constraint {\n attribute = \"${attr.kernel.name}\"\n value = \"linux\"\n }\n\n constraint {\n attribute = \"${attr.unique.hostname}\"\n operator = \"regexp\"\n value = \"odroid.*\"\n }\n group \"auth\" {\n count = 1\n\n task \"fwdauth\" {\n driver = \"docker\"\n\n config {\n // image = \"npawelek/traefik-forward-auth\"\n image = \"thomseddon/traefik-forward-auth:2-arm\"\n\n port_map {\n auth = 4181\n }\n\n volumes = [\n \"/etc/localtime:/etc/localtime:ro\",\n ]\n }\n\n env {\n PROVIDERS_GOOGLE_CLIENT_ID = \"807888907647-uog95jmiolsuh6ql1t8jm53l1jvuajck.apps.googleusercontent.com\"\n PROVIDERS_GOOGLE_CLIENT_SECRET = \"B8bDri5mFvGv-Ghzbt8fLj4W\"\n SECRET = \"ladskfdjmqwermnnbasfnmldas\"\n CONFIG = \"/local/config.ini\"\n LIFETIME = \"31536000\"\n WHITELIST = \"stuart.stent@gmail.com,stephen.bunt@gmail.com\"\n\n // AUTH_HOST = \"fwdauth.fbleagh.duckdns.org\"\n COOKIE_DOMAIN = \"fbleagh.duckdns.org\"\n }\n\n template {\n data = \"{{ key \\\"Dex\\\" }}\"\n destination = \"local/config.ini\"\n change_mode = \"restart\"\n }\n\n resources {\n cpu = 100 # 100 MHz\n memory = 64 # 128 MB\n\n network {\n port \"auth\" {\n static = 4181\n }\n }\n }\n\n service {\n name = \"dex\"\n\n tags = [\n \"fwdauth\",\n \"web\",\n \"traefik.http.routers.dex.rule=Host(`fwdauth.fbleagh.duckdns.org`,`fwdauth.fbleagh.dedyn.io`)\",\n \"traefik.http.routers.dex.entrypoints=websecure\",\n \"traefik.http.routers.dex.tls=true\",\n // \"traefik.http.routers.dex.tls.certresolver=myresolver\",\n \"traefik.http.middlewares.dex.forwardauth.address=http://dex.service.dc1.consul:4181\",\n \"traefik.http.middlewares.dex.forwardauth.trustForwardHeader=true\",\n \"traefik.http.middlewares.dex.forwardauth.authResponseHeaders=X-Forwarded-User\",\n \"traefik.http.routers.auth.middlewares=dex\",\n \"traefik.http.routers.traefik-forward-auth.middlewares=dex\",\n ]\n\n port = \"auth\"\n\n check {\n type = \"tcp\"\n interval = \"10s\"\n timeout = \"2s\"\n }\n }\n } #end Dex\n }\n}\n",
+ "VariableFlags": null,
+ "Variables": "",
+ "Version": 2
+}
\ No newline at end of file
diff --git a/nomad_backup/20251115_142246/calendar-proxy.json b/nomad_backup/20251115_142246/calendar-proxy.json
new file mode 100644
index 0000000..7afeda8
--- /dev/null
+++ b/nomad_backup/20251115_142246/calendar-proxy.json
@@ -0,0 +1,10 @@
+{
+ "Format": "hcl2",
+ "JobID": "calendar-proxy",
+ "JobModifyIndex": 13940997,
+ "Namespace": "default",
+ "Source": "job \"calendar-proxy\" {\n datacenters = [\"dc1\"]\n type = \"service\"\n \n group \"web\" {\n count = 1\n \n network {\n port \"http\" {\n to = 80\n }\n }\n \n service {\n name = \"calendar-proxy\"\n port = \"http\"\n \n tags = [\n \"traefik.enable=true\",\n \"traefik.http.routers.calendar-proxy.rule=Host(`mail.fbleagh.duckdns.org`)\",\n \"traefik.http.routers.calendar-proxy.entrypoints=web\",\n ]\n \n check {\n type = \"http\"\n path = \"/health\"\n interval = \"10s\"\n timeout = \"3s\"\n }\n }\n \n # Nginx container\n task \"nginx\" {\n driver = \"docker\"\n lifecycle {\n hook = \"prestart\"\n sidecar = true\n }\n\n config {\n image = \"nginx:alpine\"\n ports = [\"http\"]\n \n volumes = [\n \"local/nginx.conf:/etc/nginx/nginx.conf\",\n \"local/app:/var/www/html\",\n ]\n }\n \n template {\n data = < [\n \"header\" => \"User-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36\",\n ]\n]);\nif (($data = @file_get_contents($url, false, $context)) === false) {\n $error = error_get_last();\n http_response_code(500);\n print \"HTTP request failed: \" . $error['message'];\n exit;\n}\nheader('Content-Type: text/calendar; charset=utf-8');\nprint $data;\n?>\nEOF\n destination = \"local/app/ics.php\"\n }\n\n \n resources {\n cpu = 100\n memory = 128\n }\n }\n \n # PHP-FPM container\n task \"php-fpm\" {\n driver = \"docker\"\n \n config {\n image = \"php:8.2-fpm-alpine\"\n network_mode = \"container:nginx-${NOMAD_ALLOC_ID}\"\n \n volumes = [\n \"local/app:/var/www/html\",\n \"local/php-fpm.conf:/usr/local/etc/php-fpm.d/www.conf\",\n ]\n }\n \n template {\n data = < [\n \"header\" => \"User-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36\",\n ]\n]);\nif (($data = @file_get_contents($url, false, $context)) === false) {\n $error = error_get_last();\n http_response_code(500);\n print \"HTTP request failed: \" . $error['message'];\n exit;\n}\nheader('Content-Type: text/calendar; charset=utf-8');\nprint $data;\n?>\nEOF\n destination = \"local/app/ics.php\"\n }\n\n resources {\n cpu = 200\n memory = 256\n }\n }\n \n # Restart policy\n restart {\n attempts = 3\n interval = \"5m\"\n delay = \"25s\"\n mode = \"fail\"\n }\n \n # Update strategy\n update {\n max_parallel = 1\n min_healthy_time = \"10s\"\n healthy_deadline = \"3m\"\n auto_revert = true\n }\n }\n}",
+ "VariableFlags": null,
+ "Variables": "",
+ "Version": 7
+}
\ No newline at end of file
diff --git a/nomad_backup/20251115_142246/democratic-csi-local.json b/nomad_backup/20251115_142246/democratic-csi-local.json
new file mode 100644
index 0000000..3206093
--- /dev/null
+++ b/nomad_backup/20251115_142246/democratic-csi-local.json
@@ -0,0 +1,10 @@
+{
+ "Format": "hcl2",
+ "JobID": "democratic-csi-local",
+ "JobModifyIndex": 13925215,
+ "Namespace": "default",
+ "Source": "job \"democratic-csi-local\" {\n datacenters = [\"dc1\"]\n type = \"system\"\n\n group \"controller\" {\n count = 1\n\n task \"controller\" {\n driver = \"docker\"\n\n config {\n image = \"democraticcsi/democratic-csi:latest\"\n \n args = [\n \"--csi-version=1.5.0\",\n \"--csi-name=org.democratic-csi.local-hostpath\", \n \"--driver-config-file=/config/driver-config-file.yaml\",\n \"--log-level=info\",\n \"--csi-mode=controller\",\n \"--server-socket=/csi/csi.sock\",\n ]\n\n volumes = [\n \"local/config:/config:ro\"\n ]\n }\n\n template {\n data = <<-EOH\ndriver: local-hostpath\ninstance_id: {{ env \"node.unique.id\" }}\nlocal-hostpath:\n shareBasePath: \"/tmp/democratic-csi-local-hostpath\"\n controllerBasePath: \"/tmp/democratic-csi-local-hostpath\"\n dirPermissionsMode: \"0755\"\n dirPermissionsUser: 0\n dirPermissionsGroup: 0\nEOH\n destination = \"local/config/driver-config-file.yaml\"\n }\n\n csi_plugin {\n id = \"org.democratic-csi.local-hostpath\"\n type = \"controller\"\n mount_dir = \"/csi\"\n }\n\n resources {\n cpu = 256\n memory = 128\n }\n }\n }\n\n group \"nodes\" {\n task \"node\" {\n driver = \"docker\"\n\n config {\n image = \"democraticcsi/democratic-csi:latest\"\n \n args = [\n \"--csi-version=1.5.0\",\n \"--csi-name=org.democratic-csi.local-hostpath\",\n \"--driver-config-file=/config/driver-config-file.yaml\", \n \"--log-level=info\",\n \"--csi-mode=node\",\n \"--server-socket=/csi/csi.sock\",\n ]\n\n privileged = true\n \n volumes = [\n \"local/config:/config:ro\",\n \"/tmp/democratic-csi-local-hostpath:/tmp/democratic-csi-local-hostpath:rshared\"\n ]\n }\n\n template {\n data = <<-EOH\ndriver: local-hostpath\ninstance_id: {{ env \"node.unique.id\" }}\nlocal-hostpath:\n shareBasePath: \"/tmp/democratic-csi-local-hostpath\"\n controllerBasePath: \"/tmp/democratic-csi-local-hostpath\"\n dirPermissionsMode: \"0755\"\n dirPermissionsUser: 0\n dirPermissionsGroup: 0\nEOH\n destination = \"local/config/driver-config-file.yaml\"\n }\n\n csi_plugin {\n id = \"org.democratic-csi.local-hostpath\"\n type = \"node\"\n mount_dir = \"/csi\"\n }\n\n resources {\n cpu = 256\n memory = 128\n }\n }\n }\n}\n",
+ "VariableFlags": null,
+ "Variables": "",
+ "Version": 1
+}
\ No newline at end of file
diff --git a/nomad_backup/20251115_142246/foodplanner.json b/nomad_backup/20251115_142246/foodplanner.json
new file mode 100644
index 0000000..f8b0598
--- /dev/null
+++ b/nomad_backup/20251115_142246/foodplanner.json
@@ -0,0 +1,10 @@
+{
+ "Format": "hcl2",
+ "JobID": "foodplanner",
+ "JobModifyIndex": 14064853,
+ "Namespace": "default",
+ "Source": "job \"foodplanner\" {\n datacenters = [\"dc1\"]\n\n type = \"service\"\n\n group \"app\" {\n count = 1\n\n network {\n port \"http\" {\n to = 8999\n }\n }\n\n service {\n name = \"foodplanner\"\n port = \"http\"\n\n check {\n type = \"http\"\n path = \"/\"\n interval = \"10s\"\n timeout = \"2s\"\n }\n }\n\n # Prestart restore task\n task \"restore\" {\n driver = \"docker\"\n lifecycle {\n hook = \"prestart\"\n sidecar = false\n }\n config {\n # image = \"litestream/litestream:latest\"\n image = \"litestream/litestream:0.3\"\n args = [\n \"restore\",\n # \"-if-replica-exists\",\n #\"-if-db-not-exists\",\n \"-o\", \"/alloc/tmp/meal_planner.db\",\n \"sftp://root:odroid@192.168.4.63/mnt/Shares/litestream/foodplanner.db\"\n ]\n volumes = [\n \"/opt/nomad/data:/data\"\n ]\n }\n }\n\n task \"app\" {\n driver = \"docker\"\n\n config {\n image = \"ghcr.io/sstent/foodplanner:main\"\n ports = [\"http\"]\n\n # Mount the SQLite database file to persist data\n # Adjust the source path as needed for your environment\n volumes = [\n \"/mnt/Public/configs/FoodPlanner_backups:/app/backups/\",\n ]\n }\n env {\n DATABASE_PATH = \"/alloc/tmp\"\n DATABASE_URL = \"sqlite:////alloc/tmp/meal_planner.db\"\n }\n resources {\n cpu = 500\n memory = 1024\n }\n\n # Restart policy\n restart {\n attempts = 3\n interval = \"10m\"\n delay = \"15s\"\n mode = \"fail\"\n }\n }\n\n # Litestream sidecar for continuous replication\n task \"litestream\" {\n driver = \"docker\"\n lifecycle {\n hook = \"poststart\" # runs after main task starts\n sidecar = true\n }\n config {\n # image = \"litestream/litestream:0.5.0-test.10\"\n image = \"litestream/litestream:0.3\"\n args = [\n \"replicate\",\n \"/alloc/tmp/meal_planner.db\",\n \"sftp://root:odroid@192.168.4.63/mnt/Shares/litestream/foodplanner.db\"\n ]\n }\n }\n }\n}",
+ "VariableFlags": null,
+ "Variables": "",
+ "Version": 0
+}
\ No newline at end of file
diff --git a/nomad_backup/20251115_142246/gonic.json b/nomad_backup/20251115_142246/gonic.json
new file mode 100644
index 0000000..bed9cd0
--- /dev/null
+++ b/nomad_backup/20251115_142246/gonic.json
@@ -0,0 +1,10 @@
+{
+ "Format": "hcl2",
+ "JobID": "gonic",
+ "JobModifyIndex": 13923644,
+ "Namespace": "default",
+ "Source": "job \"gonic\" {\n datacenters = [\"dc1\"]\n type = \"service\"\n\n\n\n group \"gonic\" {\n count = 1\n task \"gonic\" {\n driver = \"docker\"\n config {\n image = \"sentriz/gonic\"\n port_map {\n http = 80\n }\n volumes = [\n \"/mnt/configs/gonic/data:/data\",\n \"/mnt/configs/gonic/cache:/cache\",\n \"/mnt/Public/Downloads/Clean_Music:/music/CleanMusic:ro\",\n \"/mnt/Public/Downloads/incoming_music:/music/incomingmusic:ro\",\n \"/mnt/Public/Downloads/podcasts:/podcasts\",\n \"/mnt/Public/Downloads/musicplaylists:/musicplaylists\",\n\n ]\n }\n env{\n GONIC_SCAN_INTERVAL = \"120\"\n GONIC_MUSIC_PATH = \"/music\"\n GONIC_PODCAST_PATH = \"/podcasts\"\n GONIC_PLAYLISTS_PATH = \"/musicplaylists\"\n }\n resources {\n cpu = 100 # 100 MHz\n memory = 256 # 128 MB\n network {\n port \"http\" {\n static = \"4747\"\n }\n }\n }\n service {\n name = \"gonic\"\n tags = [ \n \"gonic\",\n \"web\",\n \"urlprefix-/gonic\",\n \"backend\",\n \"traefik.http.routers.goniclan.rule=Host(`gonic.service.dc1.consul`)\",\n \"traefik.http.routers.gonicwan.rule=Host(`mg.fbleagh.duckdns.org`)\",\n \"traefik.http.routers.gonicwan.tls=true\",\n \"traefik.http.routers.gonicwan.tls.certresolver=myresolver\"\n \n ]\n // \"traefik.http.middlewares.gonic_auth.basicauth.users=admin:$2y$05$cJGONoS0BFTeBUXqmETikeI14QhLDKIDkYuPdA1umIOC129grVMAm\",\n port = \"http\"\n meta {\n ALLOC = \"${NOMAD_ALLOC_ID}\"\n }\n check {\n type = \"tcp\"\n interval = \"10s\"\n timeout = \"2s\"\n }\n }\n } #end gonic\n\n task \"init-manual\" {\n driver = \"docker\"\n lifecycle {\n hook = \"prestart\"\n sidecar = false\n }\n config {\n memory_hard_limit = \"2048\"\n\n image = \"ghcr.io/sstent/rsync\"\n volumes = [\n \"/mnt/configs/${NOMAD_GROUP_NAME}:/config\",\n \"/mnt/Public/config/${NOMAD_GROUP_NAME}:/configbackup\",\n \"/mnt/Public/config/locks:/locks\" \n ]\n\n args = [\"flock\", \"-x\",\"/locks/${NOMAD_GROUP_NAME}_rsync.lock\",\"rsync\",\"-av\",\"--exclude=Backups\",\"/configbackup/\",\"/config/\",\"--delete-before\"]\n }\n resources {\n cpu = 20 # 500 MHz\n memory = 20 # 128MB\n }\n }\n\n\n task \"finalsync-manual\" {\n driver = \"docker\"\n lifecycle {\n hook = \"poststop\"\n }\n config {\n memory_hard_limit = \"2048\"\n\n image = \"ghcr.io/sstent/rsync\"\n volumes = [\n \"/mnt/configs/${NOMAD_GROUP_NAME}:/config\",\n \"/mnt/Public/config/${NOMAD_GROUP_NAME}:/configbackup\",\n \"/mnt/Public/config/locks:/locks\" \n ]\n\n args = [\"flock\", \"-x\",\"/locks/${NOMAD_GROUP_NAME}_rsync.lock\",\"rsync\",\"-av\",\"/config/\",\"/configbackup/\"]\n }\n resources {\n cpu = 20 # 500 MHz\n memory = 20 # 128MB\n }\n }\n\n task \"db-sync\" {\n driver = \"docker\"\n lifecycle {\n hook = \"poststart\"\n sidecar = true\n }\n config {\n memory_hard_limit = \"2048\"\n\n image = \"ghcr.io/sstent/rsync\"\n volumes = [\n \"/mnt/configs/${NOMAD_GROUP_NAME}:/config\",\n \"/mnt/Public/config/${NOMAD_GROUP_NAME}:/configbackup\", \n ]\n \n // args = [\"/usr/local/bin/litestream\", \"replicate\", \"-config\",\"/local/litestream.yml\"]\n }\n resources {\n cpu = 20 # 500 MHz\n memory = 20 # 128MB\n }\n template {\n data = <Local Services - HTTP/HTTPS
\n \n \n Node Environment Information:
\n node_id: {{ env \"node.unique.id\" }}
\n datacenter: {{ env \"NOMAD_DC\" }}\n
\n EOH\n\n destination = \"local/data/index.html\"\n change_mode = \"noop\"\n }\n\n resources {\n cpu = 100 # 100 MHz\n memory = 64 # 128 MB\n }\n service {\n name = \"nginx\"\n tags = [\"nginx\", \"web\", \"urlprefix-/nginx\", \"backend\"]\n port = \"http\"\n\n check {\n type = \"tcp\"\n interval = \"10s\"\n timeout = \"2s\"\n }\n }\n }\n\n network {\n port \"http\" {\n to = 8080\n }\n\n // port \"https\" {\n // to = 443\n // }\n }\n }\n}\n",
+ "VariableFlags": null,
+ "Variables": "",
+ "Version": 0
+}
\ No newline at end of file
diff --git a/nomad_backup/20251115_142246/nzbget.json b/nomad_backup/20251115_142246/nzbget.json
new file mode 100644
index 0000000..86a411f
--- /dev/null
+++ b/nomad_backup/20251115_142246/nzbget.json
@@ -0,0 +1,10 @@
+{
+ "Format": "hcl2",
+ "JobID": "nzbget",
+ "JobModifyIndex": 14132455,
+ "Namespace": "default",
+ "Source": "job \"nzbget\" {\n # region = \"global\"\n datacenters = [\"dc1\"]\n type = \"service\"\n\n # priority = 50\n\n constraint {\n attribute = \"${attr.kernel.name}\"\n value = \"linux\"\n }\n constraint {\n attribute = \"${attr.unique.hostname}\"\n operator = \"regexp\"\n value = \"odroid.*\"\n }\n update {\n # Stagger updates every 60 seconds\n stagger = \"90s\"\n max_parallel = 1\n healthy_deadline = \"5m\"\n }\n group \"nzbget\" {\n count = 1\n\n restart {\n attempts = 8\n interval = \"20m\"\n delay = \"10s\"\n mode = \"delay\"\n }\n\n // task \"init-trigger\" {\n // driver = \"docker\"\n\n // lifecycle {\n // hook = \"prestart\"\n // }\n\n // config {\n // image = \"curlimages/curl\"\n // args = [\"--request\", \"PUT\", \"--data\", \"${NOMAD_ALLOC_ID}\", \"http://${attr.unique.network.ip-address}:8500/v1/kv/${NOMAD_GROUP_NAME}\"]\n // }\n // resources {\n // cpu = 20 # 500 MHz\n // memory = 20 # 128MB\n // }\n // }\n\n\n task \"ovpn-client\" {\n driver = \"docker\"\n lifecycle {\n hook = \"prestart\"\n sidecar = true\n }\n\n config {\n // image = \"registry.service.dc1.consul:5000/openpyn:latest\"\n image = \"qmcgaw/gluetun\"\n memory_hard_limit = \"1024\"\n\n ports = [\n \"shadowsocks\",\n \"nzbget\",\n \"http_proxy\",\n \"http_admin\",\n \"sabnzb_admin\",\n \"socks\",\n ]\n\n cap_add = [\n \"NET_ADMIN\",\n \"NET_BIND_SERVICE\",\n ]\n\n #network_mode = \"host\"\n #network_mode = \"vpn\"\n\n volumes = [\n \"/etc/localtime:/etc/localtime\",\n ]\n devices = [\n {\n host_path = \"/dev/net/tun\"\n container_path = \"/dev/net/tun\"\n },\n ]\n }\n\n env {\n // VPNFLAGS = \"us --max-load 70 --top-servers 10 --pings 5\"\n // VPNFLAGS = \"nl --max-load 70 --top-servers 10 --pings 5\"\n // VPNSP = \"nordvpn\"\n // OPENVPN_USER = \"yvPLaZ3xkXtnJKsyXDNQf9Ft\"\n // OPENVPN_PASSWORD = \"SW8XvhGkSVuQitjuFrbH9WPA\"\n // REGION = \"Netherlands\"\n ##Mullvad\n VPNSP = \"mullvad\"\n VPN_TYPE = \"wireguard\"\n COUNTRY = \"Canada\"\n CITY = \"Toronto\"\n FIREWALL_VPN_INPUT_PORTS = \"56987\"\n WIREGUARD_PRIVATE_KEY = \"2FHwQX1jxk+qeMmXUtSGRc2kKF1WHeSCyIgHNW+7akA=\" #ActiveLynx\n WIREGUARD_ADDRESS = \"10.66.246.4/32\"\n \n \n \n HTTPPROXY = \"on\"\n UPDATER_PERIOD= \"24h\"\n SHADOWSOCKS_PASSWORD = \"farscape5\"\n SHADOWSOCKS = \"off\"\n DOT_PROVIDERS = \"cloudflare,google,quad9,quadrant\"\n DOT = \"off\"\n }\n\n service {\n name = \"${TASKGROUP}-admin\"\n tags = [\"global\", \"ovpn-openpyn\"]\n port = \"http_admin\"\n }\n\n service {\n name = \"${TASKGROUP}\"\n tags = [\"global\", \"ovpn-openpyn\"]\n port = \"shadowsocks\"\n }\n\n service {\n name = \"nzbget\"\n tags = [\"global\", \"ovpn-openpyn\"]\n port = \"nzbget\"\n }\n service {\n name = \"sabnzb\"\n tags = [\"global\", \"ovpn-openpyn\", \"enable_gocast\",\n \"gocast_vip=192.168.1.247/32\",\n \"gocast_nat=tcp:8080:8080\",\n \"gocast_nat=udp:8080:8080\",]\n port = \"sabnzb_admin\"\n }\nservice {\n name = \"socks-nord\"\n tags = [\"global\", \"ovpn-openpyn\", \"enable_gocast\",\n \"gocast_vip=192.168.1.243/32\",\n \"gocast_nat=tcp:1080:1080\",\n \"gocast_nat=udp:1080:1080\",]\n port = \"socks\" \n\n }\n\n\n resources {\n cpu = 100 # 500 MHz\n memory = 100 # 128MB\n }\n } #task ovpn\n\n\n task \"dante\" {\n driver = \"docker\"\n\n config {\n image = \"serjs/go-socks5-proxy\"\n // image = \"ghcr.io/sstent/dante:latest\"\n network_mode = \"container:ovpn-client-${NOMAD_ALLOC_ID}\"\n memory_hard_limit = 256\n\n devices = [\n {\n host_path = \"/dev/net/tun\"\n container_path = \"/dev/net/tun\"\n },\n ]\n }\n env {\n REQUIRE_AUTH = \"false\"\n }\n \n \n resources {\n cpu = 64 # 500 MHz\n memory = 128 # 128MB\n }\n }\n ######################################################################\n ######################################################################\n ######################################################################\n\n task \"init\" {\n driver = \"docker\"\n\n lifecycle {\n hook = \"prestart\"\n sidecar = false\n }\n\n config {\n image = \"ghcr.io/sstent/rsync:v0.3.5\"\n memory_hard_limit = \"2048\"\n\n volumes = [\n \"/mnt/configs/${NOMAD_GROUP_NAME}:/config\",\n \"/mnt/Public/config/${NOMAD_GROUP_NAME}:/configbackup\",\n \"/mnt/Public/config/locks:/locks\",\n ]\n\n args = [\"flock\", \"-x\", \"/locks/${NOMAD_GROUP_NAME}_rsync.lock\", \"rsync\", \"-avz\", \"--exclude=Backups\", \"/configbackup/\", \"/config/\", \"--delete-before\"]\n }\n\n resources {\n cpu = 20 # 500 MHz\n memory = 20 # 128MB\n }\n } #end init task\n task \"finalsync\" {\n driver = \"docker\"\n\n lifecycle {\n hook = \"poststop\"\n }\n\n config {\n // image = \"pebalk/rsync\"\n image = \"ghcr.io/sstent/rsync:v0.3.5\"\n memory_hard_limit = \"2048\"\n\n volumes = [\n \"/mnt/configs/${NOMAD_GROUP_NAME}:/config\",\n \"/mnt/Public/config/${NOMAD_GROUP_NAME}:/configbackup\",\n \"/mnt/Public/config/locks:/locks\",\n ]\n\n args = [\"flock\", \"-x\", \"/locks/${NOMAD_GROUP_NAME}_rsync.lock\", \"rsync\", \"-avz\", \"/config/\", \"/configbackup/\"]\n }\n\n resources {\n cpu = 20 # 500 MHz\n memory = 20 # 128MB\n }\n } #end finalsync task\n // task \"sync\" {\n // driver = \"docker\"\n\n // lifecycle {\n // hook = \"poststart\"\n // sidecar = true\n // }\n\n // config {\n // image = \"ghcr.io/sstent/rsync:v0.3.5\"\n // memory_hard_limit = \"2048\"\n\n // volumes = [\n // \"/mnt/configs/:/configs\",\n // \"/mnt/Public/config/${NOMAD_GROUP_NAME}:/configbackup\",\n // ]\n\n // args = [\"client\"]\n // }\n // resources {\n // cpu = 20 # 500 MHz\n // memory = 20 # 128MB\n // }\n // env {\n // CRON_TASK_1 = \"*/20 8-20 * * * chmod a-w /configs/${NOMAD_GROUP_NAME}/ ; rsync -avz /configs/${NOMAD_GROUP_NAME}/ /configbackup/; chmod a+w /configs/${NOMAD_GROUP_NAME}/;\"\n // }\n // } #end sync task\n\n ######################################################################\n ######################################################################\n ######################################################################\n\n network {\n port \"shadowsocks\" {\n static = \"8338\"\n to = \"8388\"\n }\n\n port \"http_proxy\" {\n static = \"8888\"\n to = \"8888\"\n }\n port \"http_admin\" {\n static = \"8000\"\n to = \"8000\"\n }\n\n port \"sabnzb_admin\" {\n static = \"8080\"\n to = \"8080\"\n }\n\n\n port \"socks\" {\n static = \"1080\"\n to = \"1080\"\n }\n port \"nzbget\" {\n static = \"6789\"\n to = \"6789\"\n }\n }\n }\n}\n",
+ "VariableFlags": null,
+ "Variables": "",
+ "Version": 10
+}
\ No newline at end of file
diff --git a/nomad_backup/20251115_142246/postgres-15.json b/nomad_backup/20251115_142246/postgres-15.json
new file mode 100644
index 0000000..68f2223
--- /dev/null
+++ b/nomad_backup/20251115_142246/postgres-15.json
@@ -0,0 +1,10 @@
+{
+ "Format": "hcl2",
+ "JobID": "postgres-15",
+ "JobModifyIndex": 13569135,
+ "Namespace": "default",
+ "Source": "job \"postgres-15\" {\n type = \"system\"\n datacenters = [\"dc1\"]\n\n group \"group\" {\n count = 1\n\n network {\n \n port api { \n static = 8008 \n to = 8008 \n }\n port pg { \n static = 5432 \n to = 5432 \n }\n }\n\n task \"db\" {\n driver = \"docker\"\n\n template {\n data = <\\K.8-20 * * *?(?=<.8-20 * * *?>)' /config/config.xml)\n // // curl -f \"http://localhost:9696/api/v1/system/status?apikey=$API\"\n // }\n }\n template {\n data = <\\K.*?(?=<.*?>)' /config/config.xml)\"\n EOH\n\n destination = \"local/healthcheck.sh\"\n perms = \"0755\"\n }\n\n env {\n // SHARE = \"Public;/mount/Public;yes;no;yes;all;none;;Public\"\n # GLOBAL = \"socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=65536 SO_SNDBUF=65536\"\n # PERMISSIONS = \"true\"\n # WORKGROUP = \"WORKGROUP\"\n TZ = \"EST5EDT\"\n\n PUID = 1000\n PGID = 1000\n }\n\n # We must specify the resources required for\n # this task to ensure it runs on a machine with\n # enough capacity.\n resources {\n cpu = 500 # 500 MHz\n memory = 256 # 128MB\n }\n\n # Specify configuration related to log rotation\n logs {\n max_files = 10\n max_file_size = 15\n }\n\n # Controls the timeout between signalling a task it will be killed\n # and killing the task. If not set a default is used.\n kill_timeout = \"10s\"\n } #End main task\n\n network {\n // mbits = 100\n\n port \"http\" {\n static = 9696\n to = 9696\n }\n port \"http_flare\" {\n static = 8191\n to = 8191\n }\n }\n }\n}\n",
+ "VariableFlags": null,
+ "Variables": "",
+ "Version": 2
+}
\ No newline at end of file
diff --git a/nomad_backup/20251115_142246/qautomate.json b/nomad_backup/20251115_142246/qautomate.json
new file mode 100644
index 0000000..412b832
--- /dev/null
+++ b/nomad_backup/20251115_142246/qautomate.json
@@ -0,0 +1,10 @@
+{
+ "Format": "hcl2",
+ "JobID": "qautomate",
+ "JobModifyIndex": 13930001,
+ "Namespace": "default",
+ "Source": "job \"qautomate\" {\n periodic {\n cron = \"*/30 * * * *\"\n prohibit_overlap = true\n }\n datacenters = [\"dc1\"]\n\n type = \"batch\"\n\n group \"app\" {\n count = 1\n\n task \"setup\" {\n driver = \"docker\"\n\n lifecycle {\n hook = \"prestart\"\n }\n\n config {\n image = \"ghcr.io/sstent/ubuntu-python3\"\n // command = \"/bin/bash\"\n args = [\"-v\",\"-c\", \"/local/prestart.sh\"]\n\n }\n\n template {\n data = <\nInfo\n7878\n\n*\n9898\nFalse\n237c27f22504440385e5ee295fd65eb5\nForms\nmaster\n\nTrue\n\nDocker\nFalse\nRadarr\nDisabledForLocalAddresses\npostgres\npostgres\n5432\nmaster.postgres.service.dc1.consul\n\n EOH\n\n destination = \"local/config.xml\"\n perms = \"0755\"\n }\n\n service {\n name = \"${TASKGROUP}\"\n tags = [\"radarr\", \"tools\"]\n port = \"http\"\n\n check {\n type = \"script\"\n name = \"check_up\"\n command = \"/local/healthcheck.sh\"\n interval = \"5m\"\n timeout = \"25s\"\n\n check_restart {\n limit = 3\n grace = \"90s\"\n ignore_warnings = false\n } \n }\n }\n template {\n data = <(.*)' /config/config.xml | sed -e 's/<[^>]*>//g')\"\n EOH\n\n destination = \"local/healthcheck.sh\"\n perms = \"0755\"\n }\n\n env {\n TZ = \"EST5EDT\"\n PUID = 1000\n PGID = 1000\n }\n\n resources {\n cpu = 500 # 500 MHz\n memory = 256 # 128MB\n\n // network {\n // port \"radarr\" {\n // static = \"7878\"\n // }\n // }\n }\n\n logs {\n max_files = 10\n max_file_size = 15\n }\n\n kill_timeout = \"10s\"\n } #Task\n\n network {\n // mode = \"bridge\"\n port \"http\" {\n static = 7878\n to = 7878\n }\n }\n } #Group\n}\n",
+ "VariableFlags": null,
+ "Variables": "",
+ "Version": 13
+}
\ No newline at end of file
diff --git a/nomad_backup/20251115_142246/slskd.json b/nomad_backup/20251115_142246/slskd.json
new file mode 100644
index 0000000..b7b1219
--- /dev/null
+++ b/nomad_backup/20251115_142246/slskd.json
@@ -0,0 +1,10 @@
+{
+ "Format": "hcl2",
+ "JobID": "slskd",
+ "JobModifyIndex": 14202950,
+ "Namespace": "default",
+ "Source": "# There can only be a single job definition per file.\n# Create a job with ID and Name 'example'\njob \"slskd\" {\n datacenters = [\"dc1\"]\n type = \"service\"\n\n constraint {\n attribute = \"${attr.kernel.name}\"\n value = \"linux\"\n }\nconstraint {\n attribute = \"${attr.cpu.arch}\"\n operator = \"regexp\"\n value = \"amd64\"\n }\n\n update {\n stagger = \"10s\"\n max_parallel = 1\n }\n\n group \"slskd\" {\n count = 1\n\n restart {\n attempts = 2\n interval = \"1m\"\n delay = \"10s\"\n mode = \"fail\"\n }\n\ntask \"slskd-vpn\" {\n driver = \"docker\"\n lifecycle {\n hook = \"prestart\"\n sidecar = true\n }\n\n config {\n // image = \"registry.service.dc1.consul:5000/openpyn:latest\"\n // image = \"qmcgaw/gluetun\"\n image = \"qmcgaw/gluetun\"\n\n memory_hard_limit = \"1024\"\n ports = [\"http\",\"https\",\"guac\"]\n\n cap_add = [\n \"NET_ADMIN\",\n \"NET_BIND_SERVICE\",\n ]\n\n #network_mode = \"host\"\n #network_mode = \"vpn\"\n\n volumes = [\n \"/etc/localtime:/etc/localtime\",\n \"/mnt/syncthing/mullvad:/vpn\",\n\n ]\n devices = [\n {\n host_path = \"/dev/net/tun\"\n container_path = \"/dev/net/tun\"\n },\n ]\n }\n\n env {\n VPN_SERVICE_PROVIDER=\"airvpn\"\n VPN_TYPE=\"wireguard\"\n WIREGUARD_PRIVATE_KEY=\"SPpgnVCsOnz+zzorzTiOmvDF8GElgp27dSIeYAq43Vk=\"\n WIREGUARD_PRESHARED_KEY=\"TBb2gU8pSTSG6lT4QYr7pzNWN7wZEn0yeG4VDTtuy50=\"\n WIREGUARD_ADDRESSES=\"10.186.222.247/32\"\n SERVER_COUNTRIES=\"Canada\"\n SERVER_CITIES=\"Montreal\"\n FIREWALL_VPN_INPUT_PORTS = \"53304\"\n HEALTH_TARGET_ADDRESS=\"1.1.1.1\"\n HEALTH_SUCCESS_WAIT_DURATION=\"30s\"\n HEALTH_VPN_DURATION_INITIAL=\"3600s\"\n HEALTH_VPN_DURATION_ADDITION=\"600s\"\n // HEALTH_TARGET_ADDRESS=\"cloudflare.com:443\"\n \n \n ##Mullvad\n #VPNSP = \"mullvad\"\n #VPN_TYPE = \"wireguard\"\n #COUNTRY = \"Canada\"\n #CITY = \"Toronto\"\n #FIREWALL_VPN_INPUT_PORTS = \"56987\"\n #WIREGUARD_PRIVATE_KEY = \"iA64ImY2XNvml7s+HEHWNNGXeqpzFN0/KYGxhCsHLV8=\"\n #WIREGUARD_ADDRESS = \"10.64.141.217/32\"\n HTTPPROXY = \"on\"\n SHADOWSOCKS_PASSWORD = \"farscape5\"\n SHADOWSOCKS = \"on\"\n DOT_PROVIDERS = \"cloudflare,google,quad9,quadrant\"\n DOT = \"off\"\n WEBUI_PORT=8080\n }\n\n\n resources {\n cpu = 100 # 500 MHz\n memory = 250 # 128MB\n }\n } #task ovpn\n\n task \"nicotine\" {\n driver = \"docker\"\n\n config {\n image = \"ghcr.io/fletchto99/nicotine-plus-docker:latest\"\n memory_hard_limit = \"1024\"\n \n network_mode = \"container:slskd-vpn-${NOMAD_ALLOC_ID}\"\n\n volumes = [\n \"/mnt/Public/Downloads/news/slskd/config:/config\",\n \"/mnt/Public/Downloads/news/slskd/shared:/shared\",\n \"/mnt/Public/Downloads/news/slskd/downloads/:/downloads\",\n \"/mnt/Public/Downloads/news/slskd/incomplete/:/incomplete\",\n ]\n }\n env {\n PUID=1000\n PGID=1000\n TZ=\"Etc/UTC\"\n LISTENING_PORT=\"53304\"\n }\n }\n\n\n network {\n // mbits = 100\n\n port \"http\" {\n static = 5000\n to = 5000\n }\n port \"https\" {\n static = 5001\n to = 5001\n }\n port \"guac\" {\n static = 6080\n to = 6080\n }\n }\n }\n}\n",
+ "VariableFlags": null,
+ "Variables": "",
+ "Version": 14
+}
\ No newline at end of file
diff --git a/nomad_backup/20251115_142246/sonarr.json b/nomad_backup/20251115_142246/sonarr.json
new file mode 100644
index 0000000..55ccc4f
--- /dev/null
+++ b/nomad_backup/20251115_142246/sonarr.json
@@ -0,0 +1,10 @@
+{
+ "Format": "hcl2",
+ "JobID": "sonarr",
+ "JobModifyIndex": 13991917,
+ "Namespace": "default",
+ "Source": "# There can only be a single job definition per file.\n# Create a job with ID and Name 'example'\njob \"sonarr\" {\n datacenters = [\"dc1\"]\n type = \"service\"\n\n constraint {\n attribute = \"${attr.kernel.name}\"\n value = \"linux\"\n }\n constraint {\n attribute = \"${attr.cpu.arch}\"\n operator = \"regexp\"\n value = \"amd64\"\n }\n \n update {\n stagger = \"10s\"\n max_parallel = 1\n }\n group \"sonarr\" {\n count = 1\n\n restart {\n attempts = 2\n interval = \"1m\"\n delay = \"10s\"\n mode = \"fail\"\n }\n\n task \"sonarr\" {\n // driver = \"raw_exec\" // config { // command = \"docker\" // args = [\"run\", // \"--rm\", // \"--name=sonarr\", // \"-e\", \"PUID=1000\", // \"-e\", \"PGID=1000\", // \"-e\", \"TZ=EST5EDT\", // \"-p\", \"8989:8989\", // \"-v\", \"/mnt/syncthing/sonarrv3:/config\", // \"-v\", \"/mnt/Public/Downloads/tv:/tv\", // \"-v\", \"/mnt/Public/Downloads/news:/downloads\", // \"--cpuset-cpus\",\"4-7\", // \"linuxserver/sonarr:preview\"] // }\n\n driver = \"docker\"\n\n config {\n image = \"linuxserver/sonarr:develop\"\n\n ports = [\"http\"]\n\n // dns_servers = [\"192.168.1.1\", \"1.1.1.1\"]\n memory_hard_limit = \"2048\"\n // cpuset_cpus = \"4-7\"\n\n volumes = [\n \"/mnt/Public/Downloads/news:/downloads\",\n \"/mnt/Public/Downloads/tv:/tv\",\n // \"/mnt/configs/sonarr:/config\",\n \"/mnt/Public/configs/sonarr_pg:/config\",\n // \"local/config.xml:/config/config.xml\"\n ]\n\n // \"/mnt/gv0/sonarr:/config\",\n force_pull = false\n }\n\n service {\n name = \"${TASKGROUP}\"\n tags = [\"sonarr\", \"tools\"]\n port = \"http\"\n\n check {\n type = \"script\"\n name = \"check_up\"\n command = \"/local/healthcheck.sh\"\n interval = \"60s\"\n timeout = \"5s\"\n\n check_restart {\n limit = 3\n grace = \"90s\"\n ignore_warnings = false\n } \n }\n }\n template {\n data = <(.*)' /config/config.xml | sed -e 's/<[^>]*>//g')\"\n EOH\n\n destination = \"local/healthcheck.sh\"\n perms = \"0755\"\n }\n\n template {\n data = \"---\\nkey: {{ key \\\"ovpn-client\\\" }}\"\n destination = \"local/file.yml\"\n change_mode = \"restart\"\n }\n template {\n data = <\nInfo\n8989\n/sonarr\n*\n9898\nFalse\n1632787062fb47a9a6eb4c88e32b3ff3\nNone\ndevelop\nTrue\n\nDocker\nFalse\n/config/restart.sh\nSonarr\npostgres\npostgres\n5432\nmaster.postgres.service.dc1.consul\n\n EOH\n\n destination = \"local/config.xml\"\n perms = \"0755\"\n }\n env {\n // SHARE = \"Public;/mount/Public;yes;no;yes;all;none;;Public\"\n # GLOBAL = \"socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=65536 SO_SNDBUF=65536\"\n # PERMISSIONS = \"true\"\n # WORKGROUP = \"WORKGROUP\"\n TZ = \"EST5EDT\"\n\n PUID = 1000\n PGID = 1000\n }\n\n # We must specify the resources required for\n # this task to ensure it runs on a machine with\n # enough capacity.\n resources {\n cpu = 500 # 500 MHz\n memory = 256 # 128MB\n }\n\n # Specify configuration related to log rotation\n logs {\n max_files = 12\n max_file_size = 15\n }\n\n # Controls the timeout between signalling a task it will be killed\n # and killing the task. If not set a default is used.\n kill_timeout = \"10s\"\n } #End main task\n\n network {\n // mbits = 100\n\n port \"http\" {\n static = 8989\n to = 8989\n }\n }\n }\n}\n",
+ "VariableFlags": null,
+ "Variables": "",
+ "Version": 20
+}
\ No newline at end of file
diff --git a/nomad_backup/20251115_142246/traefik.json b/nomad_backup/20251115_142246/traefik.json
new file mode 100644
index 0000000..a6c3f2a
--- /dev/null
+++ b/nomad_backup/20251115_142246/traefik.json
@@ -0,0 +1,10 @@
+{
+ "Format": "hcl2",
+ "JobID": "traefik",
+ "JobModifyIndex": 14202342,
+ "Namespace": "default",
+ "Source": "job \"traefik\" {\n datacenters = [\"dc1\"]\n type = \"system\"\n\n constraint {\n attribute = \"${attr.kernel.name}\"\n value = \"linux\"\n }\n\n update {\n stagger = \"10s\"\n max_parallel = 1\n healthy_deadline = \"5m\"\n }\n\n group \"traefik\" {\n count = 1\n\n restart {\n attempts = 6\n interval = \"1m\"\n delay = \"10s\"\n mode = \"delay\"\n }\n\n task \"traefik\" {\n driver = \"docker\"\n\n config {\n image = \"traefik:2.9\"\n // network_mode = \"host\"\n\n args = [\n // \"--api.dashboard\",\n // \"--providers.consulcatalog.defaultRule=Host(`{{ .Name }}.service.dc1.consul`)\",\n // \"--providers.consulcatalog.endpoint.address=${attr.unique.network.ip-address}:8500\",\n // \"--providers.consulcatalog.exposedbydefault=true\",\n // \"--metrics=true\",\n // \"--metrics.prometheus=true\",\n // \"--metrics.prometheus.entryPoint=web\",\n // \"--entryPoints.web.address=:80\",\n // \"--entryPoints.websecure.address=:443\",\n // \"--entryPoints.openvpn.address=:1194/udp\",\n \"--configFile=/local/file.yml\",\n // \"--certificatesresolvers.myresolver.acme.email=stuart.stent@gmail.com\",\n // \"--certificatesresolvers.myresolver.acme.storage=/acmecert/acme.json\",\n // \"--certificatesresolvers.myresolver.acme.tlschallenge=true\",\n // \"--certificatesresolvers.myresolver-int.acme.email=stuart.stent@gmail.com\",\n // \"--certificatesresolvers.myresolver-int.acme.storage=/acmecert/acme.json\",\n // \"--certificatesresolvers.myresolver-int.acme.tlschallenge=true\",\n // \"--certificatesresolvers.myresolver-int.acme.dnschallenge=true\",\n // \"--certificatesresolvers.myresolver-int.acme.dnschallenge.provider=duckdns\",\n \"--accesslog=true\",\n // \"--serversTransport.insecureSkipVerify=true\",\n ]\n volumes = [\n \"/var/run/docker.sock:/var/run/docker.sock\",\n \"/mnt/mnt/configs/letsencrypt:/acmecert/\",\n ]\n\n dns_servers = [\"192.168.1.1\", \"192.168.1.250\"]\n ports = [\"traefik\", \"traefikhttps\",\"traefikui\"]\n\n memory_hard_limit = 2048\n }\n\n env {\n TZ = \"EST5EDT\"\n PUID = 1000\n PGID = 1000\n DUCKDNS_TOKEN=\"e4b5ca33-1f4d-494b-b06d-6dd4600df662\"\n }\n\n template {\n left_delimiter = \"[[\"\n right_delimiter = \"]]\"\n\n data = < [
+ "header" => "User-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36",
+ ]
+]);
+if (($data = @file_get_contents($url, false, $context)) === false) {
+ $error = error_get_last();
+ http_response_code(500);
+ print "HTTP request failed: " . $error['message'];
+ exit;
+}
+header('Content-Type: text/calendar; charset=utf-8');
+print $data;
+?>
+EOF
+ destination = "local/app/ics.php"
+ }
+
+
+ resources {
+ cpu = 100
+ memory = 128
+ }
+ }
+
+ # PHP-FPM container
+ task "php-fpm" {
+ driver = "docker"
+
+ config {
+ image = "php:8.2-fpm-alpine"
+ network_mode = "container:nginx-${NOMAD_ALLOC_ID}"
+
+ volumes = [
+ "local/app:/var/www/html",
+ "local/php-fpm.conf:/usr/local/etc/php-fpm.d/www.conf",
+ ]
+ }
+
+ template {
+ data = < [
+ "header" => "User-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36",
+ ]
+]);
+if (($data = @file_get_contents($url, false, $context)) === false) {
+ $error = error_get_last();
+ http_response_code(500);
+ print "HTTP request failed: " . $error['message'];
+ exit;
+}
+header('Content-Type: text/calendar; charset=utf-8');
+print $data;
+?>
+EOF
+ destination = "local/app/ics.php"
+ }
+
+ resources {
+ cpu = 200
+ memory = 256
+ }
+ }
+
+ # Restart policy
+ restart {
+ attempts = 3
+ interval = "5m"
+ delay = "25s"
+ mode = "fail"
+ }
+
+ # Update strategy
+ update {
+ max_parallel = 1
+ min_healthy_time = "10s"
+ healthy_deadline = "3m"
+ auto_revert = true
+ }
+ }
+}
\ No newline at end of file
diff --git a/nomad_backup/20251115_142432/democratic-csi-local.hcl b/nomad_backup/20251115_142432/democratic-csi-local.hcl
new file mode 100644
index 0000000..1fc4018
--- /dev/null
+++ b/nomad_backup/20251115_142432/democratic-csi-local.hcl
@@ -0,0 +1,105 @@
+job "democratic-csi-local" {
+ datacenters = ["dc1"]
+ type = "system"
+
+ group "controller" {
+ count = 1
+
+ task "controller" {
+ driver = "docker"
+
+ config {
+ image = "democraticcsi/democratic-csi:latest"
+
+ args = [
+ "--csi-version=1.5.0",
+ "--csi-name=org.democratic-csi.local-hostpath",
+ "--driver-config-file=/config/driver-config-file.yaml",
+ "--log-level=info",
+ "--csi-mode=controller",
+ "--server-socket=/csi/csi.sock",
+ ]
+
+ volumes = [
+ "local/config:/config:ro"
+ ]
+ }
+
+ template {
+ data = <<-EOH
+driver: local-hostpath
+instance_id: {{ env "node.unique.id" }}
+local-hostpath:
+ shareBasePath: "/tmp/democratic-csi-local-hostpath"
+ controllerBasePath: "/tmp/democratic-csi-local-hostpath"
+ dirPermissionsMode: "0755"
+ dirPermissionsUser: 0
+ dirPermissionsGroup: 0
+EOH
+ destination = "local/config/driver-config-file.yaml"
+ }
+
+ csi_plugin {
+ id = "org.democratic-csi.local-hostpath"
+ type = "controller"
+ mount_dir = "/csi"
+ }
+
+ resources {
+ cpu = 256
+ memory = 128
+ }
+ }
+ }
+
+ group "nodes" {
+ task "node" {
+ driver = "docker"
+
+ config {
+ image = "democraticcsi/democratic-csi:latest"
+
+ args = [
+ "--csi-version=1.5.0",
+ "--csi-name=org.democratic-csi.local-hostpath",
+ "--driver-config-file=/config/driver-config-file.yaml",
+ "--log-level=info",
+ "--csi-mode=node",
+ "--server-socket=/csi/csi.sock",
+ ]
+
+ privileged = true
+
+ volumes = [
+ "local/config:/config:ro",
+ "/tmp/democratic-csi-local-hostpath:/tmp/democratic-csi-local-hostpath:rshared"
+ ]
+ }
+
+ template {
+ data = <<-EOH
+driver: local-hostpath
+instance_id: {{ env "node.unique.id" }}
+local-hostpath:
+ shareBasePath: "/tmp/democratic-csi-local-hostpath"
+ controllerBasePath: "/tmp/democratic-csi-local-hostpath"
+ dirPermissionsMode: "0755"
+ dirPermissionsUser: 0
+ dirPermissionsGroup: 0
+EOH
+ destination = "local/config/driver-config-file.yaml"
+ }
+
+ csi_plugin {
+ id = "org.democratic-csi.local-hostpath"
+ type = "node"
+ mount_dir = "/csi"
+ }
+
+ resources {
+ cpu = 256
+ memory = 128
+ }
+ }
+ }
+}
diff --git a/nomad_backup/20251115_142432/foodplanner.hcl b/nomad_backup/20251115_142432/foodplanner.hcl
new file mode 100644
index 0000000..8f15b81
--- /dev/null
+++ b/nomad_backup/20251115_142432/foodplanner.hcl
@@ -0,0 +1,99 @@
+job "foodplanner" {
+ datacenters = ["dc1"]
+
+ type = "service"
+
+ group "app" {
+ count = 1
+
+ network {
+ port "http" {
+ to = 8999
+ }
+ }
+
+ service {
+ name = "foodplanner"
+ port = "http"
+
+ check {
+ type = "http"
+ path = "/"
+ interval = "10s"
+ timeout = "2s"
+ }
+ }
+
+ # Prestart restore task
+ task "restore" {
+ driver = "docker"
+ lifecycle {
+ hook = "prestart"
+ sidecar = false
+ }
+ config {
+ # image = "litestream/litestream:latest"
+ image = "litestream/litestream:0.3"
+ args = [
+ "restore",
+ # "-if-replica-exists",
+ #"-if-db-not-exists",
+ "-o", "/alloc/tmp/meal_planner.db",
+ "sftp://root:odroid@192.168.4.63/mnt/Shares/litestream/foodplanner.db"
+ ]
+ volumes = [
+ "/opt/nomad/data:/data"
+ ]
+ }
+ }
+
+ task "app" {
+ driver = "docker"
+
+ config {
+ image = "ghcr.io/sstent/foodplanner:main"
+ ports = ["http"]
+
+ # Mount the SQLite database file to persist data
+ # Adjust the source path as needed for your environment
+ volumes = [
+ "/mnt/Public/configs/FoodPlanner_backups:/app/backups/",
+ ]
+ }
+ env {
+ DATABASE_PATH = "/alloc/tmp"
+ DATABASE_URL = "sqlite:////alloc/tmp/meal_planner.db"
+ }
+ resources {
+ cpu = 500
+ memory = 1024
+ }
+
+ # Restart policy
+ restart {
+ attempts = 3
+ interval = "10m"
+ delay = "15s"
+ mode = "fail"
+ }
+ }
+
+ # Litestream sidecar for continuous replication
+ task "litestream" {
+ driver = "docker"
+ lifecycle {
+ hook = "poststart" # runs after main task starts
+ sidecar = true
+ }
+ config {
+ # image = "litestream/litestream:0.5.0-test.10"
+ image = "litestream/litestream:0.3"
+ args = [
+ "replicate",
+ "/alloc/tmp/meal_planner.db",
+ "sftp://root:odroid@192.168.4.63/mnt/Shares/litestream/foodplanner.db"
+ ]
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/nomad_backup/20251115_142432/gonic.hcl b/nomad_backup/20251115_142432/gonic.hcl
new file mode 100644
index 0000000..d45a4e0
--- /dev/null
+++ b/nomad_backup/20251115_142432/gonic.hcl
@@ -0,0 +1,151 @@
+job "gonic" {
+ datacenters = ["dc1"]
+ type = "service"
+
+
+
+ group "gonic" {
+ count = 1
+ task "gonic" {
+ driver = "docker"
+ config {
+ image = "sentriz/gonic"
+ port_map {
+ http = 80
+ }
+ volumes = [
+ "/mnt/configs/gonic/data:/data",
+ "/mnt/configs/gonic/cache:/cache",
+ "/mnt/Public/Downloads/Clean_Music:/music/CleanMusic:ro",
+ "/mnt/Public/Downloads/incoming_music:/music/incomingmusic:ro",
+ "/mnt/Public/Downloads/podcasts:/podcasts",
+ "/mnt/Public/Downloads/musicplaylists:/musicplaylists",
+
+ ]
+ }
+ env{
+ GONIC_SCAN_INTERVAL = "120"
+ GONIC_MUSIC_PATH = "/music"
+ GONIC_PODCAST_PATH = "/podcasts"
+ GONIC_PLAYLISTS_PATH = "/musicplaylists"
+ }
+ resources {
+ cpu = 100 # 100 MHz
+ memory = 256 # 128 MB
+ network {
+ port "http" {
+ static = "4747"
+ }
+ }
+ }
+ service {
+ name = "gonic"
+ tags = [
+ "gonic",
+ "web",
+ "urlprefix-/gonic",
+ "backend",
+ "traefik.http.routers.goniclan.rule=Host(`gonic.service.dc1.consul`)",
+ "traefik.http.routers.gonicwan.rule=Host(`mg.fbleagh.duckdns.org`)",
+ "traefik.http.routers.gonicwan.tls=true",
+ "traefik.http.routers.gonicwan.tls.certresolver=myresolver"
+
+ ]
+ // "traefik.http.middlewares.gonic_auth.basicauth.users=admin:$2y$05$cJGONoS0BFTeBUXqmETikeI14QhLDKIDkYuPdA1umIOC129grVMAm",
+ port = "http"
+ meta {
+ ALLOC = "${NOMAD_ALLOC_ID}"
+ }
+ check {
+ type = "tcp"
+ interval = "10s"
+ timeout = "2s"
+ }
+ }
+ } #end gonic
+
+ task "init-manual" {
+ driver = "docker"
+ lifecycle {
+ hook = "prestart"
+ sidecar = false
+ }
+ config {
+ memory_hard_limit = "2048"
+
+ image = "ghcr.io/sstent/rsync"
+ volumes = [
+ "/mnt/configs/${NOMAD_GROUP_NAME}:/config",
+ "/mnt/Public/config/${NOMAD_GROUP_NAME}:/configbackup",
+ "/mnt/Public/config/locks:/locks"
+ ]
+
+ args = ["flock", "-x","/locks/${NOMAD_GROUP_NAME}_rsync.lock","rsync","-av","--exclude=Backups","/configbackup/","/config/","--delete-before"]
+ }
+ resources {
+ cpu = 20 # 500 MHz
+ memory = 20 # 128MB
+ }
+ }
+
+
+ task "finalsync-manual" {
+ driver = "docker"
+ lifecycle {
+ hook = "poststop"
+ }
+ config {
+ memory_hard_limit = "2048"
+
+ image = "ghcr.io/sstent/rsync"
+ volumes = [
+ "/mnt/configs/${NOMAD_GROUP_NAME}:/config",
+ "/mnt/Public/config/${NOMAD_GROUP_NAME}:/configbackup",
+ "/mnt/Public/config/locks:/locks"
+ ]
+
+ args = ["flock", "-x","/locks/${NOMAD_GROUP_NAME}_rsync.lock","rsync","-av","/config/","/configbackup/"]
+ }
+ resources {
+ cpu = 20 # 500 MHz
+ memory = 20 # 128MB
+ }
+ }
+
+ task "db-sync" {
+ driver = "docker"
+ lifecycle {
+ hook = "poststart"
+ sidecar = true
+ }
+ config {
+ memory_hard_limit = "2048"
+
+ image = "ghcr.io/sstent/rsync"
+ volumes = [
+ "/mnt/configs/${NOMAD_GROUP_NAME}:/config",
+ "/mnt/Public/config/${NOMAD_GROUP_NAME}:/configbackup",
+ ]
+
+ // args = ["/usr/local/bin/litestream", "replicate", "-config","/local/litestream.yml"]
+ }
+ resources {
+ cpu = 20 # 500 MHz
+ memory = 20 # 128MB
+ }
+ template {
+ data = <Local Services - HTTP/HTTPS
+
+
+ Node Environment Information:
+ node_id: {{ env "node.unique.id" }}
+ datacenter: {{ env "NOMAD_DC" }}
+
+ EOH
+
+ destination = "local/data/index.html"
+ change_mode = "noop"
+ }
+
+ resources {
+ cpu = 100 # 100 MHz
+ memory = 64 # 128 MB
+ }
+ service {
+ name = "nginx"
+ tags = ["nginx", "web", "urlprefix-/nginx", "backend"]
+ port = "http"
+
+ check {
+ type = "tcp"
+ interval = "10s"
+ timeout = "2s"
+ }
+ }
+ }
+
+ network {
+ port "http" {
+ to = 8080
+ }
+
+ // port "https" {
+ // to = 443
+ // }
+ }
+ }
+}
diff --git a/nomad_backup/20251115_142432/nzbget.hcl b/nomad_backup/20251115_142432/nzbget.hcl
new file mode 100644
index 0000000..0ac7b66
--- /dev/null
+++ b/nomad_backup/20251115_142432/nzbget.hcl
@@ -0,0 +1,305 @@
+job "nzbget" {
+ # region = "global"
+ datacenters = ["dc1"]
+ type = "service"
+
+ # priority = 50
+
+ constraint {
+ attribute = "${attr.kernel.name}"
+ value = "linux"
+ }
+ constraint {
+ attribute = "${attr.unique.hostname}"
+ operator = "regexp"
+ value = "odroid.*"
+ }
+ update {
+ # Stagger updates every 60 seconds
+ stagger = "90s"
+ max_parallel = 1
+ healthy_deadline = "5m"
+ }
+ group "nzbget" {
+ count = 1
+
+ restart {
+ attempts = 8
+ interval = "20m"
+ delay = "10s"
+ mode = "delay"
+ }
+
+ // task "init-trigger" {
+ // driver = "docker"
+
+ // lifecycle {
+ // hook = "prestart"
+ // }
+
+ // config {
+ // image = "curlimages/curl"
+ // args = ["--request", "PUT", "--data", "${NOMAD_ALLOC_ID}", "http://${attr.unique.network.ip-address}:8500/v1/kv/${NOMAD_GROUP_NAME}"]
+ // }
+ // resources {
+ // cpu = 20 # 500 MHz
+ // memory = 20 # 128MB
+ // }
+ // }
+
+
+ task "ovpn-client" {
+ driver = "docker"
+ lifecycle {
+ hook = "prestart"
+ sidecar = true
+ }
+
+ config {
+ // image = "registry.service.dc1.consul:5000/openpyn:latest"
+ image = "qmcgaw/gluetun"
+ memory_hard_limit = "1024"
+
+ ports = [
+ "shadowsocks",
+ "nzbget",
+ "http_proxy",
+ "http_admin",
+ "sabnzb_admin",
+ "socks",
+ ]
+
+ cap_add = [
+ "NET_ADMIN",
+ "NET_BIND_SERVICE",
+ ]
+
+ #network_mode = "host"
+ #network_mode = "vpn"
+
+ volumes = [
+ "/etc/localtime:/etc/localtime",
+ ]
+ devices = [
+ {
+ host_path = "/dev/net/tun"
+ container_path = "/dev/net/tun"
+ },
+ ]
+ }
+
+ env {
+ // VPNFLAGS = "us --max-load 70 --top-servers 10 --pings 5"
+ // VPNFLAGS = "nl --max-load 70 --top-servers 10 --pings 5"
+ // VPNSP = "nordvpn"
+ // OPENVPN_USER = "yvPLaZ3xkXtnJKsyXDNQf9Ft"
+ // OPENVPN_PASSWORD = "SW8XvhGkSVuQitjuFrbH9WPA"
+ // REGION = "Netherlands"
+ ##Mullvad
+ VPNSP = "mullvad"
+ VPN_TYPE = "wireguard"
+ COUNTRY = "Canada"
+ CITY = "Toronto"
+ FIREWALL_VPN_INPUT_PORTS = "56987"
+ WIREGUARD_PRIVATE_KEY = "2FHwQX1jxk+qeMmXUtSGRc2kKF1WHeSCyIgHNW+7akA=" #ActiveLynx
+ WIREGUARD_ADDRESS = "10.66.246.4/32"
+
+
+
+ HTTPPROXY = "on"
+ UPDATER_PERIOD= "24h"
+ SHADOWSOCKS_PASSWORD = "farscape5"
+ SHADOWSOCKS = "off"
+ DOT_PROVIDERS = "cloudflare,google,quad9,quadrant"
+ DOT = "off"
+ }
+
+ service {
+ name = "${TASKGROUP}-admin"
+ tags = ["global", "ovpn-openpyn"]
+ port = "http_admin"
+ }
+
+ service {
+ name = "${TASKGROUP}"
+ tags = ["global", "ovpn-openpyn"]
+ port = "shadowsocks"
+ }
+
+ service {
+ name = "nzbget"
+ tags = ["global", "ovpn-openpyn"]
+ port = "nzbget"
+ }
+ service {
+ name = "sabnzb"
+ tags = ["global", "ovpn-openpyn", "enable_gocast",
+ "gocast_vip=192.168.1.247/32",
+ "gocast_nat=tcp:8080:8080",
+ "gocast_nat=udp:8080:8080",]
+ port = "sabnzb_admin"
+ }
+service {
+ name = "socks-nord"
+ tags = ["global", "ovpn-openpyn", "enable_gocast",
+ "gocast_vip=192.168.1.243/32",
+ "gocast_nat=tcp:1080:1080",
+ "gocast_nat=udp:1080:1080",]
+ port = "socks"
+
+ }
+
+
+ resources {
+ cpu = 100 # 500 MHz
+ memory = 100 # 128MB
+ }
+ } #task ovpn
+
+
+ task "dante" {
+ driver = "docker"
+
+ config {
+ image = "serjs/go-socks5-proxy"
+ // image = "ghcr.io/sstent/dante:latest"
+ network_mode = "container:ovpn-client-${NOMAD_ALLOC_ID}"
+ memory_hard_limit = 256
+
+ devices = [
+ {
+ host_path = "/dev/net/tun"
+ container_path = "/dev/net/tun"
+ },
+ ]
+ }
+ env {
+ REQUIRE_AUTH = "false"
+ }
+
+
+ resources {
+ cpu = 64 # 500 MHz
+ memory = 128 # 128MB
+ }
+ }
+ ######################################################################
+ ######################################################################
+ ######################################################################
+
+ task "init" {
+ driver = "docker"
+
+ lifecycle {
+ hook = "prestart"
+ sidecar = false
+ }
+
+ config {
+ image = "ghcr.io/sstent/rsync:v0.3.5"
+ memory_hard_limit = "2048"
+
+ volumes = [
+ "/mnt/configs/${NOMAD_GROUP_NAME}:/config",
+ "/mnt/Public/config/${NOMAD_GROUP_NAME}:/configbackup",
+ "/mnt/Public/config/locks:/locks",
+ ]
+
+ args = ["flock", "-x", "/locks/${NOMAD_GROUP_NAME}_rsync.lock", "rsync", "-avz", "--exclude=Backups", "/configbackup/", "/config/", "--delete-before"]
+ }
+
+ resources {
+ cpu = 20 # 500 MHz
+ memory = 20 # 128MB
+ }
+ } #end init task
+ task "finalsync" {
+ driver = "docker"
+
+ lifecycle {
+ hook = "poststop"
+ }
+
+ config {
+ // image = "pebalk/rsync"
+ image = "ghcr.io/sstent/rsync:v0.3.5"
+ memory_hard_limit = "2048"
+
+ volumes = [
+ "/mnt/configs/${NOMAD_GROUP_NAME}:/config",
+ "/mnt/Public/config/${NOMAD_GROUP_NAME}:/configbackup",
+ "/mnt/Public/config/locks:/locks",
+ ]
+
+ args = ["flock", "-x", "/locks/${NOMAD_GROUP_NAME}_rsync.lock", "rsync", "-avz", "/config/", "/configbackup/"]
+ }
+
+ resources {
+ cpu = 20 # 500 MHz
+ memory = 20 # 128MB
+ }
+ } #end finalsync task
+ // task "sync" {
+ // driver = "docker"
+
+ // lifecycle {
+ // hook = "poststart"
+ // sidecar = true
+ // }
+
+ // config {
+ // image = "ghcr.io/sstent/rsync:v0.3.5"
+ // memory_hard_limit = "2048"
+
+ // volumes = [
+ // "/mnt/configs/:/configs",
+ // "/mnt/Public/config/${NOMAD_GROUP_NAME}:/configbackup",
+ // ]
+
+ // args = ["client"]
+ // }
+ // resources {
+ // cpu = 20 # 500 MHz
+ // memory = 20 # 128MB
+ // }
+ // env {
+ // CRON_TASK_1 = "*/20 8-20 * * * chmod a-w /configs/${NOMAD_GROUP_NAME}/ ; rsync -avz /configs/${NOMAD_GROUP_NAME}/ /configbackup/; chmod a+w /configs/${NOMAD_GROUP_NAME}/;"
+ // }
+ // } #end sync task
+
+ ######################################################################
+ ######################################################################
+ ######################################################################
+
+ network {
+ port "shadowsocks" {
+ static = "8338"
+ to = "8388"
+ }
+
+ port "http_proxy" {
+ static = "8888"
+ to = "8888"
+ }
+ port "http_admin" {
+ static = "8000"
+ to = "8000"
+ }
+
+ port "sabnzb_admin" {
+ static = "8080"
+ to = "8080"
+ }
+
+
+ port "socks" {
+ static = "1080"
+ to = "1080"
+ }
+ port "nzbget" {
+ static = "6789"
+ to = "6789"
+ }
+ }
+ }
+}
diff --git a/nomad_backup/20251115_142432/postgres-15.hcl b/nomad_backup/20251115_142432/postgres-15.hcl
new file mode 100644
index 0000000..86ee7d7
--- /dev/null
+++ b/nomad_backup/20251115_142432/postgres-15.hcl
@@ -0,0 +1,116 @@
+job "postgres-15" {
+ type = "system"
+ datacenters = ["dc1"]
+
+ group "group" {
+ count = 1
+
+ network {
+
+ port api {
+ static = 8008
+ to = 8008
+ }
+ port pg {
+ static = 5432
+ to = 5432
+ }
+ }
+
+ task "db" {
+ driver = "docker"
+
+ template {
+ data = <\K.8-20 * * *?(?=<.8-20 * * *?>)' /config/config.xml)
+ // // curl -f "http://localhost:9696/api/v1/system/status?apikey=$API"
+ // }
+ }
+ template {
+ data = <\K.*?(?=<.*?>)' /config/config.xml)"
+ EOH
+
+ destination = "local/healthcheck.sh"
+ perms = "0755"
+ }
+
+ env {
+ // SHARE = "Public;/mount/Public;yes;no;yes;all;none;;Public"
+ # GLOBAL = "socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=65536 SO_SNDBUF=65536"
+ # PERMISSIONS = "true"
+ # WORKGROUP = "WORKGROUP"
+ TZ = "EST5EDT"
+
+ PUID = 1000
+ PGID = 1000
+ }
+
+ # We must specify the resources required for
+ # this task to ensure it runs on a machine with
+ # enough capacity.
+ resources {
+ cpu = 500 # 500 MHz
+ memory = 256 # 128MB
+ }
+
+ # Specify configuration related to log rotation
+ logs {
+ max_files = 10
+ max_file_size = 15
+ }
+
+ # Controls the timeout between signalling a task it will be killed
+ # and killing the task. If not set a default is used.
+ kill_timeout = "10s"
+ } #End main task
+
+ network {
+ // mbits = 100
+
+ port "http" {
+ static = 9696
+ to = 9696
+ }
+ port "http_flare" {
+ static = 8191
+ to = 8191
+ }
+ }
+ }
+}
diff --git a/nomad_backup/20251115_142432/qautomate.hcl b/nomad_backup/20251115_142432/qautomate.hcl
new file mode 100644
index 0000000..b7ea82e
--- /dev/null
+++ b/nomad_backup/20251115_142432/qautomate.hcl
@@ -0,0 +1,59 @@
+job "qautomate" {
+ periodic {
+ cron = "*/30 * * * *"
+ prohibit_overlap = true
+ }
+ datacenters = ["dc1"]
+
+ type = "batch"
+
+ group "app" {
+ count = 1
+
+ task "setup" {
+ driver = "docker"
+
+ lifecycle {
+ hook = "prestart"
+ }
+
+ config {
+ image = "ghcr.io/sstent/ubuntu-python3"
+ // command = "/bin/bash"
+ args = ["-v","-c", "/local/prestart.sh"]
+
+ }
+
+ template {
+ data = <
+Info
+7878
+
+*
+9898
+False
+237c27f22504440385e5ee295fd65eb5
+Forms
+master
+
+True
+
+Docker
+False
+Radarr
+DisabledForLocalAddresses
+postgres
+postgres
+5432
+master.postgres.service.dc1.consul
+
+ EOH
+
+ destination = "local/config.xml"
+ perms = "0755"
+ }
+
+ service {
+ name = "${TASKGROUP}"
+ tags = ["radarr", "tools"]
+ port = "http"
+
+ check {
+ type = "script"
+ name = "check_up"
+ command = "/local/healthcheck.sh"
+ interval = "5m"
+ timeout = "25s"
+
+ check_restart {
+ limit = 3
+ grace = "90s"
+ ignore_warnings = false
+ }
+ }
+ }
+ template {
+ data = <(.*)' /config/config.xml | sed -e 's/<[^>]*>//g')"
+ EOH
+
+ destination = "local/healthcheck.sh"
+ perms = "0755"
+ }
+
+ env {
+ TZ = "EST5EDT"
+ PUID = 1000
+ PGID = 1000
+ }
+
+ resources {
+ cpu = 500 # 500 MHz
+ memory = 256 # 128MB
+
+ // network {
+ // port "radarr" {
+ // static = "7878"
+ // }
+ // }
+ }
+
+ logs {
+ max_files = 10
+ max_file_size = 15
+ }
+
+ kill_timeout = "10s"
+ } #Task
+
+ network {
+ // mode = "bridge"
+ port "http" {
+ static = 7878
+ to = 7878
+ }
+ }
+ } #Group
+}
diff --git a/nomad_backup/20251115_142432/slskd.hcl b/nomad_backup/20251115_142432/slskd.hcl
new file mode 100644
index 0000000..0794503
--- /dev/null
+++ b/nomad_backup/20251115_142432/slskd.hcl
@@ -0,0 +1,149 @@
+# There can only be a single job definition per file.
+# Create a job with ID and Name 'example'
+job "slskd" {
+ datacenters = ["dc1"]
+ type = "service"
+
+ constraint {
+ attribute = "${attr.kernel.name}"
+ value = "linux"
+ }
+constraint {
+ attribute = "${attr.cpu.arch}"
+ operator = "regexp"
+ value = "amd64"
+ }
+
+ update {
+ stagger = "10s"
+ max_parallel = 1
+ }
+
+ group "slskd" {
+ count = 1
+
+ restart {
+ attempts = 2
+ interval = "1m"
+ delay = "10s"
+ mode = "fail"
+ }
+
+task "slskd-vpn" {
+ driver = "docker"
+ lifecycle {
+ hook = "prestart"
+ sidecar = true
+ }
+
+ config {
+ // image = "registry.service.dc1.consul:5000/openpyn:latest"
+ // image = "qmcgaw/gluetun"
+ image = "qmcgaw/gluetun"
+
+ memory_hard_limit = "1024"
+ ports = ["http","https","guac"]
+
+ cap_add = [
+ "NET_ADMIN",
+ "NET_BIND_SERVICE",
+ ]
+
+ #network_mode = "host"
+ #network_mode = "vpn"
+
+ volumes = [
+ "/etc/localtime:/etc/localtime",
+ "/mnt/syncthing/mullvad:/vpn",
+
+ ]
+ devices = [
+ {
+ host_path = "/dev/net/tun"
+ container_path = "/dev/net/tun"
+ },
+ ]
+ }
+
+ env {
+ VPN_SERVICE_PROVIDER="airvpn"
+ VPN_TYPE="wireguard"
+ WIREGUARD_PRIVATE_KEY="SPpgnVCsOnz+zzorzTiOmvDF8GElgp27dSIeYAq43Vk="
+ WIREGUARD_PRESHARED_KEY="TBb2gU8pSTSG6lT4QYr7pzNWN7wZEn0yeG4VDTtuy50="
+ WIREGUARD_ADDRESSES="10.186.222.247/32"
+ SERVER_COUNTRIES="Canada"
+ SERVER_CITIES="Montreal"
+ FIREWALL_VPN_INPUT_PORTS = "53304"
+ HEALTH_TARGET_ADDRESS="1.1.1.1"
+ HEALTH_SUCCESS_WAIT_DURATION="30s"
+ HEALTH_VPN_DURATION_INITIAL="3600s"
+ HEALTH_VPN_DURATION_ADDITION="600s"
+ // HEALTH_TARGET_ADDRESS="cloudflare.com:443"
+
+
+ ##Mullvad
+ #VPNSP = "mullvad"
+ #VPN_TYPE = "wireguard"
+ #COUNTRY = "Canada"
+ #CITY = "Toronto"
+ #FIREWALL_VPN_INPUT_PORTS = "56987"
+ #WIREGUARD_PRIVATE_KEY = "iA64ImY2XNvml7s+HEHWNNGXeqpzFN0/KYGxhCsHLV8="
+ #WIREGUARD_ADDRESS = "10.64.141.217/32"
+ HTTPPROXY = "on"
+ SHADOWSOCKS_PASSWORD = "farscape5"
+ SHADOWSOCKS = "on"
+ DOT_PROVIDERS = "cloudflare,google,quad9,quadrant"
+ DOT = "off"
+ WEBUI_PORT=8080
+ }
+
+
+ resources {
+ cpu = 100 # 500 MHz
+ memory = 250 # 128MB
+ }
+ } #task ovpn
+
+ task "nicotine" {
+ driver = "docker"
+
+ config {
+ image = "ghcr.io/fletchto99/nicotine-plus-docker:latest"
+ memory_hard_limit = "1024"
+
+ network_mode = "container:slskd-vpn-${NOMAD_ALLOC_ID}"
+
+ volumes = [
+ "/mnt/Public/Downloads/news/slskd/config:/config",
+ "/mnt/Public/Downloads/news/slskd/shared:/shared",
+ "/mnt/Public/Downloads/news/slskd/downloads/:/downloads",
+ "/mnt/Public/Downloads/news/slskd/incomplete/:/incomplete",
+ ]
+ }
+ env {
+ PUID=1000
+ PGID=1000
+ TZ="Etc/UTC"
+ LISTENING_PORT="53304"
+ }
+ }
+
+
+ network {
+ // mbits = 100
+
+ port "http" {
+ static = 5000
+ to = 5000
+ }
+ port "https" {
+ static = 5001
+ to = 5001
+ }
+ port "guac" {
+ static = 6080
+ to = 6080
+ }
+ }
+ }
+}
diff --git a/nomad_backup/20251115_142432/sonarr.hcl b/nomad_backup/20251115_142432/sonarr.hcl
new file mode 100644
index 0000000..b2fa4a3
--- /dev/null
+++ b/nomad_backup/20251115_142432/sonarr.hcl
@@ -0,0 +1,158 @@
+# There can only be a single job definition per file.
+# Create a job with ID and Name 'example'
+job "sonarr" {
+ datacenters = ["dc1"]
+ type = "service"
+
+ constraint {
+ attribute = "${attr.kernel.name}"
+ value = "linux"
+ }
+ constraint {
+ attribute = "${attr.cpu.arch}"
+ operator = "regexp"
+ value = "amd64"
+ }
+
+ update {
+ stagger = "10s"
+ max_parallel = 1
+ }
+ group "sonarr" {
+ count = 1
+
+ restart {
+ attempts = 2
+ interval = "1m"
+ delay = "10s"
+ mode = "fail"
+ }
+
+ task "sonarr" {
+ // driver = "raw_exec" // config { // command = "docker" // args = ["run", // "--rm", // "--name=sonarr", // "-e", "PUID=1000", // "-e", "PGID=1000", // "-e", "TZ=EST5EDT", // "-p", "8989:8989", // "-v", "/mnt/syncthing/sonarrv3:/config", // "-v", "/mnt/Public/Downloads/tv:/tv", // "-v", "/mnt/Public/Downloads/news:/downloads", // "--cpuset-cpus","4-7", // "linuxserver/sonarr:preview"] // }
+
+ driver = "docker"
+
+ config {
+ image = "linuxserver/sonarr:develop"
+
+ ports = ["http"]
+
+ // dns_servers = ["192.168.1.1", "1.1.1.1"]
+ memory_hard_limit = "2048"
+ // cpuset_cpus = "4-7"
+
+ volumes = [
+ "/mnt/Public/Downloads/news:/downloads",
+ "/mnt/Public/Downloads/tv:/tv",
+ // "/mnt/configs/sonarr:/config",
+ "/mnt/Public/configs/sonarr_pg:/config",
+ // "local/config.xml:/config/config.xml"
+ ]
+
+ // "/mnt/gv0/sonarr:/config",
+ force_pull = false
+ }
+
+ service {
+ name = "${TASKGROUP}"
+ tags = ["sonarr", "tools"]
+ port = "http"
+
+ check {
+ type = "script"
+ name = "check_up"
+ command = "/local/healthcheck.sh"
+ interval = "60s"
+ timeout = "5s"
+
+ check_restart {
+ limit = 3
+ grace = "90s"
+ ignore_warnings = false
+ }
+ }
+ }
+ template {
+ data = <(.*)' /config/config.xml | sed -e 's/<[^>]*>//g')"
+ EOH
+
+ destination = "local/healthcheck.sh"
+ perms = "0755"
+ }
+
+ template {
+ data = "---\nkey: {{ key \"ovpn-client\" }}"
+ destination = "local/file.yml"
+ change_mode = "restart"
+ }
+ template {
+ data = <
+Info
+8989
+/sonarr
+*
+9898
+False
+1632787062fb47a9a6eb4c88e32b3ff3
+None
+develop
+True
+
+Docker
+False
+/config/restart.sh
+Sonarr
+postgres
+postgres
+5432
+master.postgres.service.dc1.consul
+
+ EOH
+
+ destination = "local/config.xml"
+ perms = "0755"
+ }
+ env {
+ // SHARE = "Public;/mount/Public;yes;no;yes;all;none;;Public"
+ # GLOBAL = "socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=65536 SO_SNDBUF=65536"
+ # PERMISSIONS = "true"
+ # WORKGROUP = "WORKGROUP"
+ TZ = "EST5EDT"
+
+ PUID = 1000
+ PGID = 1000
+ }
+
+ # We must specify the resources required for
+ # this task to ensure it runs on a machine with
+ # enough capacity.
+ resources {
+ cpu = 500 # 500 MHz
+ memory = 256 # 128MB
+ }
+
+ # Specify configuration related to log rotation
+ logs {
+ max_files = 12
+ max_file_size = 15
+ }
+
+ # Controls the timeout between signalling a task it will be killed
+ # and killing the task. If not set a default is used.
+ kill_timeout = "10s"
+ } #End main task
+
+ network {
+ // mbits = 100
+
+ port "http" {
+ static = 8989
+ to = 8989
+ }
+ }
+ }
+}
diff --git a/nomad_backup/20251115_142432/traefik.hcl b/nomad_backup/20251115_142432/traefik.hcl
new file mode 100644
index 0000000..7dc2f1d
--- /dev/null
+++ b/nomad_backup/20251115_142432/traefik.hcl
@@ -0,0 +1,218 @@
+job "traefik" {
+ datacenters = ["dc1"]
+ type = "system"
+
+ constraint {
+ attribute = "${attr.kernel.name}"
+ value = "linux"
+ }
+
+ update {
+ stagger = "10s"
+ max_parallel = 1
+ healthy_deadline = "5m"
+ }
+
+ group "traefik" {
+ count = 1
+
+ restart {
+ attempts = 6
+ interval = "1m"
+ delay = "10s"
+ mode = "delay"
+ }
+
+ task "traefik" {
+ driver = "docker"
+
+ config {
+ image = "traefik:2.9"
+ // network_mode = "host"
+
+ args = [
+ // "--api.dashboard",
+ // "--providers.consulcatalog.defaultRule=Host(`{{ .Name }}.service.dc1.consul`)",
+ // "--providers.consulcatalog.endpoint.address=${attr.unique.network.ip-address}:8500",
+ // "--providers.consulcatalog.exposedbydefault=true",
+ // "--metrics=true",
+ // "--metrics.prometheus=true",
+ // "--metrics.prometheus.entryPoint=web",
+ // "--entryPoints.web.address=:80",
+ // "--entryPoints.websecure.address=:443",
+ // "--entryPoints.openvpn.address=:1194/udp",
+ "--configFile=/local/file.yml",
+ // "--certificatesresolvers.myresolver.acme.email=stuart.stent@gmail.com",
+ // "--certificatesresolvers.myresolver.acme.storage=/acmecert/acme.json",
+ // "--certificatesresolvers.myresolver.acme.tlschallenge=true",
+ // "--certificatesresolvers.myresolver-int.acme.email=stuart.stent@gmail.com",
+ // "--certificatesresolvers.myresolver-int.acme.storage=/acmecert/acme.json",
+ // "--certificatesresolvers.myresolver-int.acme.tlschallenge=true",
+ // "--certificatesresolvers.myresolver-int.acme.dnschallenge=true",
+ // "--certificatesresolvers.myresolver-int.acme.dnschallenge.provider=duckdns",
+ "--accesslog=true",
+ // "--serversTransport.insecureSkipVerify=true",
+ ]
+ volumes = [
+ "/var/run/docker.sock:/var/run/docker.sock",
+ "/mnt/mnt/configs/letsencrypt:/acmecert/",
+ ]
+
+ dns_servers = ["192.168.1.1", "192.168.1.250"]
+ ports = ["traefik", "traefikhttps","traefikui"]
+
+ memory_hard_limit = 2048
+ }
+
+ env {
+ TZ = "EST5EDT"
+ PUID = 1000
+ PGID = 1000
+ DUCKDNS_TOKEN="e4b5ca33-1f4d-494b-b06d-6dd4600df662"
+ }
+
+ template {
+ left_delimiter = "[["
+ right_delimiter = "]]"
+
+ data = < [
+ "header" => "User-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36",
+ ]
+]);
+if (($data = @file_get_contents($url, false, $context)) === false) {
+ $error = error_get_last();
+ http_response_code(500);
+ print "HTTP request failed: " . $error['message'];
+ exit;
+}
+header('Content-Type: text/calendar; charset=utf-8');
+print $data;
+?>
+EOF
+ destination = "local/app/ics.php"
+ }
+
+
+ resources {
+ cpu = 100
+ memory = 128
+ }
+ }
+
+ # PHP-FPM container
+ task "php-fpm" {
+ driver = "docker"
+
+ config {
+ image = "php:8.2-fpm-alpine"
+ network_mode = "container:nginx-${NOMAD_ALLOC_ID}"
+
+ volumes = [
+ "local/app:/var/www/html",
+ "local/php-fpm.conf:/usr/local/etc/php-fpm.d/www.conf",
+ ]
+ }
+
+ template {
+ data = < [
+ "header" => "User-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36",
+ ]
+]);
+if (($data = @file_get_contents($url, false, $context)) === false) {
+ $error = error_get_last();
+ http_response_code(500);
+ print "HTTP request failed: " . $error['message'];
+ exit;
+}
+header('Content-Type: text/calendar; charset=utf-8');
+print $data;
+?>
+EOF
+ destination = "local/app/ics.php"
+ }
+
+ resources {
+ cpu = 200
+ memory = 256
+ }
+ }
+
+ # Restart policy
+ restart {
+ attempts = 3
+ interval = "5m"
+ delay = "25s"
+ mode = "fail"
+ }
+
+ # Update strategy
+ update {
+ max_parallel = 1
+ min_healthy_time = "10s"
+ healthy_deadline = "3m"
+ auto_revert = true
+ }
+ }
+}
\ No newline at end of file
diff --git a/nomad_backup/20251115_142628/democratic-csi-local.hcl b/nomad_backup/20251115_142628/democratic-csi-local.hcl
new file mode 100644
index 0000000..1fc4018
--- /dev/null
+++ b/nomad_backup/20251115_142628/democratic-csi-local.hcl
@@ -0,0 +1,105 @@
+job "democratic-csi-local" {
+ datacenters = ["dc1"]
+ type = "system"
+
+ group "controller" {
+ count = 1
+
+ task "controller" {
+ driver = "docker"
+
+ config {
+ image = "democraticcsi/democratic-csi:latest"
+
+ args = [
+ "--csi-version=1.5.0",
+ "--csi-name=org.democratic-csi.local-hostpath",
+ "--driver-config-file=/config/driver-config-file.yaml",
+ "--log-level=info",
+ "--csi-mode=controller",
+ "--server-socket=/csi/csi.sock",
+ ]
+
+ volumes = [
+ "local/config:/config:ro"
+ ]
+ }
+
+ template {
+ data = <<-EOH
+driver: local-hostpath
+instance_id: {{ env "node.unique.id" }}
+local-hostpath:
+ shareBasePath: "/tmp/democratic-csi-local-hostpath"
+ controllerBasePath: "/tmp/democratic-csi-local-hostpath"
+ dirPermissionsMode: "0755"
+ dirPermissionsUser: 0
+ dirPermissionsGroup: 0
+EOH
+ destination = "local/config/driver-config-file.yaml"
+ }
+
+ csi_plugin {
+ id = "org.democratic-csi.local-hostpath"
+ type = "controller"
+ mount_dir = "/csi"
+ }
+
+ resources {
+ cpu = 256
+ memory = 128
+ }
+ }
+ }
+
+ group "nodes" {
+ task "node" {
+ driver = "docker"
+
+ config {
+ image = "democraticcsi/democratic-csi:latest"
+
+ args = [
+ "--csi-version=1.5.0",
+ "--csi-name=org.democratic-csi.local-hostpath",
+ "--driver-config-file=/config/driver-config-file.yaml",
+ "--log-level=info",
+ "--csi-mode=node",
+ "--server-socket=/csi/csi.sock",
+ ]
+
+ privileged = true
+
+ volumes = [
+ "local/config:/config:ro",
+ "/tmp/democratic-csi-local-hostpath:/tmp/democratic-csi-local-hostpath:rshared"
+ ]
+ }
+
+ template {
+ data = <<-EOH
+driver: local-hostpath
+instance_id: {{ env "node.unique.id" }}
+local-hostpath:
+ shareBasePath: "/tmp/democratic-csi-local-hostpath"
+ controllerBasePath: "/tmp/democratic-csi-local-hostpath"
+ dirPermissionsMode: "0755"
+ dirPermissionsUser: 0
+ dirPermissionsGroup: 0
+EOH
+ destination = "local/config/driver-config-file.yaml"
+ }
+
+ csi_plugin {
+ id = "org.democratic-csi.local-hostpath"
+ type = "node"
+ mount_dir = "/csi"
+ }
+
+ resources {
+ cpu = 256
+ memory = 128
+ }
+ }
+ }
+}
diff --git a/nomad_backup/20251115_142628/foodplanner.hcl b/nomad_backup/20251115_142628/foodplanner.hcl
new file mode 100644
index 0000000..8f15b81
--- /dev/null
+++ b/nomad_backup/20251115_142628/foodplanner.hcl
@@ -0,0 +1,99 @@
+job "foodplanner" {
+ datacenters = ["dc1"]
+
+ type = "service"
+
+ group "app" {
+ count = 1
+
+ network {
+ port "http" {
+ to = 8999
+ }
+ }
+
+ service {
+ name = "foodplanner"
+ port = "http"
+
+ check {
+ type = "http"
+ path = "/"
+ interval = "10s"
+ timeout = "2s"
+ }
+ }
+
+ # Prestart restore task
+ task "restore" {
+ driver = "docker"
+ lifecycle {
+ hook = "prestart"
+ sidecar = false
+ }
+ config {
+ # image = "litestream/litestream:latest"
+ image = "litestream/litestream:0.3"
+ args = [
+ "restore",
+ # "-if-replica-exists",
+ #"-if-db-not-exists",
+ "-o", "/alloc/tmp/meal_planner.db",
+ "sftp://root:odroid@192.168.4.63/mnt/Shares/litestream/foodplanner.db"
+ ]
+ volumes = [
+ "/opt/nomad/data:/data"
+ ]
+ }
+ }
+
+ task "app" {
+ driver = "docker"
+
+ config {
+ image = "ghcr.io/sstent/foodplanner:main"
+ ports = ["http"]
+
+ # Mount the SQLite database file to persist data
+ # Adjust the source path as needed for your environment
+ volumes = [
+ "/mnt/Public/configs/FoodPlanner_backups:/app/backups/",
+ ]
+ }
+ env {
+ DATABASE_PATH = "/alloc/tmp"
+ DATABASE_URL = "sqlite:////alloc/tmp/meal_planner.db"
+ }
+ resources {
+ cpu = 500
+ memory = 1024
+ }
+
+ # Restart policy
+ restart {
+ attempts = 3
+ interval = "10m"
+ delay = "15s"
+ mode = "fail"
+ }
+ }
+
+ # Litestream sidecar for continuous replication
+ task "litestream" {
+ driver = "docker"
+ lifecycle {
+ hook = "poststart" # runs after main task starts
+ sidecar = true
+ }
+ config {
+ # image = "litestream/litestream:0.5.0-test.10"
+ image = "litestream/litestream:0.3"
+ args = [
+ "replicate",
+ "/alloc/tmp/meal_planner.db",
+ "sftp://root:odroid@192.168.4.63/mnt/Shares/litestream/foodplanner.db"
+ ]
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/nomad_backup/20251115_142628/gonic.hcl b/nomad_backup/20251115_142628/gonic.hcl
new file mode 100644
index 0000000..d45a4e0
--- /dev/null
+++ b/nomad_backup/20251115_142628/gonic.hcl
@@ -0,0 +1,151 @@
+job "gonic" {
+ datacenters = ["dc1"]
+ type = "service"
+
+
+
+ group "gonic" {
+ count = 1
+ task "gonic" {
+ driver = "docker"
+ config {
+ image = "sentriz/gonic"
+ port_map {
+ http = 80
+ }
+ volumes = [
+ "/mnt/configs/gonic/data:/data",
+ "/mnt/configs/gonic/cache:/cache",
+ "/mnt/Public/Downloads/Clean_Music:/music/CleanMusic:ro",
+ "/mnt/Public/Downloads/incoming_music:/music/incomingmusic:ro",
+ "/mnt/Public/Downloads/podcasts:/podcasts",
+ "/mnt/Public/Downloads/musicplaylists:/musicplaylists",
+
+ ]
+ }
+ env{
+ GONIC_SCAN_INTERVAL = "120"
+ GONIC_MUSIC_PATH = "/music"
+ GONIC_PODCAST_PATH = "/podcasts"
+ GONIC_PLAYLISTS_PATH = "/musicplaylists"
+ }
+ resources {
+ cpu = 100 # 100 MHz
+ memory = 256 # 128 MB
+ network {
+ port "http" {
+ static = "4747"
+ }
+ }
+ }
+ service {
+ name = "gonic"
+ tags = [
+ "gonic",
+ "web",
+ "urlprefix-/gonic",
+ "backend",
+ "traefik.http.routers.goniclan.rule=Host(`gonic.service.dc1.consul`)",
+ "traefik.http.routers.gonicwan.rule=Host(`mg.fbleagh.duckdns.org`)",
+ "traefik.http.routers.gonicwan.tls=true",
+ "traefik.http.routers.gonicwan.tls.certresolver=myresolver"
+
+ ]
+ // "traefik.http.middlewares.gonic_auth.basicauth.users=admin:$2y$05$cJGONoS0BFTeBUXqmETikeI14QhLDKIDkYuPdA1umIOC129grVMAm",
+ port = "http"
+ meta {
+ ALLOC = "${NOMAD_ALLOC_ID}"
+ }
+ check {
+ type = "tcp"
+ interval = "10s"
+ timeout = "2s"
+ }
+ }
+ } #end gonic
+
+ task "init-manual" {
+ driver = "docker"
+ lifecycle {
+ hook = "prestart"
+ sidecar = false
+ }
+ config {
+ memory_hard_limit = "2048"
+
+ image = "ghcr.io/sstent/rsync"
+ volumes = [
+ "/mnt/configs/${NOMAD_GROUP_NAME}:/config",
+ "/mnt/Public/config/${NOMAD_GROUP_NAME}:/configbackup",
+ "/mnt/Public/config/locks:/locks"
+ ]
+
+ args = ["flock", "-x","/locks/${NOMAD_GROUP_NAME}_rsync.lock","rsync","-av","--exclude=Backups","/configbackup/","/config/","--delete-before"]
+ }
+ resources {
+ cpu = 20 # 500 MHz
+ memory = 20 # 128MB
+ }
+ }
+
+
+ task "finalsync-manual" {
+ driver = "docker"
+ lifecycle {
+ hook = "poststop"
+ }
+ config {
+ memory_hard_limit = "2048"
+
+ image = "ghcr.io/sstent/rsync"
+ volumes = [
+ "/mnt/configs/${NOMAD_GROUP_NAME}:/config",
+ "/mnt/Public/config/${NOMAD_GROUP_NAME}:/configbackup",
+ "/mnt/Public/config/locks:/locks"
+ ]
+
+ args = ["flock", "-x","/locks/${NOMAD_GROUP_NAME}_rsync.lock","rsync","-av","/config/","/configbackup/"]
+ }
+ resources {
+ cpu = 20 # 500 MHz
+ memory = 20 # 128MB
+ }
+ }
+
+ task "db-sync" {
+ driver = "docker"
+ lifecycle {
+ hook = "poststart"
+ sidecar = true
+ }
+ config {
+ memory_hard_limit = "2048"
+
+ image = "ghcr.io/sstent/rsync"
+ volumes = [
+ "/mnt/configs/${NOMAD_GROUP_NAME}:/config",
+ "/mnt/Public/config/${NOMAD_GROUP_NAME}:/configbackup",
+ ]
+
+ // args = ["/usr/local/bin/litestream", "replicate", "-config","/local/litestream.yml"]
+ }
+ resources {
+ cpu = 20 # 500 MHz
+ memory = 20 # 128MB
+ }
+ template {
+ data = <Local Services - HTTP/HTTPS
+
+
+ Node Environment Information:
+ node_id: {{ env "node.unique.id" }}
+ datacenter: {{ env "NOMAD_DC" }}
+
+ EOH
+
+ destination = "local/data/index.html"
+ change_mode = "noop"
+ }
+
+ resources {
+ cpu = 100 # 100 MHz
+ memory = 64 # 128 MB
+ }
+ service {
+ name = "nginx"
+ tags = ["nginx", "web", "urlprefix-/nginx", "backend"]
+ port = "http"
+
+ check {
+ type = "tcp"
+ interval = "10s"
+ timeout = "2s"
+ }
+ }
+ }
+
+ network {
+ port "http" {
+ to = 8080
+ }
+
+ // port "https" {
+ // to = 443
+ // }
+ }
+ }
+}
diff --git a/nomad_backup/20251115_142628/nzbget.hcl b/nomad_backup/20251115_142628/nzbget.hcl
new file mode 100644
index 0000000..0ac7b66
--- /dev/null
+++ b/nomad_backup/20251115_142628/nzbget.hcl
@@ -0,0 +1,305 @@
+job "nzbget" {
+ # region = "global"
+ datacenters = ["dc1"]
+ type = "service"
+
+ # priority = 50
+
+ constraint {
+ attribute = "${attr.kernel.name}"
+ value = "linux"
+ }
+ constraint {
+ attribute = "${attr.unique.hostname}"
+ operator = "regexp"
+ value = "odroid.*"
+ }
+ update {
+ # Stagger updates every 60 seconds
+ stagger = "90s"
+ max_parallel = 1
+ healthy_deadline = "5m"
+ }
+ group "nzbget" {
+ count = 1
+
+ restart {
+ attempts = 8
+ interval = "20m"
+ delay = "10s"
+ mode = "delay"
+ }
+
+ // task "init-trigger" {
+ // driver = "docker"
+
+ // lifecycle {
+ // hook = "prestart"
+ // }
+
+ // config {
+ // image = "curlimages/curl"
+ // args = ["--request", "PUT", "--data", "${NOMAD_ALLOC_ID}", "http://${attr.unique.network.ip-address}:8500/v1/kv/${NOMAD_GROUP_NAME}"]
+ // }
+ // resources {
+ // cpu = 20 # 500 MHz
+ // memory = 20 # 128MB
+ // }
+ // }
+
+
+ task "ovpn-client" {
+ driver = "docker"
+ lifecycle {
+ hook = "prestart"
+ sidecar = true
+ }
+
+ config {
+ // image = "registry.service.dc1.consul:5000/openpyn:latest"
+ image = "qmcgaw/gluetun"
+ memory_hard_limit = "1024"
+
+ ports = [
+ "shadowsocks",
+ "nzbget",
+ "http_proxy",
+ "http_admin",
+ "sabnzb_admin",
+ "socks",
+ ]
+
+ cap_add = [
+ "NET_ADMIN",
+ "NET_BIND_SERVICE",
+ ]
+
+ #network_mode = "host"
+ #network_mode = "vpn"
+
+ volumes = [
+ "/etc/localtime:/etc/localtime",
+ ]
+ devices = [
+ {
+ host_path = "/dev/net/tun"
+ container_path = "/dev/net/tun"
+ },
+ ]
+ }
+
+ env {
+ // VPNFLAGS = "us --max-load 70 --top-servers 10 --pings 5"
+ // VPNFLAGS = "nl --max-load 70 --top-servers 10 --pings 5"
+ // VPNSP = "nordvpn"
+ // OPENVPN_USER = "yvPLaZ3xkXtnJKsyXDNQf9Ft"
+ // OPENVPN_PASSWORD = "SW8XvhGkSVuQitjuFrbH9WPA"
+ // REGION = "Netherlands"
+ ##Mullvad
+ VPNSP = "mullvad"
+ VPN_TYPE = "wireguard"
+ COUNTRY = "Canada"
+ CITY = "Toronto"
+ FIREWALL_VPN_INPUT_PORTS = "56987"
+ WIREGUARD_PRIVATE_KEY = "2FHwQX1jxk+qeMmXUtSGRc2kKF1WHeSCyIgHNW+7akA=" #ActiveLynx
+ WIREGUARD_ADDRESS = "10.66.246.4/32"
+
+
+
+ HTTPPROXY = "on"
+ UPDATER_PERIOD= "24h"
+ SHADOWSOCKS_PASSWORD = "farscape5"
+ SHADOWSOCKS = "off"
+ DOT_PROVIDERS = "cloudflare,google,quad9,quadrant"
+ DOT = "off"
+ }
+
+ service {
+ name = "${TASKGROUP}-admin"
+ tags = ["global", "ovpn-openpyn"]
+ port = "http_admin"
+ }
+
+ service {
+ name = "${TASKGROUP}"
+ tags = ["global", "ovpn-openpyn"]
+ port = "shadowsocks"
+ }
+
+ service {
+ name = "nzbget"
+ tags = ["global", "ovpn-openpyn"]
+ port = "nzbget"
+ }
+ service {
+ name = "sabnzb"
+ tags = ["global", "ovpn-openpyn", "enable_gocast",
+ "gocast_vip=192.168.1.247/32",
+ "gocast_nat=tcp:8080:8080",
+ "gocast_nat=udp:8080:8080",]
+ port = "sabnzb_admin"
+ }
+service {
+ name = "socks-nord"
+ tags = ["global", "ovpn-openpyn", "enable_gocast",
+ "gocast_vip=192.168.1.243/32",
+ "gocast_nat=tcp:1080:1080",
+ "gocast_nat=udp:1080:1080",]
+ port = "socks"
+
+ }
+
+
+ resources {
+ cpu = 100 # 500 MHz
+ memory = 100 # 128MB
+ }
+ } #task ovpn
+
+
+ task "dante" {
+ driver = "docker"
+
+ config {
+ image = "serjs/go-socks5-proxy"
+ // image = "ghcr.io/sstent/dante:latest"
+ network_mode = "container:ovpn-client-${NOMAD_ALLOC_ID}"
+ memory_hard_limit = 256
+
+ devices = [
+ {
+ host_path = "/dev/net/tun"
+ container_path = "/dev/net/tun"
+ },
+ ]
+ }
+ env {
+ REQUIRE_AUTH = "false"
+ }
+
+
+ resources {
+ cpu = 64 # 500 MHz
+ memory = 128 # 128MB
+ }
+ }
+ ######################################################################
+ ######################################################################
+ ######################################################################
+
+ task "init" {
+ driver = "docker"
+
+ lifecycle {
+ hook = "prestart"
+ sidecar = false
+ }
+
+ config {
+ image = "ghcr.io/sstent/rsync:v0.3.5"
+ memory_hard_limit = "2048"
+
+ volumes = [
+ "/mnt/configs/${NOMAD_GROUP_NAME}:/config",
+ "/mnt/Public/config/${NOMAD_GROUP_NAME}:/configbackup",
+ "/mnt/Public/config/locks:/locks",
+ ]
+
+ args = ["flock", "-x", "/locks/${NOMAD_GROUP_NAME}_rsync.lock", "rsync", "-avz", "--exclude=Backups", "/configbackup/", "/config/", "--delete-before"]
+ }
+
+ resources {
+ cpu = 20 # 500 MHz
+ memory = 20 # 128MB
+ }
+ } #end init task
+ task "finalsync" {
+ driver = "docker"
+
+ lifecycle {
+ hook = "poststop"
+ }
+
+ config {
+ // image = "pebalk/rsync"
+ image = "ghcr.io/sstent/rsync:v0.3.5"
+ memory_hard_limit = "2048"
+
+ volumes = [
+ "/mnt/configs/${NOMAD_GROUP_NAME}:/config",
+ "/mnt/Public/config/${NOMAD_GROUP_NAME}:/configbackup",
+ "/mnt/Public/config/locks:/locks",
+ ]
+
+ args = ["flock", "-x", "/locks/${NOMAD_GROUP_NAME}_rsync.lock", "rsync", "-avz", "/config/", "/configbackup/"]
+ }
+
+ resources {
+ cpu = 20 # 500 MHz
+ memory = 20 # 128MB
+ }
+ } #end finalsync task
+ // task "sync" {
+ // driver = "docker"
+
+ // lifecycle {
+ // hook = "poststart"
+ // sidecar = true
+ // }
+
+ // config {
+ // image = "ghcr.io/sstent/rsync:v0.3.5"
+ // memory_hard_limit = "2048"
+
+ // volumes = [
+ // "/mnt/configs/:/configs",
+ // "/mnt/Public/config/${NOMAD_GROUP_NAME}:/configbackup",
+ // ]
+
+ // args = ["client"]
+ // }
+ // resources {
+ // cpu = 20 # 500 MHz
+ // memory = 20 # 128MB
+ // }
+ // env {
+ // CRON_TASK_1 = "*/20 8-20 * * * chmod a-w /configs/${NOMAD_GROUP_NAME}/ ; rsync -avz /configs/${NOMAD_GROUP_NAME}/ /configbackup/; chmod a+w /configs/${NOMAD_GROUP_NAME}/;"
+ // }
+ // } #end sync task
+
+ ######################################################################
+ ######################################################################
+ ######################################################################
+
+ network {
+ port "shadowsocks" {
+ static = "8338"
+ to = "8388"
+ }
+
+ port "http_proxy" {
+ static = "8888"
+ to = "8888"
+ }
+ port "http_admin" {
+ static = "8000"
+ to = "8000"
+ }
+
+ port "sabnzb_admin" {
+ static = "8080"
+ to = "8080"
+ }
+
+
+ port "socks" {
+ static = "1080"
+ to = "1080"
+ }
+ port "nzbget" {
+ static = "6789"
+ to = "6789"
+ }
+ }
+ }
+}
diff --git a/nomad_backup/20251115_142628/postgres-15.hcl b/nomad_backup/20251115_142628/postgres-15.hcl
new file mode 100644
index 0000000..86ee7d7
--- /dev/null
+++ b/nomad_backup/20251115_142628/postgres-15.hcl
@@ -0,0 +1,116 @@
+job "postgres-15" {
+ type = "system"
+ datacenters = ["dc1"]
+
+ group "group" {
+ count = 1
+
+ network {
+
+ port api {
+ static = 8008
+ to = 8008
+ }
+ port pg {
+ static = 5432
+ to = 5432
+ }
+ }
+
+ task "db" {
+ driver = "docker"
+
+ template {
+ data = <\K.8-20 * * *?(?=<.8-20 * * *?>)' /config/config.xml)
+ // // curl -f "http://localhost:9696/api/v1/system/status?apikey=$API"
+ // }
+ }
+ template {
+ data = <\K.*?(?=<.*?>)' /config/config.xml)"
+ EOH
+
+ destination = "local/healthcheck.sh"
+ perms = "0755"
+ }
+
+ env {
+ // SHARE = "Public;/mount/Public;yes;no;yes;all;none;;Public"
+ # GLOBAL = "socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=65536 SO_SNDBUF=65536"
+ # PERMISSIONS = "true"
+ # WORKGROUP = "WORKGROUP"
+ TZ = "EST5EDT"
+
+ PUID = 1000
+ PGID = 1000
+ }
+
+ # We must specify the resources required for
+ # this task to ensure it runs on a machine with
+ # enough capacity.
+ resources {
+ cpu = 500 # 500 MHz
+ memory = 256 # 128MB
+ }
+
+ # Specify configuration related to log rotation
+ logs {
+ max_files = 10
+ max_file_size = 15
+ }
+
+ # Controls the timeout between signalling a task it will be killed
+ # and killing the task. If not set a default is used.
+ kill_timeout = "10s"
+ } #End main task
+
+ network {
+ // mbits = 100
+
+ port "http" {
+ static = 9696
+ to = 9696
+ }
+ port "http_flare" {
+ static = 8191
+ to = 8191
+ }
+ }
+ }
+}
diff --git a/nomad_backup/20251115_142628/qautomate.hcl b/nomad_backup/20251115_142628/qautomate.hcl
new file mode 100644
index 0000000..b7ea82e
--- /dev/null
+++ b/nomad_backup/20251115_142628/qautomate.hcl
@@ -0,0 +1,59 @@
+job "qautomate" {
+ periodic {
+ cron = "*/30 * * * *"
+ prohibit_overlap = true
+ }
+ datacenters = ["dc1"]
+
+ type = "batch"
+
+ group "app" {
+ count = 1
+
+ task "setup" {
+ driver = "docker"
+
+ lifecycle {
+ hook = "prestart"
+ }
+
+ config {
+ image = "ghcr.io/sstent/ubuntu-python3"
+ // command = "/bin/bash"
+ args = ["-v","-c", "/local/prestart.sh"]
+
+ }
+
+ template {
+ data = <
+Info
+7878
+
+*
+9898
+False
+237c27f22504440385e5ee295fd65eb5
+Forms
+master
+
+True
+
+Docker
+False
+Radarr
+DisabledForLocalAddresses
+postgres
+postgres
+5432
+master.postgres.service.dc1.consul
+
+ EOH
+
+ destination = "local/config.xml"
+ perms = "0755"
+ }
+
+ service {
+ name = "${TASKGROUP}"
+ tags = ["radarr", "tools"]
+ port = "http"
+
+ check {
+ type = "script"
+ name = "check_up"
+ command = "/local/healthcheck.sh"
+ interval = "5m"
+ timeout = "25s"
+
+ check_restart {
+ limit = 3
+ grace = "90s"
+ ignore_warnings = false
+ }
+ }
+ }
+ template {
+ data = <(.*)' /config/config.xml | sed -e 's/<[^>]*>//g')"
+ EOH
+
+ destination = "local/healthcheck.sh"
+ perms = "0755"
+ }
+
+ env {
+ TZ = "EST5EDT"
+ PUID = 1000
+ PGID = 1000
+ }
+
+ resources {
+ cpu = 500 # 500 MHz
+ memory = 256 # 128MB
+
+ // network {
+ // port "radarr" {
+ // static = "7878"
+ // }
+ // }
+ }
+
+ logs {
+ max_files = 10
+ max_file_size = 15
+ }
+
+ kill_timeout = "10s"
+ } #Task
+
+ network {
+ // mode = "bridge"
+ port "http" {
+ static = 7878
+ to = 7878
+ }
+ }
+ } #Group
+}
diff --git a/nomad_backup/20251115_142628/slskd.hcl b/nomad_backup/20251115_142628/slskd.hcl
new file mode 100644
index 0000000..0794503
--- /dev/null
+++ b/nomad_backup/20251115_142628/slskd.hcl
@@ -0,0 +1,149 @@
+# There can only be a single job definition per file.
+# Create a job with ID and Name 'example'
+job "slskd" {
+ datacenters = ["dc1"]
+ type = "service"
+
+ constraint {
+ attribute = "${attr.kernel.name}"
+ value = "linux"
+ }
+constraint {
+ attribute = "${attr.cpu.arch}"
+ operator = "regexp"
+ value = "amd64"
+ }
+
+ update {
+ stagger = "10s"
+ max_parallel = 1
+ }
+
+ group "slskd" {
+ count = 1
+
+ restart {
+ attempts = 2
+ interval = "1m"
+ delay = "10s"
+ mode = "fail"
+ }
+
+task "slskd-vpn" {
+ driver = "docker"
+ lifecycle {
+ hook = "prestart"
+ sidecar = true
+ }
+
+ config {
+ // image = "registry.service.dc1.consul:5000/openpyn:latest"
+ // image = "qmcgaw/gluetun"
+ image = "qmcgaw/gluetun"
+
+ memory_hard_limit = "1024"
+ ports = ["http","https","guac"]
+
+ cap_add = [
+ "NET_ADMIN",
+ "NET_BIND_SERVICE",
+ ]
+
+ #network_mode = "host"
+ #network_mode = "vpn"
+
+ volumes = [
+ "/etc/localtime:/etc/localtime",
+ "/mnt/syncthing/mullvad:/vpn",
+
+ ]
+ devices = [
+ {
+ host_path = "/dev/net/tun"
+ container_path = "/dev/net/tun"
+ },
+ ]
+ }
+
+ env {
+ VPN_SERVICE_PROVIDER="airvpn"
+ VPN_TYPE="wireguard"
+ WIREGUARD_PRIVATE_KEY="SPpgnVCsOnz+zzorzTiOmvDF8GElgp27dSIeYAq43Vk="
+ WIREGUARD_PRESHARED_KEY="TBb2gU8pSTSG6lT4QYr7pzNWN7wZEn0yeG4VDTtuy50="
+ WIREGUARD_ADDRESSES="10.186.222.247/32"
+ SERVER_COUNTRIES="Canada"
+ SERVER_CITIES="Montreal"
+ FIREWALL_VPN_INPUT_PORTS = "53304"
+ HEALTH_TARGET_ADDRESS="1.1.1.1"
+ HEALTH_SUCCESS_WAIT_DURATION="30s"
+ HEALTH_VPN_DURATION_INITIAL="3600s"
+ HEALTH_VPN_DURATION_ADDITION="600s"
+ // HEALTH_TARGET_ADDRESS="cloudflare.com:443"
+
+
+ ##Mullvad
+ #VPNSP = "mullvad"
+ #VPN_TYPE = "wireguard"
+ #COUNTRY = "Canada"
+ #CITY = "Toronto"
+ #FIREWALL_VPN_INPUT_PORTS = "56987"
+ #WIREGUARD_PRIVATE_KEY = "iA64ImY2XNvml7s+HEHWNNGXeqpzFN0/KYGxhCsHLV8="
+ #WIREGUARD_ADDRESS = "10.64.141.217/32"
+ HTTPPROXY = "on"
+ SHADOWSOCKS_PASSWORD = "farscape5"
+ SHADOWSOCKS = "on"
+ DOT_PROVIDERS = "cloudflare,google,quad9,quadrant"
+ DOT = "off"
+ WEBUI_PORT=8080
+ }
+
+
+ resources {
+ cpu = 100 # 500 MHz
+ memory = 250 # 128MB
+ }
+ } #task ovpn
+
+ task "nicotine" {
+ driver = "docker"
+
+ config {
+ image = "ghcr.io/fletchto99/nicotine-plus-docker:latest"
+ memory_hard_limit = "1024"
+
+ network_mode = "container:slskd-vpn-${NOMAD_ALLOC_ID}"
+
+ volumes = [
+ "/mnt/Public/Downloads/news/slskd/config:/config",
+ "/mnt/Public/Downloads/news/slskd/shared:/shared",
+ "/mnt/Public/Downloads/news/slskd/downloads/:/downloads",
+ "/mnt/Public/Downloads/news/slskd/incomplete/:/incomplete",
+ ]
+ }
+ env {
+ PUID=1000
+ PGID=1000
+ TZ="Etc/UTC"
+ LISTENING_PORT="53304"
+ }
+ }
+
+
+ network {
+ // mbits = 100
+
+ port "http" {
+ static = 5000
+ to = 5000
+ }
+ port "https" {
+ static = 5001
+ to = 5001
+ }
+ port "guac" {
+ static = 6080
+ to = 6080
+ }
+ }
+ }
+}
diff --git a/nomad_backup/20251115_142628/sonarr.hcl b/nomad_backup/20251115_142628/sonarr.hcl
new file mode 100644
index 0000000..b2fa4a3
--- /dev/null
+++ b/nomad_backup/20251115_142628/sonarr.hcl
@@ -0,0 +1,158 @@
+# There can only be a single job definition per file.
+# Create a job with ID and Name 'example'
+job "sonarr" {
+ datacenters = ["dc1"]
+ type = "service"
+
+ constraint {
+ attribute = "${attr.kernel.name}"
+ value = "linux"
+ }
+ constraint {
+ attribute = "${attr.cpu.arch}"
+ operator = "regexp"
+ value = "amd64"
+ }
+
+ update {
+ stagger = "10s"
+ max_parallel = 1
+ }
+ group "sonarr" {
+ count = 1
+
+ restart {
+ attempts = 2
+ interval = "1m"
+ delay = "10s"
+ mode = "fail"
+ }
+
+ task "sonarr" {
+ // driver = "raw_exec" // config { // command = "docker" // args = ["run", // "--rm", // "--name=sonarr", // "-e", "PUID=1000", // "-e", "PGID=1000", // "-e", "TZ=EST5EDT", // "-p", "8989:8989", // "-v", "/mnt/syncthing/sonarrv3:/config", // "-v", "/mnt/Public/Downloads/tv:/tv", // "-v", "/mnt/Public/Downloads/news:/downloads", // "--cpuset-cpus","4-7", // "linuxserver/sonarr:preview"] // }
+
+ driver = "docker"
+
+ config {
+ image = "linuxserver/sonarr:develop"
+
+ ports = ["http"]
+
+ // dns_servers = ["192.168.1.1", "1.1.1.1"]
+ memory_hard_limit = "2048"
+ // cpuset_cpus = "4-7"
+
+ volumes = [
+ "/mnt/Public/Downloads/news:/downloads",
+ "/mnt/Public/Downloads/tv:/tv",
+ // "/mnt/configs/sonarr:/config",
+ "/mnt/Public/configs/sonarr_pg:/config",
+ // "local/config.xml:/config/config.xml"
+ ]
+
+ // "/mnt/gv0/sonarr:/config",
+ force_pull = false
+ }
+
+ service {
+ name = "${TASKGROUP}"
+ tags = ["sonarr", "tools"]
+ port = "http"
+
+ check {
+ type = "script"
+ name = "check_up"
+ command = "/local/healthcheck.sh"
+ interval = "60s"
+ timeout = "5s"
+
+ check_restart {
+ limit = 3
+ grace = "90s"
+ ignore_warnings = false
+ }
+ }
+ }
+ template {
+ data = <(.*)' /config/config.xml | sed -e 's/<[^>]*>//g')"
+ EOH
+
+ destination = "local/healthcheck.sh"
+ perms = "0755"
+ }
+
+ template {
+ data = "---\nkey: {{ key \"ovpn-client\" }}"
+ destination = "local/file.yml"
+ change_mode = "restart"
+ }
+ template {
+ data = <
+Info
+8989
+/sonarr
+*
+9898
+False
+1632787062fb47a9a6eb4c88e32b3ff3
+None
+develop
+True
+
+Docker
+False
+/config/restart.sh
+Sonarr
+postgres
+postgres
+5432
+master.postgres.service.dc1.consul
+
+ EOH
+
+ destination = "local/config.xml"
+ perms = "0755"
+ }
+ env {
+ // SHARE = "Public;/mount/Public;yes;no;yes;all;none;;Public"
+ # GLOBAL = "socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=65536 SO_SNDBUF=65536"
+ # PERMISSIONS = "true"
+ # WORKGROUP = "WORKGROUP"
+ TZ = "EST5EDT"
+
+ PUID = 1000
+ PGID = 1000
+ }
+
+ # We must specify the resources required for
+ # this task to ensure it runs on a machine with
+ # enough capacity.
+ resources {
+ cpu = 500 # 500 MHz
+ memory = 256 # 128MB
+ }
+
+ # Specify configuration related to log rotation
+ logs {
+ max_files = 12
+ max_file_size = 15
+ }
+
+ # Controls the timeout between signalling a task it will be killed
+ # and killing the task. If not set a default is used.
+ kill_timeout = "10s"
+ } #End main task
+
+ network {
+ // mbits = 100
+
+ port "http" {
+ static = 8989
+ to = 8989
+ }
+ }
+ }
+}
diff --git a/nomad_backup/20251115_142628/traefik.hcl b/nomad_backup/20251115_142628/traefik.hcl
new file mode 100644
index 0000000..7dc2f1d
--- /dev/null
+++ b/nomad_backup/20251115_142628/traefik.hcl
@@ -0,0 +1,218 @@
+job "traefik" {
+ datacenters = ["dc1"]
+ type = "system"
+
+ constraint {
+ attribute = "${attr.kernel.name}"
+ value = "linux"
+ }
+
+ update {
+ stagger = "10s"
+ max_parallel = 1
+ healthy_deadline = "5m"
+ }
+
+ group "traefik" {
+ count = 1
+
+ restart {
+ attempts = 6
+ interval = "1m"
+ delay = "10s"
+ mode = "delay"
+ }
+
+ task "traefik" {
+ driver = "docker"
+
+ config {
+ image = "traefik:2.9"
+ // network_mode = "host"
+
+ args = [
+ // "--api.dashboard",
+ // "--providers.consulcatalog.defaultRule=Host(`{{ .Name }}.service.dc1.consul`)",
+ // "--providers.consulcatalog.endpoint.address=${attr.unique.network.ip-address}:8500",
+ // "--providers.consulcatalog.exposedbydefault=true",
+ // "--metrics=true",
+ // "--metrics.prometheus=true",
+ // "--metrics.prometheus.entryPoint=web",
+ // "--entryPoints.web.address=:80",
+ // "--entryPoints.websecure.address=:443",
+ // "--entryPoints.openvpn.address=:1194/udp",
+ "--configFile=/local/file.yml",
+ // "--certificatesresolvers.myresolver.acme.email=stuart.stent@gmail.com",
+ // "--certificatesresolvers.myresolver.acme.storage=/acmecert/acme.json",
+ // "--certificatesresolvers.myresolver.acme.tlschallenge=true",
+ // "--certificatesresolvers.myresolver-int.acme.email=stuart.stent@gmail.com",
+ // "--certificatesresolvers.myresolver-int.acme.storage=/acmecert/acme.json",
+ // "--certificatesresolvers.myresolver-int.acme.tlschallenge=true",
+ // "--certificatesresolvers.myresolver-int.acme.dnschallenge=true",
+ // "--certificatesresolvers.myresolver-int.acme.dnschallenge.provider=duckdns",
+ "--accesslog=true",
+ // "--serversTransport.insecureSkipVerify=true",
+ ]
+ volumes = [
+ "/var/run/docker.sock:/var/run/docker.sock",
+ "/mnt/mnt/configs/letsencrypt:/acmecert/",
+ ]
+
+ dns_servers = ["192.168.1.1", "192.168.1.250"]
+ ports = ["traefik", "traefikhttps","traefikui"]
+
+ memory_hard_limit = 2048
+ }
+
+ env {
+ TZ = "EST5EDT"
+ PUID = 1000
+ PGID = 1000
+ DUCKDNS_TOKEN="e4b5ca33-1f4d-494b-b06d-6dd4600df662"
+ }
+
+ template {
+ left_delimiter = "[["
+ right_delimiter = "]]"
+
+ data = < [
+ "header" => "User-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36",
+ ]
+]);
+if (($data = @file_get_contents($url, false, $context)) === false) {
+ $error = error_get_last();
+ http_response_code(500);
+ print "HTTP request failed: " . $error['message'];
+ exit;
+}
+header('Content-Type: text/calendar; charset=utf-8');
+print $data;
+?>
+EOF
+ destination = "local/app/ics.php"
+ }
+
+
+ resources {
+ cpu = 100
+ memory = 128
+ }
+ }
+
+ # PHP-FPM container
+ task "php-fpm" {
+ driver = "docker"
+
+ config {
+ image = "php:8.2-fpm-alpine"
+ network_mode = "container:nginx-${NOMAD_ALLOC_ID}"
+
+ volumes = [
+ "local/app:/var/www/html",
+ "local/php-fpm.conf:/usr/local/etc/php-fpm.d/www.conf",
+ ]
+ }
+
+ template {
+ data = < [
+ "header" => "User-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36",
+ ]
+]);
+if (($data = @file_get_contents($url, false, $context)) === false) {
+ $error = error_get_last();
+ http_response_code(500);
+ print "HTTP request failed: " . $error['message'];
+ exit;
+}
+header('Content-Type: text/calendar; charset=utf-8');
+print $data;
+?>
+EOF
+ destination = "local/app/ics.php"
+ }
+
+ resources {
+ cpu = 200
+ memory = 256
+ }
+ }
+
+ # Restart policy
+ restart {
+ attempts = 3
+ interval = "5m"
+ delay = "25s"
+ mode = "fail"
+ }
+
+ # Update strategy
+ update {
+ max_parallel = 1
+ min_healthy_time = "10s"
+ healthy_deadline = "3m"
+ auto_revert = true
+ }
+ }
+}
\ No newline at end of file
diff --git a/nomad_backup/20251115_143630/democratic-csi-local.hcl b/nomad_backup/20251115_143630/democratic-csi-local.hcl
new file mode 100644
index 0000000..1fc4018
--- /dev/null
+++ b/nomad_backup/20251115_143630/democratic-csi-local.hcl
@@ -0,0 +1,105 @@
+job "democratic-csi-local" {
+ datacenters = ["dc1"]
+ type = "system"
+
+ group "controller" {
+ count = 1
+
+ task "controller" {
+ driver = "docker"
+
+ config {
+ image = "democraticcsi/democratic-csi:latest"
+
+ args = [
+ "--csi-version=1.5.0",
+ "--csi-name=org.democratic-csi.local-hostpath",
+ "--driver-config-file=/config/driver-config-file.yaml",
+ "--log-level=info",
+ "--csi-mode=controller",
+ "--server-socket=/csi/csi.sock",
+ ]
+
+ volumes = [
+ "local/config:/config:ro"
+ ]
+ }
+
+ template {
+ data = <<-EOH
+driver: local-hostpath
+instance_id: {{ env "node.unique.id" }}
+local-hostpath:
+ shareBasePath: "/tmp/democratic-csi-local-hostpath"
+ controllerBasePath: "/tmp/democratic-csi-local-hostpath"
+ dirPermissionsMode: "0755"
+ dirPermissionsUser: 0
+ dirPermissionsGroup: 0
+EOH
+ destination = "local/config/driver-config-file.yaml"
+ }
+
+ csi_plugin {
+ id = "org.democratic-csi.local-hostpath"
+ type = "controller"
+ mount_dir = "/csi"
+ }
+
+ resources {
+ cpu = 256
+ memory = 128
+ }
+ }
+ }
+
+ group "nodes" {
+ task "node" {
+ driver = "docker"
+
+ config {
+ image = "democraticcsi/democratic-csi:latest"
+
+ args = [
+ "--csi-version=1.5.0",
+ "--csi-name=org.democratic-csi.local-hostpath",
+ "--driver-config-file=/config/driver-config-file.yaml",
+ "--log-level=info",
+ "--csi-mode=node",
+ "--server-socket=/csi/csi.sock",
+ ]
+
+ privileged = true
+
+ volumes = [
+ "local/config:/config:ro",
+ "/tmp/democratic-csi-local-hostpath:/tmp/democratic-csi-local-hostpath:rshared"
+ ]
+ }
+
+ template {
+ data = <<-EOH
+driver: local-hostpath
+instance_id: {{ env "node.unique.id" }}
+local-hostpath:
+ shareBasePath: "/tmp/democratic-csi-local-hostpath"
+ controllerBasePath: "/tmp/democratic-csi-local-hostpath"
+ dirPermissionsMode: "0755"
+ dirPermissionsUser: 0
+ dirPermissionsGroup: 0
+EOH
+ destination = "local/config/driver-config-file.yaml"
+ }
+
+ csi_plugin {
+ id = "org.democratic-csi.local-hostpath"
+ type = "node"
+ mount_dir = "/csi"
+ }
+
+ resources {
+ cpu = 256
+ memory = 128
+ }
+ }
+ }
+}
diff --git a/nomad_backup/20251115_143630/foodplanner.hcl b/nomad_backup/20251115_143630/foodplanner.hcl
new file mode 100644
index 0000000..8f15b81
--- /dev/null
+++ b/nomad_backup/20251115_143630/foodplanner.hcl
@@ -0,0 +1,99 @@
+job "foodplanner" {
+ datacenters = ["dc1"]
+
+ type = "service"
+
+ group "app" {
+ count = 1
+
+ network {
+ port "http" {
+ to = 8999
+ }
+ }
+
+ service {
+ name = "foodplanner"
+ port = "http"
+
+ check {
+ type = "http"
+ path = "/"
+ interval = "10s"
+ timeout = "2s"
+ }
+ }
+
+ # Prestart restore task
+ task "restore" {
+ driver = "docker"
+ lifecycle {
+ hook = "prestart"
+ sidecar = false
+ }
+ config {
+ # image = "litestream/litestream:latest"
+ image = "litestream/litestream:0.3"
+ args = [
+ "restore",
+ # "-if-replica-exists",
+ #"-if-db-not-exists",
+ "-o", "/alloc/tmp/meal_planner.db",
+ "sftp://root:odroid@192.168.4.63/mnt/Shares/litestream/foodplanner.db"
+ ]
+ volumes = [
+ "/opt/nomad/data:/data"
+ ]
+ }
+ }
+
+ task "app" {
+ driver = "docker"
+
+ config {
+ image = "ghcr.io/sstent/foodplanner:main"
+ ports = ["http"]
+
+ # Mount the SQLite database file to persist data
+ # Adjust the source path as needed for your environment
+ volumes = [
+ "/mnt/Public/configs/FoodPlanner_backups:/app/backups/",
+ ]
+ }
+ env {
+ DATABASE_PATH = "/alloc/tmp"
+ DATABASE_URL = "sqlite:////alloc/tmp/meal_planner.db"
+ }
+ resources {
+ cpu = 500
+ memory = 1024
+ }
+
+ # Restart policy
+ restart {
+ attempts = 3
+ interval = "10m"
+ delay = "15s"
+ mode = "fail"
+ }
+ }
+
+ # Litestream sidecar for continuous replication
+ task "litestream" {
+ driver = "docker"
+ lifecycle {
+ hook = "poststart" # runs after main task starts
+ sidecar = true
+ }
+ config {
+ # image = "litestream/litestream:0.5.0-test.10"
+ image = "litestream/litestream:0.3"
+ args = [
+ "replicate",
+ "/alloc/tmp/meal_planner.db",
+ "sftp://root:odroid@192.168.4.63/mnt/Shares/litestream/foodplanner.db"
+ ]
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/nomad_backup/20251115_143630/gonic.hcl b/nomad_backup/20251115_143630/gonic.hcl
new file mode 100644
index 0000000..d45a4e0
--- /dev/null
+++ b/nomad_backup/20251115_143630/gonic.hcl
@@ -0,0 +1,151 @@
+job "gonic" {
+ datacenters = ["dc1"]
+ type = "service"
+
+
+
+ group "gonic" {
+ count = 1
+ task "gonic" {
+ driver = "docker"
+ config {
+ image = "sentriz/gonic"
+ port_map {
+ http = 80
+ }
+ volumes = [
+ "/mnt/configs/gonic/data:/data",
+ "/mnt/configs/gonic/cache:/cache",
+ "/mnt/Public/Downloads/Clean_Music:/music/CleanMusic:ro",
+ "/mnt/Public/Downloads/incoming_music:/music/incomingmusic:ro",
+ "/mnt/Public/Downloads/podcasts:/podcasts",
+ "/mnt/Public/Downloads/musicplaylists:/musicplaylists",
+
+ ]
+ }
+ env{
+ GONIC_SCAN_INTERVAL = "120"
+ GONIC_MUSIC_PATH = "/music"
+ GONIC_PODCAST_PATH = "/podcasts"
+ GONIC_PLAYLISTS_PATH = "/musicplaylists"
+ }
+ resources {
+ cpu = 100 # 100 MHz
+ memory = 256 # 128 MB
+ network {
+ port "http" {
+ static = "4747"
+ }
+ }
+ }
+ service {
+ name = "gonic"
+ tags = [
+ "gonic",
+ "web",
+ "urlprefix-/gonic",
+ "backend",
+ "traefik.http.routers.goniclan.rule=Host(`gonic.service.dc1.consul`)",
+ "traefik.http.routers.gonicwan.rule=Host(`mg.fbleagh.duckdns.org`)",
+ "traefik.http.routers.gonicwan.tls=true",
+ "traefik.http.routers.gonicwan.tls.certresolver=myresolver"
+
+ ]
+ // "traefik.http.middlewares.gonic_auth.basicauth.users=admin:$2y$05$cJGONoS0BFTeBUXqmETikeI14QhLDKIDkYuPdA1umIOC129grVMAm",
+ port = "http"
+ meta {
+ ALLOC = "${NOMAD_ALLOC_ID}"
+ }
+ check {
+ type = "tcp"
+ interval = "10s"
+ timeout = "2s"
+ }
+ }
+ } #end gonic
+
+ task "init-manual" {
+ driver = "docker"
+ lifecycle {
+ hook = "prestart"
+ sidecar = false
+ }
+ config {
+ memory_hard_limit = "2048"
+
+ image = "ghcr.io/sstent/rsync"
+ volumes = [
+ "/mnt/configs/${NOMAD_GROUP_NAME}:/config",
+ "/mnt/Public/config/${NOMAD_GROUP_NAME}:/configbackup",
+ "/mnt/Public/config/locks:/locks"
+ ]
+
+ args = ["flock", "-x","/locks/${NOMAD_GROUP_NAME}_rsync.lock","rsync","-av","--exclude=Backups","/configbackup/","/config/","--delete-before"]
+ }
+ resources {
+ cpu = 20 # 500 MHz
+ memory = 20 # 128MB
+ }
+ }
+
+
+ task "finalsync-manual" {
+ driver = "docker"
+ lifecycle {
+ hook = "poststop"
+ }
+ config {
+ memory_hard_limit = "2048"
+
+ image = "ghcr.io/sstent/rsync"
+ volumes = [
+ "/mnt/configs/${NOMAD_GROUP_NAME}:/config",
+ "/mnt/Public/config/${NOMAD_GROUP_NAME}:/configbackup",
+ "/mnt/Public/config/locks:/locks"
+ ]
+
+ args = ["flock", "-x","/locks/${NOMAD_GROUP_NAME}_rsync.lock","rsync","-av","/config/","/configbackup/"]
+ }
+ resources {
+ cpu = 20 # 500 MHz
+ memory = 20 # 128MB
+ }
+ }
+
+ task "db-sync" {
+ driver = "docker"
+ lifecycle {
+ hook = "poststart"
+ sidecar = true
+ }
+ config {
+ memory_hard_limit = "2048"
+
+ image = "ghcr.io/sstent/rsync"
+ volumes = [
+ "/mnt/configs/${NOMAD_GROUP_NAME}:/config",
+ "/mnt/Public/config/${NOMAD_GROUP_NAME}:/configbackup",
+ ]
+
+ // args = ["/usr/local/bin/litestream", "replicate", "-config","/local/litestream.yml"]
+ }
+ resources {
+ cpu = 20 # 500 MHz
+ memory = 20 # 128MB
+ }
+ template {
+ data = <Local Services - HTTP/HTTPS
+
+
+ Node Environment Information:
+ node_id: {{ env "node.unique.id" }}
+ datacenter: {{ env "NOMAD_DC" }}
+
+ EOH
+
+ destination = "local/data/index.html"
+ change_mode = "noop"
+ }
+
+ resources {
+ cpu = 100 # 100 MHz
+ memory = 64 # 128 MB
+ }
+ service {
+ name = "nginx"
+ tags = ["nginx", "web", "urlprefix-/nginx", "backend"]
+ port = "http"
+
+ check {
+ type = "tcp"
+ interval = "10s"
+ timeout = "2s"
+ }
+ }
+ }
+
+ network {
+ port "http" {
+ to = 8080
+ }
+
+ // port "https" {
+ // to = 443
+ // }
+ }
+ }
+}
diff --git a/nomad_backup/20251115_143630/nzbget.hcl b/nomad_backup/20251115_143630/nzbget.hcl
new file mode 100644
index 0000000..0ac7b66
--- /dev/null
+++ b/nomad_backup/20251115_143630/nzbget.hcl
@@ -0,0 +1,305 @@
+job "nzbget" {
+ # region = "global"
+ datacenters = ["dc1"]
+ type = "service"
+
+ # priority = 50
+
+ constraint {
+ attribute = "${attr.kernel.name}"
+ value = "linux"
+ }
+ constraint {
+ attribute = "${attr.unique.hostname}"
+ operator = "regexp"
+ value = "odroid.*"
+ }
+ update {
+ # Stagger updates every 60 seconds
+ stagger = "90s"
+ max_parallel = 1
+ healthy_deadline = "5m"
+ }
+ group "nzbget" {
+ count = 1
+
+ restart {
+ attempts = 8
+ interval = "20m"
+ delay = "10s"
+ mode = "delay"
+ }
+
+ // task "init-trigger" {
+ // driver = "docker"
+
+ // lifecycle {
+ // hook = "prestart"
+ // }
+
+ // config {
+ // image = "curlimages/curl"
+ // args = ["--request", "PUT", "--data", "${NOMAD_ALLOC_ID}", "http://${attr.unique.network.ip-address}:8500/v1/kv/${NOMAD_GROUP_NAME}"]
+ // }
+ // resources {
+ // cpu = 20 # 500 MHz
+ // memory = 20 # 128MB
+ // }
+ // }
+
+
+ task "ovpn-client" {
+ driver = "docker"
+ lifecycle {
+ hook = "prestart"
+ sidecar = true
+ }
+
+ config {
+ // image = "registry.service.dc1.consul:5000/openpyn:latest"
+ image = "qmcgaw/gluetun"
+ memory_hard_limit = "1024"
+
+ ports = [
+ "shadowsocks",
+ "nzbget",
+ "http_proxy",
+ "http_admin",
+ "sabnzb_admin",
+ "socks",
+ ]
+
+ cap_add = [
+ "NET_ADMIN",
+ "NET_BIND_SERVICE",
+ ]
+
+ #network_mode = "host"
+ #network_mode = "vpn"
+
+ volumes = [
+ "/etc/localtime:/etc/localtime",
+ ]
+ devices = [
+ {
+ host_path = "/dev/net/tun"
+ container_path = "/dev/net/tun"
+ },
+ ]
+ }
+
+ env {
+ // VPNFLAGS = "us --max-load 70 --top-servers 10 --pings 5"
+ // VPNFLAGS = "nl --max-load 70 --top-servers 10 --pings 5"
+ // VPNSP = "nordvpn"
+ // OPENVPN_USER = "yvPLaZ3xkXtnJKsyXDNQf9Ft"
+ // OPENVPN_PASSWORD = "SW8XvhGkSVuQitjuFrbH9WPA"
+ // REGION = "Netherlands"
+ ##Mullvad
+ VPNSP = "mullvad"
+ VPN_TYPE = "wireguard"
+ COUNTRY = "Canada"
+ CITY = "Toronto"
+ FIREWALL_VPN_INPUT_PORTS = "56987"
+ WIREGUARD_PRIVATE_KEY = "2FHwQX1jxk+qeMmXUtSGRc2kKF1WHeSCyIgHNW+7akA=" #ActiveLynx
+ WIREGUARD_ADDRESS = "10.66.246.4/32"
+
+
+
+ HTTPPROXY = "on"
+ UPDATER_PERIOD= "24h"
+ SHADOWSOCKS_PASSWORD = "farscape5"
+ SHADOWSOCKS = "off"
+ DOT_PROVIDERS = "cloudflare,google,quad9,quadrant"
+ DOT = "off"
+ }
+
+ service {
+ name = "${TASKGROUP}-admin"
+ tags = ["global", "ovpn-openpyn"]
+ port = "http_admin"
+ }
+
+ service {
+ name = "${TASKGROUP}"
+ tags = ["global", "ovpn-openpyn"]
+ port = "shadowsocks"
+ }
+
+ service {
+ name = "nzbget"
+ tags = ["global", "ovpn-openpyn"]
+ port = "nzbget"
+ }
+ service {
+ name = "sabnzb"
+ tags = ["global", "ovpn-openpyn", "enable_gocast",
+ "gocast_vip=192.168.1.247/32",
+ "gocast_nat=tcp:8080:8080",
+ "gocast_nat=udp:8080:8080",]
+ port = "sabnzb_admin"
+ }
+service {
+ name = "socks-nord"
+ tags = ["global", "ovpn-openpyn", "enable_gocast",
+ "gocast_vip=192.168.1.243/32",
+ "gocast_nat=tcp:1080:1080",
+ "gocast_nat=udp:1080:1080",]
+ port = "socks"
+
+ }
+
+
+ resources {
+ cpu = 100 # 500 MHz
+ memory = 100 # 128MB
+ }
+ } #task ovpn
+
+
+ task "dante" {
+ driver = "docker"
+
+ config {
+ image = "serjs/go-socks5-proxy"
+ // image = "ghcr.io/sstent/dante:latest"
+ network_mode = "container:ovpn-client-${NOMAD_ALLOC_ID}"
+ memory_hard_limit = 256
+
+ devices = [
+ {
+ host_path = "/dev/net/tun"
+ container_path = "/dev/net/tun"
+ },
+ ]
+ }
+ env {
+ REQUIRE_AUTH = "false"
+ }
+
+
+ resources {
+ cpu = 64 # 500 MHz
+ memory = 128 # 128MB
+ }
+ }
+ ######################################################################
+ ######################################################################
+ ######################################################################
+
+ task "init" {
+ driver = "docker"
+
+ lifecycle {
+ hook = "prestart"
+ sidecar = false
+ }
+
+ config {
+ image = "ghcr.io/sstent/rsync:v0.3.5"
+ memory_hard_limit = "2048"
+
+ volumes = [
+ "/mnt/configs/${NOMAD_GROUP_NAME}:/config",
+ "/mnt/Public/config/${NOMAD_GROUP_NAME}:/configbackup",
+ "/mnt/Public/config/locks:/locks",
+ ]
+
+ args = ["flock", "-x", "/locks/${NOMAD_GROUP_NAME}_rsync.lock", "rsync", "-avz", "--exclude=Backups", "/configbackup/", "/config/", "--delete-before"]
+ }
+
+ resources {
+ cpu = 20 # 500 MHz
+ memory = 20 # 128MB
+ }
+ } #end init task
+ task "finalsync" {
+ driver = "docker"
+
+ lifecycle {
+ hook = "poststop"
+ }
+
+ config {
+ // image = "pebalk/rsync"
+ image = "ghcr.io/sstent/rsync:v0.3.5"
+ memory_hard_limit = "2048"
+
+ volumes = [
+ "/mnt/configs/${NOMAD_GROUP_NAME}:/config",
+ "/mnt/Public/config/${NOMAD_GROUP_NAME}:/configbackup",
+ "/mnt/Public/config/locks:/locks",
+ ]
+
+ args = ["flock", "-x", "/locks/${NOMAD_GROUP_NAME}_rsync.lock", "rsync", "-avz", "/config/", "/configbackup/"]
+ }
+
+ resources {
+ cpu = 20 # 500 MHz
+ memory = 20 # 128MB
+ }
+ } #end finalsync task
+ // task "sync" {
+ // driver = "docker"
+
+ // lifecycle {
+ // hook = "poststart"
+ // sidecar = true
+ // }
+
+ // config {
+ // image = "ghcr.io/sstent/rsync:v0.3.5"
+ // memory_hard_limit = "2048"
+
+ // volumes = [
+ // "/mnt/configs/:/configs",
+ // "/mnt/Public/config/${NOMAD_GROUP_NAME}:/configbackup",
+ // ]
+
+ // args = ["client"]
+ // }
+ // resources {
+ // cpu = 20 # 500 MHz
+ // memory = 20 # 128MB
+ // }
+ // env {
+ // CRON_TASK_1 = "*/20 8-20 * * * chmod a-w /configs/${NOMAD_GROUP_NAME}/ ; rsync -avz /configs/${NOMAD_GROUP_NAME}/ /configbackup/; chmod a+w /configs/${NOMAD_GROUP_NAME}/;"
+ // }
+ // } #end sync task
+
+ ######################################################################
+ ######################################################################
+ ######################################################################
+
+ network {
+ port "shadowsocks" {
+ static = "8338"
+ to = "8388"
+ }
+
+ port "http_proxy" {
+ static = "8888"
+ to = "8888"
+ }
+ port "http_admin" {
+ static = "8000"
+ to = "8000"
+ }
+
+ port "sabnzb_admin" {
+ static = "8080"
+ to = "8080"
+ }
+
+
+ port "socks" {
+ static = "1080"
+ to = "1080"
+ }
+ port "nzbget" {
+ static = "6789"
+ to = "6789"
+ }
+ }
+ }
+}
diff --git a/nomad_backup/20251115_143630/postgres-15.hcl b/nomad_backup/20251115_143630/postgres-15.hcl
new file mode 100644
index 0000000..86ee7d7
--- /dev/null
+++ b/nomad_backup/20251115_143630/postgres-15.hcl
@@ -0,0 +1,116 @@
+job "postgres-15" {
+ type = "system"
+ datacenters = ["dc1"]
+
+ group "group" {
+ count = 1
+
+ network {
+
+ port api {
+ static = 8008
+ to = 8008
+ }
+ port pg {
+ static = 5432
+ to = 5432
+ }
+ }
+
+ task "db" {
+ driver = "docker"
+
+ template {
+ data = <\K.8-20 * * *?(?=<.8-20 * * *?>)' /config/config.xml)
+ // // curl -f "http://localhost:9696/api/v1/system/status?apikey=$API"
+ // }
+ }
+ template {
+ data = <\K.*?(?=<.*?>)' /config/config.xml)"
+ EOH
+
+ destination = "local/healthcheck.sh"
+ perms = "0755"
+ }
+
+ env {
+ // SHARE = "Public;/mount/Public;yes;no;yes;all;none;;Public"
+ # GLOBAL = "socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=65536 SO_SNDBUF=65536"
+ # PERMISSIONS = "true"
+ # WORKGROUP = "WORKGROUP"
+ TZ = "EST5EDT"
+
+ PUID = 1000
+ PGID = 1000
+ }
+
+ # We must specify the resources required for
+ # this task to ensure it runs on a machine with
+ # enough capacity.
+ resources {
+ cpu = 500 # 500 MHz
+ memory = 256 # 128MB
+ }
+
+ # Specify configuration related to log rotation
+ logs {
+ max_files = 10
+ max_file_size = 15
+ }
+
+ # Controls the timeout between signalling a task it will be killed
+ # and killing the task. If not set a default is used.
+ kill_timeout = "10s"
+ } #End main task
+
+ network {
+ // mbits = 100
+
+ port "http" {
+ static = 9696
+ to = 9696
+ }
+ port "http_flare" {
+ static = 8191
+ to = 8191
+ }
+ }
+ }
+}
diff --git a/nomad_backup/20251115_143630/qautomate.hcl b/nomad_backup/20251115_143630/qautomate.hcl
new file mode 100644
index 0000000..b7ea82e
--- /dev/null
+++ b/nomad_backup/20251115_143630/qautomate.hcl
@@ -0,0 +1,59 @@
+job "qautomate" {
+ periodic {
+ cron = "*/30 * * * *"
+ prohibit_overlap = true
+ }
+ datacenters = ["dc1"]
+
+ type = "batch"
+
+ group "app" {
+ count = 1
+
+ task "setup" {
+ driver = "docker"
+
+ lifecycle {
+ hook = "prestart"
+ }
+
+ config {
+ image = "ghcr.io/sstent/ubuntu-python3"
+ // command = "/bin/bash"
+ args = ["-v","-c", "/local/prestart.sh"]
+
+ }
+
+ template {
+ data = <
+Info
+7878
+
+*
+9898
+False
+237c27f22504440385e5ee295fd65eb5
+Forms
+master
+
+True
+
+Docker
+False
+Radarr
+DisabledForLocalAddresses
+postgres
+postgres
+5432
+master.postgres.service.dc1.consul
+
+ EOH
+
+ destination = "local/config.xml"
+ perms = "0755"
+ }
+
+ service {
+ name = "${TASKGROUP}"
+ tags = ["radarr", "tools"]
+ port = "http"
+
+ check {
+ type = "script"
+ name = "check_up"
+ command = "/local/healthcheck.sh"
+ interval = "5m"
+ timeout = "25s"
+
+ check_restart {
+ limit = 3
+ grace = "90s"
+ ignore_warnings = false
+ }
+ }
+ }
+ template {
+ data = <(.*)' /config/config.xml | sed -e 's/<[^>]*>//g')"
+ EOH
+
+ destination = "local/healthcheck.sh"
+ perms = "0755"
+ }
+
+ env {
+ TZ = "EST5EDT"
+ PUID = 1000
+ PGID = 1000
+ }
+
+ resources {
+ cpu = 500 # 500 MHz
+ memory = 256 # 128MB
+
+ // network {
+ // port "radarr" {
+ // static = "7878"
+ // }
+ // }
+ }
+
+ logs {
+ max_files = 10
+ max_file_size = 15
+ }
+
+ kill_timeout = "10s"
+ } #Task
+
+ network {
+ // mode = "bridge"
+ port "http" {
+ static = 7878
+ to = 7878
+ }
+ }
+ } #Group
+}
diff --git a/nomad_backup/20251115_143630/slskd.hcl b/nomad_backup/20251115_143630/slskd.hcl
new file mode 100644
index 0000000..0794503
--- /dev/null
+++ b/nomad_backup/20251115_143630/slskd.hcl
@@ -0,0 +1,149 @@
+# There can only be a single job definition per file.
+# Create a job with ID and Name 'example'
+job "slskd" {
+ datacenters = ["dc1"]
+ type = "service"
+
+ constraint {
+ attribute = "${attr.kernel.name}"
+ value = "linux"
+ }
+constraint {
+ attribute = "${attr.cpu.arch}"
+ operator = "regexp"
+ value = "amd64"
+ }
+
+ update {
+ stagger = "10s"
+ max_parallel = 1
+ }
+
+ group "slskd" {
+ count = 1
+
+ restart {
+ attempts = 2
+ interval = "1m"
+ delay = "10s"
+ mode = "fail"
+ }
+
+task "slskd-vpn" {
+ driver = "docker"
+ lifecycle {
+ hook = "prestart"
+ sidecar = true
+ }
+
+ config {
+ // image = "registry.service.dc1.consul:5000/openpyn:latest"
+ // image = "qmcgaw/gluetun"
+ image = "qmcgaw/gluetun"
+
+ memory_hard_limit = "1024"
+ ports = ["http","https","guac"]
+
+ cap_add = [
+ "NET_ADMIN",
+ "NET_BIND_SERVICE",
+ ]
+
+ #network_mode = "host"
+ #network_mode = "vpn"
+
+ volumes = [
+ "/etc/localtime:/etc/localtime",
+ "/mnt/syncthing/mullvad:/vpn",
+
+ ]
+ devices = [
+ {
+ host_path = "/dev/net/tun"
+ container_path = "/dev/net/tun"
+ },
+ ]
+ }
+
+ env {
+ VPN_SERVICE_PROVIDER="airvpn"
+ VPN_TYPE="wireguard"
+ WIREGUARD_PRIVATE_KEY="SPpgnVCsOnz+zzorzTiOmvDF8GElgp27dSIeYAq43Vk="
+ WIREGUARD_PRESHARED_KEY="TBb2gU8pSTSG6lT4QYr7pzNWN7wZEn0yeG4VDTtuy50="
+ WIREGUARD_ADDRESSES="10.186.222.247/32"
+ SERVER_COUNTRIES="Canada"
+ SERVER_CITIES="Montreal"
+ FIREWALL_VPN_INPUT_PORTS = "53304"
+ HEALTH_TARGET_ADDRESS="1.1.1.1"
+ HEALTH_SUCCESS_WAIT_DURATION="30s"
+ HEALTH_VPN_DURATION_INITIAL="3600s"
+ HEALTH_VPN_DURATION_ADDITION="600s"
+ // HEALTH_TARGET_ADDRESS="cloudflare.com:443"
+
+
+ ##Mullvad
+ #VPNSP = "mullvad"
+ #VPN_TYPE = "wireguard"
+ #COUNTRY = "Canada"
+ #CITY = "Toronto"
+ #FIREWALL_VPN_INPUT_PORTS = "56987"
+ #WIREGUARD_PRIVATE_KEY = "iA64ImY2XNvml7s+HEHWNNGXeqpzFN0/KYGxhCsHLV8="
+ #WIREGUARD_ADDRESS = "10.64.141.217/32"
+ HTTPPROXY = "on"
+ SHADOWSOCKS_PASSWORD = "farscape5"
+ SHADOWSOCKS = "on"
+ DOT_PROVIDERS = "cloudflare,google,quad9,quadrant"
+ DOT = "off"
+ WEBUI_PORT=8080
+ }
+
+
+ resources {
+ cpu = 100 # 500 MHz
+ memory = 250 # 128MB
+ }
+ } #task ovpn
+
+ task "nicotine" {
+ driver = "docker"
+
+ config {
+ image = "ghcr.io/fletchto99/nicotine-plus-docker:latest"
+ memory_hard_limit = "1024"
+
+ network_mode = "container:slskd-vpn-${NOMAD_ALLOC_ID}"
+
+ volumes = [
+ "/mnt/Public/Downloads/news/slskd/config:/config",
+ "/mnt/Public/Downloads/news/slskd/shared:/shared",
+ "/mnt/Public/Downloads/news/slskd/downloads/:/downloads",
+ "/mnt/Public/Downloads/news/slskd/incomplete/:/incomplete",
+ ]
+ }
+ env {
+ PUID=1000
+ PGID=1000
+ TZ="Etc/UTC"
+ LISTENING_PORT="53304"
+ }
+ }
+
+
+ network {
+ // mbits = 100
+
+ port "http" {
+ static = 5000
+ to = 5000
+ }
+ port "https" {
+ static = 5001
+ to = 5001
+ }
+ port "guac" {
+ static = 6080
+ to = 6080
+ }
+ }
+ }
+}
diff --git a/nomad_backup/20251115_143630/sonarr.hcl b/nomad_backup/20251115_143630/sonarr.hcl
new file mode 100644
index 0000000..b2fa4a3
--- /dev/null
+++ b/nomad_backup/20251115_143630/sonarr.hcl
@@ -0,0 +1,158 @@
+# There can only be a single job definition per file.
+# Create a job with ID and Name 'example'
+job "sonarr" {
+ datacenters = ["dc1"]
+ type = "service"
+
+ constraint {
+ attribute = "${attr.kernel.name}"
+ value = "linux"
+ }
+ constraint {
+ attribute = "${attr.cpu.arch}"
+ operator = "regexp"
+ value = "amd64"
+ }
+
+ update {
+ stagger = "10s"
+ max_parallel = 1
+ }
+ group "sonarr" {
+ count = 1
+
+ restart {
+ attempts = 2
+ interval = "1m"
+ delay = "10s"
+ mode = "fail"
+ }
+
+ task "sonarr" {
+ // driver = "raw_exec" // config { // command = "docker" // args = ["run", // "--rm", // "--name=sonarr", // "-e", "PUID=1000", // "-e", "PGID=1000", // "-e", "TZ=EST5EDT", // "-p", "8989:8989", // "-v", "/mnt/syncthing/sonarrv3:/config", // "-v", "/mnt/Public/Downloads/tv:/tv", // "-v", "/mnt/Public/Downloads/news:/downloads", // "--cpuset-cpus","4-7", // "linuxserver/sonarr:preview"] // }
+
+ driver = "docker"
+
+ config {
+ image = "linuxserver/sonarr:develop"
+
+ ports = ["http"]
+
+ // dns_servers = ["192.168.1.1", "1.1.1.1"]
+ memory_hard_limit = "2048"
+ // cpuset_cpus = "4-7"
+
+ volumes = [
+ "/mnt/Public/Downloads/news:/downloads",
+ "/mnt/Public/Downloads/tv:/tv",
+ // "/mnt/configs/sonarr:/config",
+ "/mnt/Public/configs/sonarr_pg:/config",
+ // "local/config.xml:/config/config.xml"
+ ]
+
+ // "/mnt/gv0/sonarr:/config",
+ force_pull = false
+ }
+
+ service {
+ name = "${TASKGROUP}"
+ tags = ["sonarr", "tools"]
+ port = "http"
+
+ check {
+ type = "script"
+ name = "check_up"
+ command = "/local/healthcheck.sh"
+ interval = "60s"
+ timeout = "5s"
+
+ check_restart {
+ limit = 3
+ grace = "90s"
+ ignore_warnings = false
+ }
+ }
+ }
+ template {
+ data = <(.*)' /config/config.xml | sed -e 's/<[^>]*>//g')"
+ EOH
+
+ destination = "local/healthcheck.sh"
+ perms = "0755"
+ }
+
+ template {
+ data = "---\nkey: {{ key \"ovpn-client\" }}"
+ destination = "local/file.yml"
+ change_mode = "restart"
+ }
+ template {
+ data = <
+Info
+8989
+/sonarr
+*
+9898
+False
+1632787062fb47a9a6eb4c88e32b3ff3
+None
+develop
+True
+
+Docker
+False
+/config/restart.sh
+Sonarr
+postgres
+postgres
+5432
+master.postgres.service.dc1.consul
+
+ EOH
+
+ destination = "local/config.xml"
+ perms = "0755"
+ }
+ env {
+ // SHARE = "Public;/mount/Public;yes;no;yes;all;none;;Public"
+ # GLOBAL = "socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=65536 SO_SNDBUF=65536"
+ # PERMISSIONS = "true"
+ # WORKGROUP = "WORKGROUP"
+ TZ = "EST5EDT"
+
+ PUID = 1000
+ PGID = 1000
+ }
+
+ # We must specify the resources required for
+ # this task to ensure it runs on a machine with
+ # enough capacity.
+ resources {
+ cpu = 500 # 500 MHz
+ memory = 256 # 128MB
+ }
+
+ # Specify configuration related to log rotation
+ logs {
+ max_files = 12
+ max_file_size = 15
+ }
+
+ # Controls the timeout between signalling a task it will be killed
+ # and killing the task. If not set a default is used.
+ kill_timeout = "10s"
+ } #End main task
+
+ network {
+ // mbits = 100
+
+ port "http" {
+ static = 8989
+ to = 8989
+ }
+ }
+ }
+}
diff --git a/nomad_backup/20251115_143630/traefik.hcl b/nomad_backup/20251115_143630/traefik.hcl
new file mode 100644
index 0000000..7dc2f1d
--- /dev/null
+++ b/nomad_backup/20251115_143630/traefik.hcl
@@ -0,0 +1,218 @@
+job "traefik" {
+ datacenters = ["dc1"]
+ type = "system"
+
+ constraint {
+ attribute = "${attr.kernel.name}"
+ value = "linux"
+ }
+
+ update {
+ stagger = "10s"
+ max_parallel = 1
+ healthy_deadline = "5m"
+ }
+
+ group "traefik" {
+ count = 1
+
+ restart {
+ attempts = 6
+ interval = "1m"
+ delay = "10s"
+ mode = "delay"
+ }
+
+ task "traefik" {
+ driver = "docker"
+
+ config {
+ image = "traefik:2.9"
+ // network_mode = "host"
+
+ args = [
+ // "--api.dashboard",
+ // "--providers.consulcatalog.defaultRule=Host(`{{ .Name }}.service.dc1.consul`)",
+ // "--providers.consulcatalog.endpoint.address=${attr.unique.network.ip-address}:8500",
+ // "--providers.consulcatalog.exposedbydefault=true",
+ // "--metrics=true",
+ // "--metrics.prometheus=true",
+ // "--metrics.prometheus.entryPoint=web",
+ // "--entryPoints.web.address=:80",
+ // "--entryPoints.websecure.address=:443",
+ // "--entryPoints.openvpn.address=:1194/udp",
+ "--configFile=/local/file.yml",
+ // "--certificatesresolvers.myresolver.acme.email=stuart.stent@gmail.com",
+ // "--certificatesresolvers.myresolver.acme.storage=/acmecert/acme.json",
+ // "--certificatesresolvers.myresolver.acme.tlschallenge=true",
+ // "--certificatesresolvers.myresolver-int.acme.email=stuart.stent@gmail.com",
+ // "--certificatesresolvers.myresolver-int.acme.storage=/acmecert/acme.json",
+ // "--certificatesresolvers.myresolver-int.acme.tlschallenge=true",
+ // "--certificatesresolvers.myresolver-int.acme.dnschallenge=true",
+ // "--certificatesresolvers.myresolver-int.acme.dnschallenge.provider=duckdns",
+ "--accesslog=true",
+ // "--serversTransport.insecureSkipVerify=true",
+ ]
+ volumes = [
+ "/var/run/docker.sock:/var/run/docker.sock",
+ "/mnt/mnt/configs/letsencrypt:/acmecert/",
+ ]
+
+ dns_servers = ["192.168.1.1", "192.168.1.250"]
+ ports = ["traefik", "traefikhttps","traefikui"]
+
+ memory_hard_limit = 2048
+ }
+
+ env {
+ TZ = "EST5EDT"
+ PUID = 1000
+ PGID = 1000
+ DUCKDNS_TOKEN="e4b5ca33-1f4d-494b-b06d-6dd4600df662"
+ }
+
+ template {
+ left_delimiter = "[["
+ right_delimiter = "]]"
+
+ data = <