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 \n \n \n \n {{range services}}\n {{range $i, $s :=service .Name}}\n {{ if eq $i 0 }}\n\n\n \n \n \n \n {{end}}\n {{end}}\n {{end}}\n
Service NameTraefikDirect
{{.Name}}{{.Name}}.service.dc1.consul{{ if eq .Name \"unifi\" }}https{{else}}http{{end}}://{{.Name}}.service.dc1.consul:{{.Port}}
\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 \n \n \n \n {{range services}}\n {{range $i, $s :=service .Name}}\n {{ if eq $i 0 }}\n\n\n \n \n \n \n {{end}}\n {{end}}\n {{end}}\n
Service NameTraefikDirect
{{.Name}}{{.Name}}.service.dc1.consul{{ if eq .Name \"unifi\" }}https{{else}}http{{end}}://{{.Name}}.service.dc1.consul:{{.Port}}
\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

+ + + + + + + {{range services}} + {{range $i, $s :=service .Name}} + {{ if eq $i 0 }} + + + + + + + {{end}} + {{end}} + {{end}} +
Service NameTraefikDirect
{{.Name}}{{.Name}}.service.dc1.consul{{ if eq .Name "unifi" }}https{{else}}http{{end}}://{{.Name}}.service.dc1.consul:{{.Port}}
+

+ 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

+ + + + + + + {{range services}} + {{range $i, $s :=service .Name}} + {{ if eq $i 0 }} + + + + + + + {{end}} + {{end}} + {{end}} +
Service NameTraefikDirect
{{.Name}}{{.Name}}.service.dc1.consul{{ if eq .Name "unifi" }}https{{else}}http{{end}}://{{.Name}}.service.dc1.consul:{{.Port}}
+

+ 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

+ + + + + + + {{range services}} + {{range $i, $s :=service .Name}} + {{ if eq $i 0 }} + + + + + + + {{end}} + {{end}} + {{end}} +
Service NameTraefikDirect
{{.Name}}{{.Name}}.service.dc1.consul{{ if eq .Name "unifi" }}https{{else}}http{{end}}://{{.Name}}.service.dc1.consul:{{.Port}}
+

+ 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 = <