feat: enable n8n AI assistant AZ-PRM-1
This commit is contained in:
Generated
+54
-75
@@ -299,15 +299,16 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1784665499,
|
||||
"narHash": "sha256-9BMxlTxCCDAeoNLtb1a/st7udtTIJep+wpUzquA29VU=",
|
||||
"owner": "nix-community",
|
||||
"lastModified": 1788011267,
|
||||
"narHash": "sha256-mEq2kU+ljompTToZ44Afvm7d/rHJ5iMBl0tjZuyShJs=",
|
||||
"owner": "Mic92",
|
||||
"repo": "bun2nix",
|
||||
"rev": "0f2a1f0b6f42cebe3b149bf62d38754c5e0e9729",
|
||||
"rev": "5765b0614591f75ee8ba5596e81ae85c167d1071",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"owner": "Mic92",
|
||||
"ref": "fix-structured-attrs-hook",
|
||||
"repo": "bun2nix",
|
||||
"type": "github"
|
||||
}
|
||||
@@ -346,11 +347,11 @@
|
||||
"treefmt-nix": "treefmt-nix_3"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1785934673,
|
||||
"narHash": "sha256-U/hMY9kkcdxt497yfGuT7+ytrRmE+E15KF6Sc6VrbZo=",
|
||||
"lastModified": 1787717826,
|
||||
"narHash": "sha256-0rWCz6Wc1SqvQFJsqnUF99irDntui4jlnrToPhXKzqI=",
|
||||
"owner": "mulatta",
|
||||
"repo": "buzz.nix",
|
||||
"rev": "f4bb77a87f1ec10e5ad51cfe6d0c4fca481c0534",
|
||||
"rev": "547c646feb2f58b7866bf64d6509a37db17cd863",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -514,11 +515,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1785627969,
|
||||
"narHash": "sha256-4dtXQk/NMePegK/nWp5NSeuZKLATItOq61lpEvmXqGw=",
|
||||
"lastModified": 1788306937,
|
||||
"narHash": "sha256-lbrI1UYVpFgKSsyrU9oeF7FHfnu8nLD9ja0ou9f2rxk=",
|
||||
"owner": "hercules-ci",
|
||||
"repo": "flake-parts",
|
||||
"rev": "427bf4bd9435fdf21321c8cc628c24efc14c0f7a",
|
||||
"rev": "f16b25b8c3d2809b87925d0b76652d7821a75c68",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -665,11 +666,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1787146702,
|
||||
"narHash": "sha256-YbRcLdU/yK4gWsQg7V8WTKZHfXL33g8+wSFUX3wyevs=",
|
||||
"lastModified": 1787377438,
|
||||
"narHash": "sha256-Sxu1NLTD/Ern6hFGLlZmtKCSct3YQXZI/lls8RE1XeM=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "173b7e8d40fdc8c296a9c99854314f17a3a1704c",
|
||||
"rev": "65258d5c65a250189fde2e35f490d15e064c4c62",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -731,11 +732,11 @@
|
||||
"treefmt-nix": "treefmt-nix"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1787199456,
|
||||
"narHash": "sha256-hXW5My3dyh+AV1SnUz0zu86CnYJ9EjRgpFtLpKlBk/U=",
|
||||
"lastModified": 1788320444,
|
||||
"narHash": "sha256-t16G5E/dXM2vHehL0hxiUI+/Sg2l9dOBY948AK8bXOk=",
|
||||
"owner": "numtide",
|
||||
"repo": "llm-agents.nix",
|
||||
"rev": "24a6facb2f1a9487d8ff87c30896ac40a9e45bfa",
|
||||
"rev": "b096325ad8cc471f5b34321c01a5cb98457c7782",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -761,11 +762,11 @@
|
||||
"nur": "nur"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1786880699,
|
||||
"narHash": "sha256-3Pd0sb2Wgu0f6kaM+4G2i0RR/6vGIoDAG98kVQSMFIQ=",
|
||||
"lastModified": 1788169498,
|
||||
"narHash": "sha256-XAxkWYFpiK0zuNy6eNvomJMsC9+2WeD0HubdgpZNepE=",
|
||||
"ref": "refs/heads/master",
|
||||
"rev": "6a311045a4879fef06b9755cbdcdf5a896431450",
|
||||
"revCount": 120,
|
||||
"rev": "fb3e39f0ce25d9cd4c82c9e8e152e49fd97a3a61",
|
||||
"revCount": 124,
|
||||
"type": "git",
|
||||
"url": "ssh://gitea@code.m3ta.dev/m3tam3re/m3ta-home"
|
||||
},
|
||||
@@ -808,15 +809,14 @@
|
||||
"buzz": "buzz_2",
|
||||
"nixpkgs": "nixpkgs_7",
|
||||
"nixpkgs-master": "nixpkgs-master_2",
|
||||
"opencode": "opencode_2",
|
||||
"openspec": "openspec_2"
|
||||
"opencode": "opencode_2"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1787159856,
|
||||
"narHash": "sha256-GeoUWSYKQ64o7/HrDp6ZLnpiky6QTxtil/5Vnc79t/E=",
|
||||
"lastModified": 1788501874,
|
||||
"narHash": "sha256-9mUorjMR1w8l/UlkluQIYPPYWtEDLldn2i8SJt1CEU0=",
|
||||
"ref": "refs/heads/master",
|
||||
"rev": "2e1b87686261ad28137481e19f4c69f472c18a79",
|
||||
"revCount": 382,
|
||||
"rev": "c22cb5f3a7b1c9520a0a97819e258a7768e78001",
|
||||
"revCount": 387,
|
||||
"type": "git",
|
||||
"url": "https://code.m3ta.dev/m3tam3re/nixpkgs"
|
||||
},
|
||||
@@ -916,11 +916,11 @@
|
||||
"treefmt-nix": "treefmt-nix_4"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1787124618,
|
||||
"narHash": "sha256-aKf1k2hvYgaxP9oxDPRiv9npEJLODC9eKxk7nR69lzQ=",
|
||||
"lastModified": 1787728766,
|
||||
"narHash": "sha256-g2oZlrBU3AI2ubCiY/UyE9ALTIDueTcF//QP3vaY9IQ=",
|
||||
"owner": "nix-community",
|
||||
"repo": "nixos-anywhere",
|
||||
"rev": "ad8fa24e11eef167fd72d49fafefa3f840312d71",
|
||||
"rev": "6b77f26ec4538ced04bf1d02f374b0ec02e9c27e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -941,11 +941,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1786617555,
|
||||
"narHash": "sha256-r3brKkBWm34wltszIeoZw2VCFUEoS2nNAe3W2Zgzc9k=",
|
||||
"lastModified": 1787222173,
|
||||
"narHash": "sha256-acp6QJnWVnLvnanC59CMkiDC/i0ZhdFKiB7prru9SHw=",
|
||||
"owner": "nix-community",
|
||||
"repo": "nixos-images",
|
||||
"rev": "f01878e82602ad3d0a2e74a14440521924e57bc5",
|
||||
"rev": "e17386d9193d6d5a90f1b4b6a8a5cd2620d34b56",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -956,11 +956,11 @@
|
||||
},
|
||||
"nixos-stable": {
|
||||
"locked": {
|
||||
"lastModified": 1787042014,
|
||||
"narHash": "sha256-lgnV/xeEatfEnPZG0RrXS0fhcr63p3tsVvL1GdaVkJQ=",
|
||||
"lastModified": 1787204541,
|
||||
"narHash": "sha256-OURZPknrTjQrlNyxPdqzyqmU/81Wes1CUP/Ft1Rv/YI=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "c69ae8fb8faeb3472fd11234ba55a70ac3601f9b",
|
||||
"rev": "5880666fd9eb563038431edb35c2d0aa595884e6",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -1066,11 +1066,11 @@
|
||||
},
|
||||
"nixpkgs-unstable": {
|
||||
"locked": {
|
||||
"lastModified": 1787070829,
|
||||
"narHash": "sha256-vXNVDVtvfiQuXthP0NHPFdNvvMTkGpx0UP8oddIWbNk=",
|
||||
"lastModified": 1788179007,
|
||||
"narHash": "sha256-hn1oU2rue2SYK8dAr8+WNZWtbsz1S2W5mnHlSEuh3bo=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "0ae2bc1419c3f345984c2629e72e7a631820fa4d",
|
||||
"rev": "34ab99075ac4f7e40cf037eef32cb1c360bb85e9",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -1114,11 +1114,11 @@
|
||||
},
|
||||
"nixpkgs_2": {
|
||||
"locked": {
|
||||
"lastModified": 1787111413,
|
||||
"narHash": "sha256-sFosWtq21eHGJRnTc/hvf4M1obRgLEUMNm/IzllkHMA=",
|
||||
"lastModified": 1787964612,
|
||||
"narHash": "sha256-0N9nghg3nwzX6b6qc77EzjR9cu/Z+UR66FlfsCqiURs=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "afe3d8ac4395617bdcdac9f188ac8717a062e014",
|
||||
"rev": "e8be7818e19ada32105a8af937a6a473b38167ca",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -1226,11 +1226,11 @@
|
||||
},
|
||||
"nixpkgs_9": {
|
||||
"locked": {
|
||||
"lastModified": 1787101114,
|
||||
"narHash": "sha256-gwrPcFf/rDjHPaVflbDZ040ZDmBTRj/7+s8ZmE2SaIM=",
|
||||
"lastModified": 1788187754,
|
||||
"narHash": "sha256-bu1QxmXKmPuvBLN7bHP355OV9Qo13x9WCiRDH62CqRM=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "b18a4b905f8d028dc4476412e6d6891728695379",
|
||||
"rev": "5dfba6236110080a54247d6460bc2ff5dda939cc",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -1289,11 +1289,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1787199531,
|
||||
"narHash": "sha256-OHKo7ycmQpc4wRxy4wtmKCVl7Zhu68/7tREy5JasKPw=",
|
||||
"lastModified": 1788323849,
|
||||
"narHash": "sha256-8TUiFD/y36v6yCFLdeN7Oks1ysuHgXElHsXMKriarZA=",
|
||||
"owner": "nix-community",
|
||||
"repo": "NUR",
|
||||
"rev": "e923d9114cb211bf3858e988de54b7ec43492d8d",
|
||||
"rev": "362089b2a453b9db4be392765edcce396c6cf19d",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -1385,27 +1385,6 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"openspec_2": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"m3ta-nixpkgs",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1785371113,
|
||||
"narHash": "sha256-r3fwnb5gMTV9UXBj7bqkKpTZIWwF4AgghULOIv2Fr4c=",
|
||||
"owner": "Fission-AI",
|
||||
"repo": "OpenSpec",
|
||||
"rev": "2b3d368539132be6311e55db58899abbf5306b81",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "Fission-AI",
|
||||
"repo": "OpenSpec",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"phishboard": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
@@ -1571,11 +1550,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1785820796,
|
||||
"narHash": "sha256-sZXy8mzUMi2cOGulhoW4HWAZB6JhXOAx1x8J4auZFWk=",
|
||||
"lastModified": 1787367552,
|
||||
"narHash": "sha256-YT4Fs2k7bi+7YzuLt93EtIRgjpwHK5ZfsQEIh5dEQSk=",
|
||||
"owner": "oxalica",
|
||||
"repo": "rust-overlay",
|
||||
"rev": "b6916ba032e02122d6ed3064f40cabe937363d43",
|
||||
"rev": "fd2ebb9cc4323d0c5a1336138dab5c3c5a5d8bd9",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -1697,11 +1676,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1785360170,
|
||||
"narHash": "sha256-XE1lKgQ3eIO3E7zWryqcRsax+mYXod/5RHBn4YaR9YE=",
|
||||
"lastModified": 1786901030,
|
||||
"narHash": "sha256-WSFCsDSE5ffgD2MqzkM2CYjeFiKhRF/dJUN8uedb6YE=",
|
||||
"owner": "numtide",
|
||||
"repo": "treefmt-nix",
|
||||
"rev": "d1187f8bc71fb8aab02395869ec3f5c1920f75c0",
|
||||
"rev": "27b3b12a8e6375f28ebe122f07d230ca5459bbfa",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
||||
@@ -59,6 +59,9 @@ in {
|
||||
n8n-runner-auth-token = {
|
||||
file = ../../secrets/n8n-runner-auth-token-prm.age;
|
||||
};
|
||||
n8n-sandbox-env = {
|
||||
file = ../../secrets/n8n-sandbox-env-prm.age;
|
||||
};
|
||||
pgadmin-pw = {
|
||||
file = ../../secrets/pgadmin-pw.age;
|
||||
owner = "pgadmin";
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
./atrocore.nix
|
||||
./excalidraw.nix
|
||||
./kestra.nix
|
||||
./n8n-sandbox.nix
|
||||
./online3dviewer.nix
|
||||
./semaphore.nix
|
||||
./stirling-pdf.nix
|
||||
@@ -15,5 +16,17 @@
|
||||
if ! /run/current-system/sw/bin/podman network exists web-dev; then
|
||||
/run/current-system/sw/bin/podman network create web-dev --subnet=10.89.1.0/24 --internal
|
||||
fi
|
||||
# Routed egress network: unlike web/web-dev (isolated), netavark sets up
|
||||
# a default gateway plus NAT/masquerade for attached containers —
|
||||
# outbound via host, incl. the NetBird overlay (wt0, 100.91.0.0/16).
|
||||
if ! /run/current-system/sw/bin/podman network exists vpn-egress; then
|
||||
/run/current-system/sw/bin/podman network create vpn-egress --subnet=10.89.9.0/24
|
||||
fi
|
||||
# n8n AI-Assistant sandbox stack (n8n-sandbox.nix): routed, NOT --internal
|
||||
# — the privileged DinD runner must pull its sandbox images from ghcr.io.
|
||||
# DNS between sandbox-api/sandbox-runner-1 via netavark/aardvark.
|
||||
if ! /run/current-system/sw/bin/podman network exists n8n-sandbox; then
|
||||
/run/current-system/sw/bin/podman network create n8n-sandbox --subnet=10.89.10.0/24
|
||||
fi
|
||||
'';
|
||||
}
|
||||
|
||||
@@ -0,0 +1,90 @@
|
||||
{config, ...}: let
|
||||
sandboxApiPort = config.m3ta.ports.get "n8n-sandbox-api";
|
||||
tlsDir = "/var/lib/n8n-sandbox/tls";
|
||||
apiImage = "ghcr.io/n8n-io/n8n-sandbox-service-api:1.2.0";
|
||||
runnerImage = "ghcr.io/n8n-io/n8n-sandbox-service-runner-dind:1.2.0";
|
||||
sandboxImage = "ghcr.io/n8n-io/n8n-sandbox-service-sandbox:latest";
|
||||
in {
|
||||
virtualisation.oci-containers.containers = {
|
||||
sandbox-api = {
|
||||
image = apiImage;
|
||||
environmentFiles = [config.age.secrets.n8n-sandbox-env.path];
|
||||
environment = {
|
||||
SANDBOX_API_GRPC_TLS_CERT_FILE = "/tls/api/grpc-server.crt";
|
||||
SANDBOX_API_GRPC_TLS_KEY_FILE = "/tls/api/grpc-server.key";
|
||||
SANDBOX_API_GRPC_TLS_CLIENT_CA_FILE = "/tls/api/ca.crt";
|
||||
SANDBOX_API_RUNNER_CONTROL_GRPC_TLS_CA_FILE = "/tls/api/ca.crt";
|
||||
SANDBOX_API_RUNNER_CONTROL_GRPC_TLS_CERT_FILE = "/tls/api/control-grpc-api-client.crt";
|
||||
SANDBOX_API_RUNNER_CONTROL_GRPC_TLS_KEY_FILE = "/tls/api/control-grpc-api-client.key";
|
||||
SANDBOX_API_RUNNER_CONTROL_GRPC_TLS_SERVER_NAME = "sandbox-runner-1";
|
||||
};
|
||||
volumes = ["${tlsDir}:/tls:ro"];
|
||||
ports = ["127.0.0.1:${toString sandboxApiPort}:8080"];
|
||||
extraOptions = ["--network=n8n-sandbox"];
|
||||
};
|
||||
|
||||
sandbox-runner-1 = {
|
||||
image = runnerImage;
|
||||
environmentFiles = [config.age.secrets.n8n-sandbox-env.path];
|
||||
environment = {
|
||||
SANDBOX_RUNNER_API_GRPC_ADDR = "sandbox-api:9090";
|
||||
SANDBOX_RUNNER_HTTP_BASE_URL = "http://sandbox-runner-1:8080";
|
||||
SANDBOX_RUNNER_CONTROL_GRPC_LISTEN_ADDR = ":9091";
|
||||
SANDBOX_RUNNER_CONTROL_GRPC_ADVERTISE_ADDR = "sandbox-runner-1:9091";
|
||||
SANDBOX_RUNNER_ID = "runner-1";
|
||||
SANDBOX_RUNNER_DOCKER_SANDBOX_IMAGE = sandboxImage;
|
||||
SANDBOX_RUNNER_REGISTRATION_GRPC_CA_FILE = "/tls/runner/ca.crt";
|
||||
SANDBOX_RUNNER_REGISTRATION_GRPC_CERT_FILE = "/tls/runner/grpc-client.crt";
|
||||
SANDBOX_RUNNER_REGISTRATION_GRPC_KEY_FILE = "/tls/runner/grpc-client.key";
|
||||
SANDBOX_RUNNER_REGISTRATION_GRPC_SERVER_NAME = "sandbox-api";
|
||||
SANDBOX_RUNNER_CONTROL_GRPC_TLS_CERT_FILE = "/tls/runner/control-grpc-server.crt";
|
||||
SANDBOX_RUNNER_CONTROL_GRPC_TLS_KEY_FILE = "/tls/runner/control-grpc-server.key";
|
||||
SANDBOX_RUNNER_CONTROL_GRPC_TLS_CLIENT_CA_FILE = "/tls/runner/ca.crt";
|
||||
};
|
||||
volumes = ["${tlsDir}:/tls:ro"];
|
||||
dependsOn = ["sandbox-api"];
|
||||
extraOptions = ["--network=n8n-sandbox" "--privileged"];
|
||||
};
|
||||
};
|
||||
|
||||
systemd.services.n8n-sandbox-certs = {
|
||||
description = "n8n sandbox: mTLS certificate bootstrap";
|
||||
wantedBy = ["multi-user.target"];
|
||||
after = ["network-online.target"];
|
||||
wants = ["network-online.target"];
|
||||
serviceConfig = {
|
||||
Type = "oneshot";
|
||||
RemainAfterExit = true;
|
||||
ConditionPathExists = "!${tlsDir}/ca.crt";
|
||||
};
|
||||
path = [config.virtualisation.podman.package];
|
||||
preStart = ''
|
||||
mkdir -p ${tlsDir}
|
||||
'';
|
||||
script = ''
|
||||
podman run --rm \
|
||||
--name n8n-sandbox-certs \
|
||||
--user 0:0 \
|
||||
-e NUM_RUNNERS=1 \
|
||||
-v ${tlsDir}:/tls \
|
||||
--entrypoint sh \
|
||||
${apiImage} \
|
||||
-c 'bootstrap-mtls.sh --out-dir /tls --api-san sandbox-api --control-san-prefix sandbox-runner --world-readable && chown -R sandbox-api:sandbox-api /tls/api && chmod -R a+rX /tls'
|
||||
'';
|
||||
};
|
||||
|
||||
systemd.services."podman-sandbox-api" = {
|
||||
after = ["n8n-sandbox-certs.service"];
|
||||
requires = ["n8n-sandbox-certs.service"];
|
||||
preStart = ''
|
||||
${config.virtualisation.podman.package}/bin/podman rm -f sandbox-api 2>/dev/null || true
|
||||
'';
|
||||
};
|
||||
systemd.services."podman-sandbox-runner-1" = {
|
||||
after = ["n8n-sandbox-certs.service"];
|
||||
requires = ["n8n-sandbox-certs.service"];
|
||||
preStart = ''
|
||||
${config.virtualisation.podman.package}/bin/podman rm -f sandbox-runner-1 2>/dev/null || true
|
||||
'';
|
||||
};
|
||||
}
|
||||
@@ -7,8 +7,6 @@
|
||||
servicePort = config.m3ta.ports.get serviceName;
|
||||
in {
|
||||
virtualisation.oci-containers.containers."${serviceName}" = {
|
||||
# Image contains the Semaphore server plus ansible, terraform,
|
||||
# opentofu and terragrunt runners.
|
||||
image = "docker.io/semaphoreui/semaphore:latest";
|
||||
environment = {
|
||||
SEMAPHORE_DB_DIALECT = "postgres";
|
||||
@@ -16,26 +14,24 @@ in {
|
||||
SEMAPHORE_DB_PORT = "5432";
|
||||
SEMAPHORE_PLAYBOOK_PATH = "/tmp/semaphore/";
|
||||
};
|
||||
# SEMAPHORE_DB (name), SEMAPHORE_DB_USER, SEMAPHORE_DB_PASS and the
|
||||
# admin bootstrap vars (SEMAPHORE_ADMIN*) come from the agenix secret
|
||||
# (podman env-file).
|
||||
environmentFiles = [config.age.secrets.semaphore-env.path];
|
||||
ports = ["127.0.0.1:${toString servicePort}:3000"];
|
||||
volumes = [
|
||||
"semaphore_data:/var/lib/semaphore"
|
||||
];
|
||||
# Public DNS: the corporate DNS behind aardvark answers AAAA queries for
|
||||
# galaxy.ansible.com but not A queries — with no IPv6 route in the web
|
||||
# network ansible-galaxy downloads failed (EAI_AGAIN / empty responses).
|
||||
# Bypass with public resolvers; git.az-gruppe.com is publicly resolvable,
|
||||
# targets connect by IP (same pattern as librechat/homarr on AZ-CLD-1).
|
||||
extraOptions = ["--network=web" "--ip=10.89.0.17" "--add-host=postgres:10.89.0.1" "--dns=8.8.8.8" "--dns=8.8.4.4"];
|
||||
extraOptions = [
|
||||
"--network=web:ip=10.89.0.17"
|
||||
"--network=vpn-egress"
|
||||
"--add-host=postgres:10.89.0.1"
|
||||
"--dns=8.8.8.8"
|
||||
"--dns=8.8.4.4"
|
||||
];
|
||||
};
|
||||
|
||||
# Idempotent provisioning of the semaphore role/database on the host
|
||||
# PostgreSQL 17 (same pattern as atrocore-db-init: initialScript cannot
|
||||
# be used, the cluster is already initialized and the password must
|
||||
# never land in the Nix store).
|
||||
networking.firewall.extraForwardRules = ''
|
||||
iifname "vpn-egress" oifname "wt0" accept
|
||||
'';
|
||||
|
||||
systemd.services.semaphore-db-init = {
|
||||
description = "Provision semaphore role/database from agenix secret";
|
||||
after = ["postgresql.service"];
|
||||
@@ -49,8 +45,6 @@ in {
|
||||
RemainAfterExit = true;
|
||||
};
|
||||
path = [config.services.postgresql.package];
|
||||
# Env-file format: plain KEY=value lines (no quotes), same file the
|
||||
# container consumes.
|
||||
script = ''
|
||||
set -euo pipefail
|
||||
ENV_FILE="${config.age.secrets.semaphore-env.path}"
|
||||
|
||||
@@ -1,25 +1,46 @@
|
||||
{config, ...}: let
|
||||
serviceName = "n8n";
|
||||
servicePort = config.m3ta.ports.get serviceName;
|
||||
sandboxApiPort = config.m3ta.ports.get "n8n-sandbox-api";
|
||||
sambaMounts = [
|
||||
"/mnt/AutoAblage"
|
||||
"/mnt/SkriptHelper"
|
||||
"/mnt/DMS-ALT-INBOX"
|
||||
"/mnt/DMS-INBOX"
|
||||
];
|
||||
in {
|
||||
services.n8n = {
|
||||
enable = true;
|
||||
environment = {
|
||||
WEBHOOK_URL = "https://wf.l.az-gruppe.com";
|
||||
NODES_EXCLUDE = "[]";
|
||||
N8N_RESTRICT_FILE_ACCESS_TO = "/mnt/DMS-INBOX;/mnt/DMS-ALT-INBOX";
|
||||
N8N_RESTRICT_FILE_ACCESS_TO = builtins.concatStringsSep ";" sambaMounts;
|
||||
N8N_RUNNERS_ENABLED = true;
|
||||
N8N_NATIVE_PYTHON_RUNNER = true;
|
||||
N8N_RUNNERS_AUTH_TOKEN_FILE = config.age.secrets.n8n-runner-auth-token.path;
|
||||
N8N_LOG_OUTPUT = "json";
|
||||
N8N_LOG_LEVEL = "info";
|
||||
N8N_ENABLED_MODULES = "instance-ai";
|
||||
N8N_INSTANCE_AI_SANDBOX_ENABLED = true;
|
||||
N8N_INSTANCE_AI_SANDBOX_PROVIDER = "n8n-sandbox";
|
||||
N8N_INSTANCE_AI_SANDBOX_IMAGE = "ghcr.io/n8n-io/n8n-sandbox-service-sandbox:latest";
|
||||
N8N_INSTANCE_AI_SANDBOX_API_URL = "http://127.0.0.1:${toString sandboxApiPort}";
|
||||
N8N_SANDBOX_SERVICE_URL = "http://127.0.0.1:${toString sandboxApiPort}";
|
||||
};
|
||||
taskRunners.enable = true;
|
||||
};
|
||||
|
||||
systemd.services.n8n.serviceConfig = {
|
||||
EnvironmentFile = ["${config.age.secrets.n8n-env.path}"];
|
||||
systemd.services.n8n = {
|
||||
serviceConfig = {
|
||||
EnvironmentFile = ["${config.age.secrets.n8n-env.path}" "${config.age.secrets.n8n-sandbox-env.path}"];
|
||||
ReadWritePaths = sambaMounts;
|
||||
};
|
||||
wants = ["podman-sandbox-api.service"];
|
||||
after = ["podman-sandbox-api.service"];
|
||||
};
|
||||
|
||||
systemd.services.n8n-task-runner.serviceConfig.ReadWritePaths = sambaMounts;
|
||||
|
||||
# Traefik configuration specific to n8n
|
||||
services.traefik.dynamicConfigOptions.http = {
|
||||
services.${serviceName}.loadBalancer.servers = [
|
||||
|
||||
@@ -8,6 +8,15 @@
|
||||
staticPort = config.m3ta.ports.get "netbox-static";
|
||||
hostName = "nb.l.az-gruppe.com";
|
||||
staticRoot = "${config.services.netbox.dataDir}/static";
|
||||
# nixpkgs >= 25.11: Plugin-Pakete liegen im passthru-Set netbox.plugins
|
||||
# (python3Packages.netbox-* sind Throw-Stubs); pluginName = NetBox-Modulname
|
||||
netboxPlugins = with pkgs.unstable.netbox.plugins; [
|
||||
netbox-dns
|
||||
netbox-qrcode
|
||||
netbox-routing
|
||||
netbox-topology-views
|
||||
netbox-floorplan-plugin
|
||||
];
|
||||
in {
|
||||
services.netbox = {
|
||||
enable = true;
|
||||
@@ -22,13 +31,45 @@ in {
|
||||
SECURE_SSL_REDIRECT = true;
|
||||
SESSION_COOKIE_SECURE = true;
|
||||
CSRF_COOKIE_SECURE = true;
|
||||
# NetBox aktiviert Plugins erst über PLUGINS in configuration.py —
|
||||
# der NixOS-NetBox-Modul trägt sie NICHT automatisch ein.
|
||||
PLUGINS = map (p: p.pluginName) netboxPlugins;
|
||||
};
|
||||
|
||||
# installiert die Pakete in NetBox' Python-Environment (extraBuildInputs)
|
||||
plugins = _: netboxPlugins;
|
||||
extraConfig = ''
|
||||
SECURE_PROXY_SSL_HEADER = ("HTTP_X_FORWARDED_PROTO", "https")
|
||||
'';
|
||||
};
|
||||
|
||||
# Der Upgrade-Guard im NetBox-Modul (preStart) vergleicht /var/lib/netbox/version
|
||||
# nur mit dem BASISPAKET (services.netbox.package). Reine Config-/Plugin-
|
||||
# Änderungen bei gleicher NetBox-Version überspringen damit migrate +
|
||||
# collectstatic → Plugin-Tabellen fehlen ("database migration missing").
|
||||
# Deshalb Migrationen/Statics hier VOR jedem netbox.service-Start ausführen
|
||||
# (idempotent, entspricht dem offiziellen NetBox-Upgrade-Pfad):
|
||||
systemd.services.netbox = {
|
||||
wants = ["netbox-migrate.service"];
|
||||
after = ["netbox-migrate.service"];
|
||||
};
|
||||
|
||||
systemd.services.netbox-migrate = {
|
||||
description = "NetBox: DB-Migrationen & Statics (v. a. Plugins)";
|
||||
wants = ["network-online.target"];
|
||||
after = ["network-online.target" "postgresql.service" "redis-netbox.service"];
|
||||
serviceConfig = {
|
||||
Type = "oneshot";
|
||||
User = "netbox";
|
||||
Group = "netbox";
|
||||
StateDirectory = "netbox";
|
||||
TimeoutStartSec = "10min";
|
||||
};
|
||||
script = ''
|
||||
/run/current-system/sw/bin/netbox-manage migrate --no-input
|
||||
/run/current-system/sw/bin/netbox-manage collectstatic --no-input
|
||||
'';
|
||||
};
|
||||
|
||||
services.nginx = {
|
||||
enable = true;
|
||||
virtualHosts.netbox-static = {
|
||||
|
||||
@@ -37,6 +37,7 @@
|
||||
litellm = 4000;
|
||||
|
||||
n8n = 5678;
|
||||
n8n-sandbox-api = 5082;
|
||||
netbox = 8001;
|
||||
netbox-static = 8002;
|
||||
kestra = 5080;
|
||||
|
||||
@@ -35,6 +35,7 @@ in {
|
||||
"secrets/n8n-db.age".publicKeys = systems ++ users;
|
||||
"secrets/n8n-runner-auth-token-cld.age".publicKeys = systems ++ users;
|
||||
"secrets/n8n-runner-auth-token-prm.age".publicKeys = systems ++ users;
|
||||
"secrets/n8n-sandbox-env-prm.age".publicKeys = [AZ-PRM-1] ++ users;
|
||||
"secrets/netbox-secret-key.age".publicKeys = systems ++ users;
|
||||
"secrets/netbox-api-token-pepper.age".publicKeys = systems ++ users;
|
||||
"secrets/cld-var-backup-sync-ssh-key.age".publicKeys = [AZ-CLD-1] ++ users;
|
||||
|
||||
+31
-30
@@ -1,32 +1,33 @@
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFpoVnNlZyBOMjhu
|
||||
Qis2Zm9sMnJBSG5WRmUrbHlibkNJU29FSnBoVDg0QWZYU2dCbW5BCng2Ukc5amJp
|
||||
T0V2TEFDSnJWK21kdDQ3WWJNSmhVT000ZUdRNmY1MUNnTUUKLT4gc3NoLWVkMjU1
|
||||
MTkgU3JIYXFBIGNxU1BMVUEvTStTUE91THBPTzAzMEtMWFJGUnU5VVNhUU5neFhs
|
||||
dC9vVTQKZkJaYWJubEh4M0FZK09WelRJUGdLNEcrK2hrYjRabi9zTzgwU1N2dm1y
|
||||
ZwotPiBzc2gtZWQyNTUxOSBsR3FWWmcgQXlkbDdZMU96VFRNc1cwOUZUNWFEY0ln
|
||||
cW5TRkxEYjFnZTlqcTdpaFFIVQpMTUhNLzhKdUREdGxQQmJKanE2UHR2RElES294
|
||||
UkNoWG0xYk9XSHVhdFh3Ci0+IHNzaC1lZDI1NTE5IENTTXloZyBnaklaS0FtVTNS
|
||||
WlRNMllEVHhVbHJVdDVmb0xhUG9kbjZFeDF4NE5mWkdvCi9pSkIrQ29SWUdMUEkz
|
||||
RGxzSnJzNU9XaXNlR1kvaC9GZjZxdjhpbUNheFUKLT4gJW5aVS1ncmVhc2UgKi4g
|
||||
Jn1hYjYscVsgfmMuKWx4V3AgRCZ1VkE/dVwKNE85RW5MdThyN29hY3pGUFFPdzVo
|
||||
T2w5N0ZVSktodDhYeUlNY3U1cVZ2NWEzN3FacFc0Z2pxekUwMVNPZlRubgp3RXlv
|
||||
U2xYeFUydwotLS0gMFpFVDhuWGJUc1lGcFRTeGw3QU1Dbk5JcHkyWGhJU2R5bTFt
|
||||
ZkJnQnlaOAr/tWaezrRSqKKofd2Si/8xBW8PfwGOcR7UDG3JBAXt3Fg0tQmGGJKv
|
||||
32ZN2uoV2Vdc6KegRzCPdE2Qu/DB2eyfdg4vQTON7RleiZNahqZU8jVijgJpchWD
|
||||
Pmi/sUBCIAjv3X0xAQyC/FBkTuX+18QiA/Si08NcFZ7OEqxBGn/zqvN4h7o9JM0U
|
||||
81GLh2rIsbOLmy5bXzEIFLjiK6foXlYCjcaHcT0pXTQ5r3TEMdSxq78sFs6RF9Eu
|
||||
x3/cMw50tD8HbJE0CD7ybWR8z099zweGkjDxYvaNFHu00JdY6Hb1FCrBuSyvwqzH
|
||||
0ANoyiNCZdMhy1riggpjy0BdYZKKWRxmbz22kL4ZpP6ztZlFdgjStqYGRMdc+3Mo
|
||||
10P4ebgs9RU1G0R30lHgoyA3oQtYl+t8Gf8R6QihoCuhHZpmohIG85Rsl+kxjwz0
|
||||
pttBjD4CCRKv3iOXAkX3tC2z1FDipR597Zn24IM9/DpEFrvnloFRhZESJofFgIe7
|
||||
7+EpjRlZTEo31DbT2VJhPCgJr+poby+wy/VfAAHdaWucGBPtfUvIVYteyqA7BPSo
|
||||
dVUckv3LEBiFO/YPviz95ktdH0ztPfn9/hfRfD2mZw+RD/oDIV5ABGtqPJ/icBlj
|
||||
AcE7nSRRUEk4jjPWMxNcX/sGzVaFeBZR2jppmUfPOoQl6k5QfoS198uT0vzCCj9A
|
||||
9xjmeot//7iuV7Va9Tzg8mgoAa3kdZbrmbibQUo0wtc6fbH2wDGm9pgFHCoKpGqv
|
||||
B8+8FiZ8G3lA5AFzKRrpN/z8he5abp34hz98DlHCvFF0jfq7JF7bYeCcdMzpTiDl
|
||||
HJWSK9YkD/1i2TtJw1rO4eN6AqtnaZ7eWFxTIG8v3Oia5RLpJLRFur8dy/sG9ayc
|
||||
Oj+JFPc8LkD2ium6SvpEhXjPLuOdEZ4WFf1Q73zyd/VCfuligDbBhJCtpgliakga
|
||||
HXkZqG2QeUQOPC0OaFNxc5Ras31+V9XP2xB/BhfRTwd0pmqw6k4skHeNbGubBFEB
|
||||
hirD25EGY1ZSLtSaLkX0
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFpoVnNlZyBvUDM3
|
||||
WHF0ZGc1NVpFU1ZXMUloSWRydi9ieVBxcmtHdC80VFJzWGV6dldrClNHTUN6a3RR
|
||||
WURocXVSK1UvamdTNmVpeDRBT0hzRHN5QUE5TkNrMzRUV1UKLT4gc3NoLWVkMjU1
|
||||
MTkgU3JIYXFBIE43b3hZQ0c3M2VPRjRWSERnellJMUxIRHBkSnpSRlRJTmZ2cFgx
|
||||
ZVI5d3cKdmVjOWVmamlYeVFtemx3cWdRMG1xem1nSEZuNDY3dkdsaUpGbW43UEVN
|
||||
dwotPiBzc2gtZWQyNTUxOSBsR3FWWmcgQjMzUjEzZzJsRlZhTEdGam1VQXE0WjUy
|
||||
OThmbTcrcjU4L2FyTlg3anh3cwp1OHFFdWt0MzVXUHkwd0JJcUVLWUF0K1ZXREht
|
||||
TFlnOThHU1NuZzVoOTBvCi0+IHNzaC1lZDI1NTE5IENTTXloZyArRzZ6M2xEV2Ez
|
||||
QThOOTBkemJXdjhlcWhxSTFtVDJwQmZkaTU0TlB1aldvCmJ5cjBEWi9PeEt3UTly
|
||||
V2xVWk5GSnpEZW5NWmpEQzYzT1V0eGdKNjFuVmMKLT4gKSdONy1XbUEtZ3JlYXNl
|
||||
IGwgd1taYlklXSArRnQrOApoWC8rCi0tLSBiRmhVWUI2cjl4SFV1QjNtN3lHWW82
|
||||
M3NlT21Ea2t5TGR3anVVeUxtU01RCpjYpbXa9vvai30H8ASvafTr8b5vu0odHdHE
|
||||
bTL4SjaUg3y82XE27VCfJpDlT3jsbA67gnhYQODfuR9KL333CmjVOlWnI08D4+qE
|
||||
gS+aLNVPnZ8Pnl9HI7W16PUrBKuNZeusqSnZKGCtmKXsUBvijnvkMTa0bp1C9Rr9
|
||||
XXPcVrNpDy9cJj+3XQ3cDvZK3Bmpb32jcPvgDY58jwocFc1QbpDb6sT6QQEaWoYV
|
||||
PoNn87phRmfLAvdAmgz9Ykn+/QcVJ3lKkkbKWmI+O64cFUtEiLnezDE0mB2/WLgR
|
||||
4Y3bCbLnNvelhRwHcbdtgbXcp1SPEOEoHwso8TMLy4DMsbGxUYVACIJGWau7E+ev
|
||||
4fnMf+jj5IiZOUUFMHIHXRxQ69PWnFl/IIAeTBbrQAvyUerjl9AMFEykmY9HAxww
|
||||
cBTofyB0kl9MGEAajDzaR5I8bzog0Sl92rRiAWCDvB3aHCaAYlSzFFVsgbnDcuR3
|
||||
eLyoWo5SO45Tn4qpXEhyt96Tw5Y42Te7xe1SjJ3Rc/Zk/VpdcZg74JPU+fxn+9yj
|
||||
AqpzaW8Z5jylJBHD/zb7uye0gUusP09aNKpNVwHw+6hQXd2f6EuxeehKPP5N2qnP
|
||||
FIky5O0eIWm7sTslUwlIJPSawPGtJVJXtqJ1pGOU7Qv6OHJhC4khLbTfwsel3cVD
|
||||
tF1xYjwPnoYSqRL6o//F0v8Rc6f7U9N14F7bic7/BAN/iYvvNgtI57PLpfYOX821
|
||||
cwkpq8ejImNxmt/G13rtAa3CTyt+N40Zn8HsTOTLKByrNrd2DBJ2uEgcELXf3bTm
|
||||
pfsqJJJqFu55NTkLnonUo1wu3cfC4/1DHGaRqPJAdHLKPTCFzC+7veLUSXwI6Qg/
|
||||
+ldxhSfaPFMS384rfk0n5mcCkIG2GHT/CnBjsaGkw/pZmCvHeafWdsVUE63DYb8v
|
||||
9rcyAmcSVlS34KqQ+TyvvNxm0HsYwICjwpemrat8xSurR/HoIVhn4J288TNkRXZW
|
||||
CRpNm9mVICWedEDjWDvqiLWXYnmH4jTkFl9OlKpjMs6JJrageKjL3XUxzMOxRi+Y
|
||||
A7qMfCADI3DgXh4txUXukqKmChltTmQY767H7yxFLwpz9HOpr7rKg/FHoN1qJWAP
|
||||
+OFR0WVV3Tywg3FzqJOaMzsjHH/QAsvQ0LP4DP2QfuZJpGLuLWCI9j7NvXzdWBgx
|
||||
0EBPZLI8Kr1MzzUk4hDpuZzi4g==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
|
||||
@@ -1,70 +1,70 @@
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFpoVnNlZyBrem5H
|
||||
MnBHMlJnYnF5bXkwbkRLUDdrVmlWbnR2ZFZqemJ5R0F2ZW9tSkJnCkZqR2hEUHhs
|
||||
TXlDZStkQUZFSTlmTzByYy9vMS94YWZUNFEzaFRMeDk4Z2MKLT4gc3NoLWVkMjU1
|
||||
MTkgU3JIYXFBIGJmZmkrREFBY1UveVlSWGc3aXFmWHBkbzMxWUg4enpMMXdKb1c0
|
||||
dlhKa3cKekw1UklpRksxVTVWZUxVRXF4d0VaZi9JLzZJTGYxRDNibWdqenY5WWhW
|
||||
RQotPiBzc2gtZWQyNTUxOSBsR3FWWmcgS24rVDFjYTI2bWxUWFg2b3ltT0JUVCtG
|
||||
MXYrTDBhM2I3OFRkVVp3d3kxQQpBaFBEcGdOT013dHRidUFjcVhqN0M5bEtkMzFR
|
||||
Z1dlNDV3cUpaR2NsbmJvCi0+IHNzaC1lZDI1NTE5IENTTXloZyAvaDE1RDNmblA2
|
||||
M2o3M0o4MTAxakpVR3JwUWV4V00rbFZLVDVHYWtxU3hvClRUeUkrdUUrT0dxUzFk
|
||||
czVwS2tYUjdTWE9URVlQdEkrRUNELzJlWDJJOUEKLT4gfS1ncmVhc2UgSnJxZyNJ
|
||||
UyBUdyBtS1A2RT4gJ1JsPztMCgotLS0gMDB0bDhWeUtZSzBlNXE4ZjRzVWxwQlVW
|
||||
V201TWh2M1IyMjdqaVZRRlRKawoD+/nwNWeHHqKEggiWOCmN48bEUYR62hxg35M7
|
||||
OOlDcZJ2GtHiwlJewfGTgNcazqCrQ0f4BDw9bcEr9ys1Qo7On4qMB9/0eodNzkR2
|
||||
P0knsGfzwfHdGfU96RzQhtPott20PXdTRmlvwzfVsB50uhx0nsU7UjVGgOpUSxkd
|
||||
bVHgDREp6Fgu7SJ5SPFC5PvwxNvoGkQxtRuRNstkl/HAS63B8So1Ki+WX5/+LovZ
|
||||
f9LbgyXeOXSzBKtk52n93YQqWS5VBPUuvbKFst2k/uvhcVJtQDWyXO7uCguzUtGC
|
||||
aplzKH5D4xfQbdYLUgmS6LYHrL7G5eCu5SJ6hQqsPB+jUcElTddNcLTwGB3MYdzg
|
||||
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
|
||||
SnVpclcwdS9XaENkUTBIVEpKOGxZTnV5bnlQVFZnRFlEd2EyeldzCno1K29sWXJq
|
||||
cjI2T09BenplbjNybGpzNU53MW0zOFppVXUyM05pVEsyVzAKLT4gc3NoLWVkMjU1
|
||||
MTkgU3JIYXFBIDNKbWlOSGlSbk0vL0xNeGM4clpDelBIeGlpak53LzJVUG5hT3Nm
|
||||
MXg2VjgKMkN3N2dOZmhtdlhPSGRXekM4d2hGdlFsV1VvMEVyRVVNZDFXdHNEaDBQ
|
||||
VQotPiBzc2gtZWQyNTUxOSBsR3FWWmcgNFlrU2s0N0puYlJGb21VZlBrRGM4a1lk
|
||||
SGVaNGFTbFhYd3F3c1QzeExHUQpqQlBZNmhSdy9BYzNveXlvNUJSVmc5TXVrYkxr
|
||||
QVo3OUpPbWxPd3U4V0hRCi0+IHNzaC1lZDI1NTE5IENTTXloZyB2NmNEWkVsMThW
|
||||
TnUyVU80VTBkS3dMU3lEU1Q5eHlnSEZlQjdJdDlOMW00CnVKVTVZSnhLTFR6Q3Fw
|
||||
b2Z4U2lQTmJMaS84SURsNEVDcVUwdkk2WWhvbjAKLT4gLGU8J15eLWdyZWFzZSBM
|
||||
S1hRICR3LzRDTiBMMntrJCAzCmgwc3FURW9ZQXhjCi0tLSBmejl3M3FRY2tuTGll
|
||||
YVE5NGlCMmtXbDA5VWhPSXp1ZlNuYTJiNXFVVDVnCh+etC42g0H2mTzu4fGay5bQ
|
||||
OftsOQ5N8KNzx3JUVvuC0rzaBq+3EIJf7X+NwVVshL2ibK6vQzsNiQn5pXZRdzSz
|
||||
6d+0GQnosuhBrDVwH8LNGCNJjZ5OynDFs59p5QWQ9PZbY53hfK445EOoMj6g0kDv
|
||||
5lBOsNk999mjt4XrB4veI0X4O2t4Z8UqKc7M7jUxkw7VeC3gvA+NKlLz9d8uMmxZ
|
||||
KX4X8HXKFYjkryVyZ0N1dMz6NTOWghGE02adPcodX84YpU4k1JMG//FI10/3vFCB
|
||||
o8MbKl+TUZIbSKNtq+orjKe1WzXwOByfC2RN1NJY/aCXazn3bi4kbCfoRkIi2O/O
|
||||
RMB/wWUF+5jFkgjriozIce1EU994BGYM+rPALNjOkIr63m4SzoergIXIXSjUPFKo
|
||||
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
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
|
||||
+549
-550
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Reference in New Issue
Block a user