immich temporarily moved to photo2.aggtaa.com. photo-stats removed

This commit is contained in:
azykov@mail.ru
2026-08-23 10:08:33 +03:00
parent c186e2b765
commit 1fdae9c55f
19 changed files with 96 additions and 448 deletions
File diff suppressed because one or more lines are too long
+10 -10
View File
@@ -4,21 +4,21 @@ metadata:
name: davical-secrets
namespace: pim
stringData:
PGSQL_ROOT_PASS: ENC[AES256_GCM,data:u/YPjF4wIWFN9bxQztfRrwxzZ6jEKEhX1Bem2w5AC4FSOZKUPeD05ikeqL+Xg6X1,iv:aoG21ZdaFefb2fL9nex1npx5JHRf9T7ketCLGpbOhhc=,tag:ElVPbbHnGwfHWwtCoTZCaw==,type:str]
PASSDAVDB: ENC[AES256_GCM,data:3AAXLiLlwNQDWPIEBhi++1xRhwh9PtOpIHJDkV/+XKoGEA6/rGfa8XYoCwNXrUhn,iv:DdIF5kKU3xn71xnZWxPy3KNondZ6/gNmrGZOi5mSfNQ=,tag:WbbkwifIsl8PngZz8887VQ==,type:str]
ADMINDAVICALPASS: ENC[AES256_GCM,data:xbkxusAKbRQSLS/EWPn6qvSXijew9JcmjRuJH98a1E0=,iv:BHsvdRuROl7rfME5eFx4dN0fGwFocbXFP9DpUCdZlF0=,tag:yWiSH7IuADIpynWIrnHJhw==,type:str]
PGSQL_ROOT_PASS: ENC[AES256_GCM,data:x4czMJC0HNEAcZkv6CAPGmwqXgGBBjyljhydFrZXCMfvPSYoJqO9HdduJaMEwCBX,iv:h2FyhTzC0i3wuBdS838CdoBbA8GinLM0ny8MZaPkw64=,tag:YU+fCHzz2Z1KgZJFGB8MYA==,type:str]
PASSDAVDB: ENC[AES256_GCM,data:8+atC6xTaq2eVTE+JhBURorzBW35w/wlBQoRoXL/6w89nu8t2g/83irhNk0CYnyh,iv:BkhDATp8XCqZHA5lFtZ8iG227/MOz9hQLTSZyP618TI=,tag:V35WV5obRNEAoO/5Kq4MOw==,type:str]
ADMINDAVICALPASS: ENC[AES256_GCM,data:25WVJd/0IqSoY15d1xv6Wr6DmOraNjRL+5Ifvx8DUm4=,iv:8Pj0LcPYOKzt96fRKidBJ/wh/eHa+JtlYGAScAfLFfY=,tag:ONT0CKzZVW2pv2UdQtGZKQ==,type:str]
sops:
age:
- recipient: age1yx8mey02c0mu6te9hwxwdqp5n4enjz35e8thchsmvhqw7xsrzy0syg367g
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBnUmYxNHd2clBuTjNDblZm
N2dQOU9OZmFpejJzbFZPU25FVGltWWdaeVNZCkwyK1l0bnVVZm40bUFIcm0vdGp2
emtBYVEwNjdPV1k2eTRnM3NxZ1gvb1UKLS0tIEhJbUtMNHlpdWNzdzYvQ0VFZGFn
d241b1IrSmk2YkhkaGRJSVZDOTMwR2cKleR6VDoBxi3YY9KLGNopSkB0qr4ztyN6
3JEAAkTdcwRnggh4LNOj/7HLGqFVztKhgWyLY0RK/MjhrH9k9GW1Sw==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB3VHRCYWMzQW44T3BmK1dC
bHVLTmNFcE5rdEtJUmZYK2U0THczYm9TTFRzCk9jSHRmRGRhcjN2ckorbXFTUG1O
TlJJZ0ZmZ3BEWjkxdXlzditaRXhWL1EKLS0tIHVSWVZ3eG96WmhzY3RYNFVEbFFt
Y3JLSUljUW1TNE1zaVBLTEt1Q2phckUKE4ABkhwjT7g78dyuM0xGGsg9GuIT2E+X
x7Dj5lJVjWeF/06IhLUUI5BB1U3Av8O317Nc0yhvf1EjfVQyjmviSA==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2026-08-26T10:29:07Z"
mac: ENC[AES256_GCM,data:xeb/F9tEG6f9uaES6FnjXbocFWYz3D0Uv1lJovCbd90YhiZ9rH17x0dMU7Rz3fw/IbcHx+ZZdZjmmHDImJ4/3ea/T+z2QHGCj5Xupo33Q4TVGELeQFjsL3pX80wzfvxr7XCF1PP6nCEm3eSh9XtM6HGtQRUYu/Nwf/vIPWHfFpA=,iv:V3OuMwV+GXHeWWZCdHgiGcjjioOKB6SdN7ZohR6Czdg=,tag:B7X18ywmGfEgURcXO3zCig==,type:str]
lastmodified: "2026-08-26T10:29:16Z"
mac: ENC[AES256_GCM,data:wNDzlgLJian8nvl1Z2caPigTBtdTIAskz6o4HC2W+r/TzJUYTYHOTJYVGhuX4IN/WVAkuzOaawPA2FpIuvm3eFXkKNw58Iev8wXu051C4DoGGyD1fhPhS1dW3R11q5c+v4qeC9kQoBCDwQeqz9unREn67OkPogoV3oLvED7CfKw=,iv:WbDAylhMVB/4I/v6x4QMlpYyoF8KOSWCYCGktSrQPZg=,tag:OWLaLQfOo9GS2aMLuA6ybA==,type:str]
encrypted_regex: ^(data|stringData)$
version: 3.11.0
@@ -135,7 +135,7 @@ spec:
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
hosts:
- host: photo.aggtaa.com
- host: photo2.aggtaa.com
paths:
- path: /
pathType: Prefix
@@ -145,7 +145,7 @@ spec:
tls:
- secretName: immich-tls
hosts:
- photo.aggtaa.com
- photo2.aggtaa.com
persistence:
# Immich's "library" folder, mergerfs-merged from two disks: recent
+8 -8
View File
@@ -4,19 +4,19 @@ metadata:
name: immich-secrets
namespace: photo
stringData:
DB_PASSWORD: ENC[AES256_GCM,data:WADkONhWfLLFqA3s6N8E3NyDbHr/Yax42xmTfov39bk=,iv:5W9nnHFT6C2kiHIylb+shQCsXHWmlpxMXItiz5HM1t4=,tag:B3/xbKPK+T0U1ZEJZmj8Aw==,type:str]
DB_PASSWORD: ENC[AES256_GCM,data:Qr732VbcvSpt6Kppf03lKR3i9hEHrWfJRtxktnzHb9w=,iv:nHTYCp/7CLghLk2ymm5BcmX089GP/pWpUYQjxYlmSiQ=,tag:VB8LPCoP6muzZ0jscB639g==,type:str]
sops:
age:
- recipient: age1wmm8qrqnjzvd5nkraed6ylrsxlpn3ru7d7zettdudj7y9sg9dd2su0u3mr
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBYRDZ3Y1lHdTZCeDN4ZFhV
KzJMYjRGNVdOZGc1Nzg3NWdmR1g3eGlKYUdvClZyLzVZcHVPSmdDWGlKcEZ0RU45
dzlWUFFNUVFseDQxR3BneWhvUnQySk0KLS0tIEh6TFJKYWdqVWdnSEFLSlE5U3kw
aDRUaWRLaDd4dDh5K3VtMG1PQmYzdlkK0ccZQukupy3OQ/vz+7RY2sXIjOTcrnE5
sMhe/VpXnpVKJihvXx+FQ1ntxzQxyKpqs9oHKjZaE8gt36te2o/Qzg==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBGZXo0dDZaSFdmT2dpamY2
WmlWRkR0UzhZY3ljS2N6KzZ3NFpoZGdWM1JRCml4bmUvditJVUJYa1M3bi9TZUsw
UXJqWU5sNWU4REVGRXdhQUZQWXFOODgKLS0tIFlwQVRxOUNWZkZEN0FsTEY0bzRW
VnducmVtcUZnK2Nka1hnOFFDR3lXSUEKXIbIt2HFJHiT5ZFIpA+Tw4DfP7230QkB
znQ2BoIdJPKaKbQZowlwXXwQklgyB5CCuBADEUGff3tluOnHtpiALg==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2026-08-26T10:29:07Z"
mac: ENC[AES256_GCM,data:RnTkmAsk9VbU848rIWv+yZP7Iryeod+lJTeV2Klpd9NK7BRqYdoP2YoCdXrSpKNmbTDill6bi7tyTt5m+SgSOvySBp/QgPZzBXwdUMUVUd0XkZYWCsEW/4AJEghE3TtzEVSGAymAfTAkRv9gk4T4BdZYABrC1K5IgedXlIxfAHY=,iv:NOaMCirkW0zGpx1OVwmNnulJSjq6kFgoa8pbESfq2fM=,tag:9eq+d16GD6dy72phwMAeww==,type:str]
lastmodified: "2026-08-26T10:29:17Z"
mac: ENC[AES256_GCM,data:cHGgqiMGdnB91nwA0JOlmfkoR0VOhPxrv87YI8ODyRMOfDUGuVhZRfgvt1e6RN6ToddXsnsWHxER/gC34n0t3wbHYvisG8g5hTSMSb7K216YRfahNVVTL0rq6XlLk0QQBxbKx+liuU2vGW4tRB1FDAKctEgH7lVHAzVoU2pxp5g=,iv:8H8AgsilXi+Gg6fv/VZMn7d6ZPAbQIK6JbDcXDly0+c=,tag:LUKSiQks1ikDOOHgA4rEVA==,type:str]
encrypted_regex: ^(data|stringData)$
version: 3.11.0
@@ -4,21 +4,21 @@ metadata:
name: markdown-vault-mcp-secrets
namespace: mcp
stringData:
BEARER_TOKEN: ENC[AES256_GCM,data:XF+9oxE8Wnvk5hhg6+Ko/KXzU0wj+IYDKWCXDcSt2BWx3ovp0PCpSPHs2ABjHnr0eUBnQEaz+H8lww9g9FwLtg==,iv:Xfm7cn6VttvErr2Nu7YfK/9vTks8lkFVmC+txwQbAQo=,tag:UWB7iQxPrgFQz+hUxz1F/w==,type:str]
OIDC_CLIENT_SECRET: ENC[AES256_GCM,data:EepkUwFokohrzIEC9zW0QYd/OPGnSQGhGETt6Nxr3fY5lbFm6qmaiTQvo4cjuGWX35nahExjFv+jfOi5nphIOQ==,iv:o9+BgWK0ewFGhcr10wRCgGa3KV3QaK+0SsTIb2I4XQY=,tag:9Q5KgR7oQRnewWMHDzvbXA==,type:str]
OIDC_JWT_SIGNING_KEY: ENC[AES256_GCM,data:UoWs260WtSc4gWQeSEkvwHmjTMos1iyv+efQ8DEeTo5KM1vJsWH0GdD0qMpzCTnfwdSwc991ecqbyNbyREFT3A==,iv:omf9krmPm48fCfuZLtJomfZcQvHowEJrXvjxCbkpJhA=,tag:cRchu0LD/vm5tG+PQL9/DQ==,type:str]
BEARER_TOKEN: ENC[AES256_GCM,data:XL2WxTsnuERaKoIKaWAJmyQZ+0h8NibgA5nR6KGmhxv2kx86H66f0eaPxbIUhJVzRWQ4nQZj/R0pW/xkKJP9Lg==,iv:kA68ZrVheuDZUW8jIyDX0ckGGhrctlMM3aHAeYhchtA=,tag:IvXkfXfipfyvXzI2g4+cNQ==,type:str]
OIDC_CLIENT_SECRET: ENC[AES256_GCM,data:/ImGFkXA5YETRWf9ssnS7h2oohCqwcGIE7UuF59THLui549EauBLjeLweoGhr7QrQSH2QgsHBHuISAeo5yiHLQ==,iv:oFTfG4rtSoS1/K7IM/Eiza8KyGvUr58UNRz6eaSCTAo=,tag:37tKMLuuGdf+c5LPyVV+iQ==,type:str]
OIDC_JWT_SIGNING_KEY: ENC[AES256_GCM,data:al2fL8JZDT2AcOMnS5xToP5N4r96GJoKg+SYyrTRES463zYrVTN58SSG1PsJJSjR0epMPWguxJf6KJANuAh14Q==,iv:vF4lsVgE3e9C92oluRwsfHP9BDArT8NfV7znd/Fx5/w=,tag:COua+jCZh4XrBD2UjUrE2A==,type:str]
sops:
age:
- recipient: age1kct5g7d7eus2hvdnmx99ewsrtz70lhlasxa25euqwdctqhwqqpxqz0n7gg
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBab3JiSjBuVzI0cjhUWW8r
aFg4aFdDTXRYVm8vS3lvc3dUYVg5ejJDcXpJCjl4ODBsL21mR0s0OEZldTlqemFK
NkJ6anN1RzNWaURwWG1xOGNWaHQwOUEKLS0tIHVibS9BdjYvT2wrRjZNV0tWeWl6
RytrN3htaUp4eTJNWWFVWGxMU0UrVUUKljSm2TXErurBrmQRH7FylbzNq5/n9bVi
f50d6VFq9Wq17zAPeBfluHFaWffRCxidIzo8R6evGxHcK2q4wmxa1Q==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB0OTdnWEcrMldWRG1wRGho
bkk2WVArV2dJQWRNS0ZsbUhCUGlUbjU0WWd3CnVHWWt3UFNBS2pHemFwUFhQb1JY
eHU5Y042dnRQQktHdURHbjJtTzhpME0KLS0tIHhUME9jV2NSRnVJbmttYU9tSGZz
WjFmNFFwZTBUb29yVkF6S1hialBrd2sKYAu71boRoZe9evm7i5bTLOxaW9sHvbdP
Nrzaj0i3GPF114I8KftcvTFhtfrFtE8WwymG0gNYotgoplTF9NOyHQ==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2026-08-26T10:29:08Z"
mac: ENC[AES256_GCM,data:zOhut80PaowUwy5UsVYnHwtu+5/iRqBR2j1JZCpzUR/+UoVyYvVf0Uftdk97XzuWiPwf5C4k4YoWse5RdYiE0YiX0JOsMxOhUzmCe1kBrMevEpVyQr66AUpcxF5So5cGPizWXk+y/zvIn1f77ILMg630uuXiQykCf1khMHhQPjE=,iv:SEhWnz6pPkg7s2oHT7lseKH296z9rc69YDdmOuYS4Lo=,tag:omrZHLFOfGWpvn50XfVeEw==,type:str]
lastmodified: "2026-08-26T10:29:17Z"
mac: ENC[AES256_GCM,data:1hqNA5SAj2euAgz7uT7GAhfuEfXAJ8zTxZVs87cw1FrKPZrIZ1nHjO4b/dWtDoJuK1xFU463+wUIdLRQxPKhhVZT8XwYiDpG1d+PpWcEY4rakZDipBedOXdy4XZV122C1Edy1BxqooCXmJBB7kPVSYoXdo1O2kSJPEdQkxnYbmI=,iv:LNJcbsWRFpP0RTVncScuAipCXtsdAoOz7sm6Gs5x1U0=,tag:x5Trxa09xVdK5VHdrVKeKg==,type:str]
encrypted_regex: ^(data|stringData)$
version: 3.11.0
+8 -8
View File
@@ -4,19 +4,19 @@ metadata:
name: mosquitto-passwd
namespace: mqtt
stringData:
passwd: ENC[AES256_GCM,data:rkbh0s7+DuQwFnQ9P0fayWgIuDjhxHXdofUiz2bnRFSKvddzPSimoEguch0bBcXaEP+EUEvuoJzeP6NQMNo/Ahm1gSbK4ivG8a6fvttCid53ZR3b0phWseX1TYp7pbGIlSjI7+VAXL7mKqCD+qNkshuJ9xh4ynIyv58XHPol1cjWQR+wcoEqOli2bDC2YvBagZb2ZkXdy752PJMFmSZ4RWZhNkdpMazPSMb1kkwy4pRb68hMqsnPlxCfsS4vlQ==,iv:exlCMexPnl5nhDJoMfWtr5a16VRiVqByPaxNcMEYMws=,tag:JsVasqj+p618WLhaXWTjNw==,type:str]
passwd: ENC[AES256_GCM,data:kQV/+f65TIyV5VZ3V+DeqhYINqpYmJnILsr4w5OMlR7XFVuJmTTKbgD8aiMILMtxHUWGMz6eweIvGWcMJQFhk9FjgTV6h+PhGe37njtE/iOiaS7AdgNnzMw5Fv6FKQl9MOLuOjQ3AyniZpd6HmdrHtvhUvchLvdI31nDRwbkeZnnpbUrYMHSCOHFOt7yOfX2+luJrNCAqO4wGfRlUrkxjqOWYL7ujpDarBh3rEG1ZvAoopaTIEzwRR1YPJAv7w==,iv:QD0G4X5M4+jofdKluwWftCH6Iicl+SJBzogQr3+MK/Y=,tag:kuKBXsXrX+KXau/zN7N5RQ==,type:str]
sops:
age:
- recipient: age1u236u5mzkzj72y4mfxx68gfqw0u0j6tdgkudnm5pdfpe7apq4u6s89jr2h
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBzUDBHZDJNUzl3UXQ0NlNp
Y25rMllsNU1OVkhTRWozdi83VnZ1Qk9XdHpJCjhFb1hNaWVCeS8zWDl0OEI0TlpI
bXVxZnJvWGlBcnpLYzlYOHNCQUtncHcKLS0tIEEvYmNVdmVSeWQ1V3VoUmphaWho
OXJvUWlDQ0N1ZzRldXo4RTJpZ2hCaXMKP+hQu4P8cXvcPik6N2LTZcC0LTVGH99c
MepCObGr8v+QWxkIUSWY570wBIOU7pV915hm0Oi8Vf/XOBB8yAWe7g==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBXMDJ6aHNPTThJT0JXL0RT
Q2ZObDNFUjdqaFBKRXNIUFpxNXJxeHBmalFVCjFOZndKZlV6blpNYW11dlRVOG5q
SHNiV2g5aklzTTNaZVhPTG9VdFlaL0EKLS0tIGIwOERuNDFOY092STVYY3piUVZm
VS9DbHR0bXRuQTVrQURFdlNUck1lbW8KqQ4JRFzWeIXmd4QEI84sbcP0RzpO8WAG
y0JJ1zLmzZSCJO7K/biUCvIFnLSvWYOunTVXA0NbDEacTsLIlXeuMw==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2026-08-26T10:29:09Z"
mac: ENC[AES256_GCM,data:dT3FkCsAdeM4cQ4KL6+3g4QjyZ6LZ5z+uhEj75euMfolxrKDE3u6BguiVuvIIGMXAXJ2ReWnGa96M7cIY5Gjj2Thzu5HGuaQb7MH6FDjuVZ3YY0N7BcUgKqpgL17rYLVrfSP7n8zGPJv7wqFWX0Ia+k7EaaIhBxWiY6WZpniYl4=,iv:MR7Y+MWWjLls8bUEuyIp33xfLEwkKx9KhaN+0Hfmsf4=,tag:EfRkYaWmKmyi9teFVrKwdQ==,type:str]
lastmodified: "2026-08-26T10:29:18Z"
mac: ENC[AES256_GCM,data:aV4hoSNIdXKI0xhrfftxaY0w65Zr9YkbMHCiQnK9UCqtOBuCRRcJCmDU5AAU7BfS9BA6h2dO/UgwT4OyLP8T/Cq6TziHuc1LxGTAhxz9HPpd4nrzHEF9mPpst5Lrs4u6/XZ74HcE9MS7OeqXFxCUMw7rYVgdhEXVla3ZrSjqq84=,iv:FEDPTKbHBN3mdEUcGGFza4lF7SWGvu+W5Ez0g7rxCu0=,tag:A7FoW9sjvgNHvTBS7S9hJw==,type:str]
encrypted_regex: ^(data|stringData)$
version: 3.11.0
@@ -1,177 +0,0 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: photo-stats-script
namespace: photo-stats
data:
scan.py: |
import os
import time
import json
import threading
from datetime import datetime, timezone
ROOT = "/mnt/sdb2/immich/uploads/library"
OUT_DIR = "/www"
current_date = datetime.now(timezone.utc)
cutoff_date = current_date.replace(year=current_date.year - 1)
CUTOFF = cutoff_date.timestamp()
RESCAN_INTERVAL_SECONDS = 6 * 3600
state_lock = threading.Lock()
state = {
"status": "starting",
"cutoff_at": cutoff_date.isoformat(),
"processed": 0,
"total": 0,
"percent": 0.0,
"total_files": 0,
"total_size": 0,
"recent_files": 0,
"recent_size": 0,
"started_at": None,
"finished_at": None,
"error": None,
}
def human_size(n):
n = float(n)
for unit in ("B", "KiB", "MiB", "GiB", "TiB", "PiB"):
if abs(n) < 1024.0:
return f"{n:.1f}{unit}"
n /= 1024.0
return f"{n:.1f}EiB"
def render_html(s):
progress_html = ""
if s["status"] == "counting":
progress_html = "<p>Counting files...</p>"
elif s["status"] == "scanning":
pct = s["percent"]
progress_html = f"""
<p>Progress: {s['processed']} / {s['total']} ({pct:.1f}%)</p>
<div class="bar"><div class="fill" style="width:{pct:.1f}%"></div></div>
"""
error_html = f"<p class='err'>Error: {s['error']}</p>" if s["error"] else ""
return f"""<!doctype html>
<html><head><meta charset="utf-8"><title>Photo library stats</title>
<meta http-equiv="refresh" content="5">
<style>
body {{ font-family: monospace; background: #111; color: #eee; padding: 2rem; }}
table {{ border-collapse: collapse; }}
td {{ padding: .25rem 1.5rem .25rem 0; }}
.bar {{ background: #333; border-radius: 4px; overflow: hidden; width: 300px; height: 14px; }}
.fill {{ background: #4caf50; height: 100%; }}
.err {{ color: #f66; }}
</style></head><body>
<h1>Photo library stats</h1>
<p>Status: <b>{s['status']}</b></p>
{progress_html}
{error_html}
<table>
<tr><td>Total files</td><td>{s['total_files']}</td></tr>
<tr><td>Total size</td><td>{human_size(s['total_size'])} ({s['total_size']} bytes)</td></tr>
<tr><td>Files newer than {s['cutoff_at']}</td><td>{s['recent_files']}</td></tr>
<tr><td>Size of files newer than {s['cutoff_at']}</td><td>{human_size(s['recent_size'])} ({s['recent_size']} bytes)</td></tr>
<tr><td>Last scan started</td><td>{s['started_at'] or '-'}</td></tr>
<tr><td>Last scan finished</td><td>{s['finished_at'] or '-'}</td></tr>
</table>
</body></html>"""
def write_output():
with state_lock:
s = dict(state)
html = render_html(s)
tmp = os.path.join(OUT_DIR, "index.html.tmp")
with open(tmp, "w") as f:
f.write(html)
os.replace(tmp, os.path.join(OUT_DIR, "index.html"))
tmp = os.path.join(OUT_DIR, "stats.json.tmp")
with open(tmp, "w") as f:
json.dump(s, f, indent=2)
os.replace(tmp, os.path.join(OUT_DIR, "stats.json"))
def scan_once():
with state_lock:
state.update(status="counting", started_at=datetime.now(timezone.utc).isoformat(),
finished_at=None, error=None, processed=0, total=0, percent=0.0)
write_output()
total = 0
try:
for _dirpath, _dirs, files in os.walk(ROOT):
total += len(files)
except OSError as e:
with state_lock:
state.update(status="error", error=str(e))
write_output()
return
with state_lock:
state.update(total=total, status="scanning")
write_output()
processed = 0
total_files = 0
total_size = 0
recent_files = 0
recent_size = 0
last_write = time.time()
try:
for dirpath, _dirs, files in os.walk(ROOT):
for name in files:
fp = os.path.join(dirpath, name)
processed += 1
try:
st = os.stat(fp)
except OSError:
continue
total_files += 1
total_size += st.st_size
if st.st_mtime >= CUTOFF:
recent_files += 1
recent_size += st.st_size
now = time.time()
if now - last_write > 2:
with state_lock:
state.update(
processed=processed, total_files=total_files,
total_size=total_size, recent_files=recent_files,
recent_size=recent_size,
percent=(processed / total * 100) if total else 100.0,
)
write_output()
last_write = now
except OSError as e:
with state_lock:
state.update(status="error", error=str(e))
write_output()
return
with state_lock:
state.update(
processed=processed, total_files=total_files, total_size=total_size,
recent_files=recent_files, recent_size=recent_size, percent=100.0,
status="done", finished_at=datetime.now(timezone.utc).isoformat(),
)
write_output()
def main():
os.makedirs(OUT_DIR, exist_ok=True)
write_output()
while True:
scan_once()
time.sleep(RESCAN_INTERVAL_SECONDS)
if __name__ == "__main__":
main()
@@ -1,99 +0,0 @@
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: photo-stats
namespace: photo-stats
spec:
interval: 30m
chartRef:
kind: OCIRepository
name: photo-stats
driftDetection:
mode: enabled
values:
controllers:
app:
containers:
# walks the immich library over NFS (read-only) and periodically
# writes index.html/stats.json into the shared "www" volume; the
# "web" container just serves whatever is currently on disk there.
scanner:
image:
repository: python
tag: 3.13-alpine
command:
- python3
- /app/scan.py
resources:
requests:
cpu: 50m
memory: 64Mi
limits:
memory: 256Mi
web:
image:
repository: nginx
tag: 1.27-alpine
probes:
liveness:
enabled: true
readiness:
enabled: true
resources:
requests:
cpu: 10m
memory: 16Mi
limits:
memory: 64Mi
service:
app:
controller: app
ports:
http:
port: 80
ingress:
app:
className: traefik
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
hosts:
- host: stats.photo.aggtaa.com
paths:
- path: /
pathType: Prefix
service:
identifier: app
port: http
tls:
- secretName: photo-stats-tls
hosts:
- stats.photo.aggtaa.com
persistence:
script:
type: configMap
name: photo-stats-script
advancedMounts:
app:
scanner:
- path: /app/scan.py
subPath: scan.py
readOnly: true
data:
type: persistentVolumeClaim
existingClaim: photo-stats-nas1-sdb2
advancedMounts:
app:
scanner:
- path: /mnt/sdb2
readOnly: true
www:
type: emptyDir
advancedMounts:
app:
scanner:
- path: /www
web:
- path: /usr/share/nginx/html
@@ -1,10 +0,0 @@
apiVersion: source.toolkit.fluxcd.io/v1
kind: OCIRepository
metadata:
name: photo-stats
namespace: photo-stats
spec:
interval: 1h
url: oci://ghcr.io/bjw-s-labs/helm/app-template
ref:
tag: "5.0.1"
@@ -1,7 +0,0 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- helmrepository.yaml
- configmap.yaml
- pv-pvc-data.yaml
- helmrelease.yaml
@@ -1,37 +0,0 @@
apiVersion: v1
kind: PersistentVolume
metadata:
name: photo-stats-nas1-sdb2-nfs
spec:
capacity:
storage: 1Ti
accessModes:
- ReadOnlyMany
persistentVolumeReclaimPolicy: Retain
storageClassName: ""
mountOptions:
- nfsvers=3
- nolock
nfs:
server: 10.0.64.80
path: /mnt/sdb2
readOnly: true
claimRef:
namespace: photo-stats
name: photo-stats-nas1-sdb2
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: photo-stats-nas1-sdb2
namespace: photo-stats
annotations:
helm.sh/resource-policy: keep
spec:
accessModes:
- ReadOnlyMany
storageClassName: ""
volumeName: photo-stats-nas1-sdb2-nfs
resources:
requests:
storage: 1Ti
@@ -4,20 +4,20 @@ metadata:
name: vaultwarden-secrets
namespace: vaultwarden
stringData:
#ENC[AES256_GCM,data:gvA63cWf5rsD17XYe0AUBBJ1GHtWfD7sM/t2wuMo1DaTGCe+kBcj327CWweQlgXiMliPRE7KVVNi,iv:9pSRahjx6P83SzPlX5aHR+0SiWvTy/KhOAGp0SrriJ8=,tag:7dPIeUsiX6HtKRT7e2UByw==,type:comment]
ADMIN_TOKEN: ENC[AES256_GCM,data:gTjUFWMBSwuu5JJj7SzPQvN292NOvBb6aoYGCV8SkhKwlN6sEk9Gn1ir/yLyId2sKr6818FgsK4etDDNvm6ROm0cjvakZyVia+RlWcdHWZyiA1mh/fNKYIXlCi5ZDFiR8cHc/HVtaCeBgNkWCu5/KLPO8gGDbQ==,iv:otfPPJEOMdk/kwVVHC38LsXHlKUPMZNHY7HWTryylhA=,tag:moNe68G1RjKfMHPifDjk+g==,type:str]
#ENC[AES256_GCM,data:Njv7k5Fib3xmDtbzYPI9lV94kAyeva6y7DTy6Nr6q3FOqoqijCj7M1JprDCi2nh+9z4TG7N6NYj9,iv:JSv5JCqO+p9PFN7ypzEBOJWiIkNeGbMMxaZz5+cDaJY=,tag:Xt6VG/oQDM5NXdQVY2Ru1Q==,type:comment]
ADMIN_TOKEN: ENC[AES256_GCM,data:S57h1BqLx8LB9CPmnJ15ft7/VqILM7bg0sfVAtoXaAbC0QgNpmwix/3D0Bl+k5NqBK8dzFHwqVTKgBF7mYX5pOgOOSMXcG6sbJOTorE2MvymE3Br4tNEMursnelIBYor+/kX2M9eOU7TjzK1Osvaj/DShGVvmQ==,iv:b9I9LKCSkiKD4gr7Xknjaopkk+k2D1K/GjQzSxV4j+Q=,tag:Ony+DoME5b3XkWZyrCmwLw==,type:str]
sops:
age:
- recipient: age109zta6l0cwpkxn5wek82kvauxn6yqrq80rsz4mvu5atdnpcn9pusuvnqk5
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA1dVdOVVdyd3lGMTNoTUdQ
cmwybGUwcGVBNWxOMEZ0bTR5Tm5HWlhCVTN3Cnk3cS9jOHR3THVvZUg4a0NzK2JD
QTF1VUVIaVNNSlRUSnB2NCtoZ2ltaGsKLS0tIFJaY0g1TDExQXlYZEtjY0t5dzdI
RlBCMjhBc21lTUJMSHlEQ3FaNCs4djgKarACm++dJ558JgOzyIsXdmMIrFgyd0+V
A0J1NIctS1F2+Rl+pdXr8nTkbvrjWYbNanX/tFV6m5abXGJjOOns1A==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA5dUo2UjA2aTAzTGhjTXBK
OElKSjY3WTFHZC9nUVhYWFpKcWxHVjhQWkNZCkQ0eEdjWmx0SHNORFBYcTdlYW1X
WFFCWEpiZ2V3cVFCSGZIb1hyU2tYL3cKLS0tIGNrbzNDelUrS2ZLeUxicmh1VXk4
QjZ2Si9hWERTV1MzSHJjalJyYUVUV2cKmtc2oCRGvWo2cpcBWCMgXtM43b9ak9ni
d4oIwOaR19F5L9mP8deDMf3eGevIp4qjPihMJGKSlDFh/LgRxNOyBw==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2026-08-26T10:29:10Z"
mac: ENC[AES256_GCM,data:9SJsqHgUv1Ukcl559Pf3JB0O3W1EyyuwuUzqZAp8m6u8t5WKk4GXLq83h3aSxhSy4skaJyMdM0+wmSmjfvmSXmoyGyFq7YtgkHop/D6K3Jdww21kp/O14e9j824rnS0rvV4hUWxrn4LMsnBrD+dj1Cad6WpzBDTv+yZjpIH8qvM=,iv:WA/etiAtqbG1AgNPVmGRSjWuJtxjOWgybyUyUaGnBWQ=,tag:2g7f5Pa3Z1pjTyZwvkL10g==,type:str]
lastmodified: "2026-08-26T10:29:19Z"
mac: ENC[AES256_GCM,data:oLUiDMyjVJLtfGgmEkGVuQZmv3v+YC4IGrbvq7pU9SCczuj42iZe0QtRbQvz704vJGqKsPqY/eJolpP1w2EAmlpaZGkJTU6WEdI/cw+tHdEisHp3UPljEvYdZdPjstO2NeW2un1Y01k7GpqTO4gsJDlrTqAjGw/6Y14eCRxFlaM=,iv:K07vtBpCZjPUxjd6VciBIdRanpLNKZTJZnjKQcmWyx0=,tag:Vs+glv7kzkIUhNQNQUPmDA==,type:str]
encrypted_regex: ^(data|stringData)$
version: 3.11.0
+9 -9
View File
@@ -4,20 +4,20 @@ metadata:
name: webdav-secrets
namespace: webdav
stringData:
WEBDAV_USERNAME: ENC[AES256_GCM,data:om6FSaM=,iv:X/Nw2xVxD19rKbgz2WEmxkzEUip9ig9/ZDDERy/nTKQ=,tag:g0OySPAQu1y6v1s9noSNiQ==,type:str]
WEBDAV_PASSWORD: ENC[AES256_GCM,data:xz7/r6krE//Zcmqjtasl/8trdkibsmDAyljdubgBUgV19NO5ox6B/G02bj/coRcO,iv:VBNCs4dhgVcu6Tyh4guTlt1tkcKt3t6KRyVR4ZWnQeA=,tag:VIup7URYo4Z3xtN5NxKs/Q==,type:str]
WEBDAV_USERNAME: ENC[AES256_GCM,data:oS8t7lE=,iv:pi4j4AuNB4zOOvR3NYkw5zKE9EHR2uiC8O4uq+R6vwg=,tag:x6/mNbErZkJvSp3MvS36OA==,type:str]
WEBDAV_PASSWORD: ENC[AES256_GCM,data:UlqCMgiPlnH7OmHoxj4pDPMTVyoVeqGJhLnnf3cxMYEd3AWJqjBXsspYdDQExEjh,iv:RwmLE7O5OtodXrOehaM6ujL9JW/n/QuLfUwg61JoP78=,tag:Op3XeYHbx9pvN5vlauF7Cw==,type:str]
sops:
age:
- recipient: age1y8t9v56yuvskznddqfsd4yddzzch0yf2dutvvt8rrx6rjh5f9g0s3qeays
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBPK2dhSGJYYXVVbXBiK0dU
d2s0LzE4c01yR09kUG9qaUltV0ZZZm1WeUVNCjEwY1JMVFJJVVNTd2RJOHZ4amY1
REFmbm1MREtNYjNvenB0SkpaNFBZZU0KLS0tIDlycytoNjlyeU01Ujd5Z3lwVjBD
UWd1eDFIY0gxd21vbW5sS0hzVytwSmMKDQPViYmtN13z3hLLIBbkxM520HfeYkBj
S4JFF0i7PzAV7nKAroK8RebM+7181Ss1oUe32h2ZwNVnNOLdOaEs+A==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBGM2JEOWxLV3l2Wk11YTlH
UHF6YVRTcUZTczJrRmpZU1FYMG9yVWZXTUZrCmdXbUNLWlZqZ1ZLL3NGWnBFQjIw
SUdQK3pJanlDTmcyaTlkR0p4bUdVZWsKLS0tIDQvU2dPclk0NzJTTGY1US8xNFh0
bXA2UzR3QkRYVVl1dVk3RjdtSGdyVzQKfPc+kW+99+c3vQww9IqNkyXpIm6B2AxE
lh7OencTqidjDzZ1tFB5qs3UTJ3qfX07hrE3YmteV9yk4VTGJvD6Xg==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2026-08-26T10:29:10Z"
mac: ENC[AES256_GCM,data:iL+InzZdnx+KAm7E5Zisjw0QE7HPJ8yWy440E8kNmLCPMRfmPIjd8yC9YLSELsIEUC6gZYP79myLrKUnyCF6u4AO3ayTz7mkc+ISPiHSo/aAvd50FaOXifuj36cZyYKSRU7WBknbzEZSPmAr7Qgo1UcANzN7XS3b2R8g87JoiJQ=,iv:DtmCTZzEKQYafatpU7t1Uu8lV/rEWKNyKSoQRKsKVkc=,tag:mMUAIl4G4rAV109Dk6hToA==,type:str]
lastmodified: "2026-08-26T10:29:20Z"
mac: ENC[AES256_GCM,data:ZxmwTek2RJSWgL0xxDpR0XVYGlq01nns/wvOh9JSQLi1C/dgpo1fdAhRUT//uXBEqexqeiwcYcahVI8sc64pklq57vBEw9z0NFqXVck84OJWu+KbVEsVK7oG9YLDmt0PaCPKT/cWGtqQw52D3PgR97EqjZmDVvGLYRC0gabi5Yo=,iv:DjqpncviLxerNuDo+4wE6Zo6fluKUQUcG43GY/IFFKc=,tag:8/RiS7Ua1gKScoAVdKBOZQ==,type:str]
encrypted_regex: ^(data|stringData)$
version: 3.11.0
@@ -4,19 +4,19 @@ metadata:
name: zigbee2mqtt-secrets
namespace: zigbee2mqtt
stringData:
secret.yaml: ENC[AES256_GCM,data:Cy7C63Ru/PWnOA09h5d5HOFmQUreOEM31dNYIIAkV2mZ8XN9LFEpBSOx8nPHRznEPalOkzI3hZcJ/8LWm/ezXICgudqd9r8T4E7sotluLMpaMXGmXQ4Xe1H2Y4z1ZtKjMxX52zJmDCc4Jf8o75lPlnFEPYB4LaZH6DQADwE=,iv:opddb32H9cgW5czGzNmgHbKwcEyh5qnRGqWQDRrIV+M=,tag:nWe+gXf6LVo7YFm9s7ccZA==,type:str]
secret.yaml: ENC[AES256_GCM,data:JDxXrGIk2EHH3Uw82Lx3c5ggZYEhP3r0hVZkOqBjCZE3hqTMYyJsya6ecco+YDUdB4z+Ec7OsSWYQkgwTWbvHNaIoGH+2CVdvPhscXtv375XEHaa37nuxXBQpOTdXvGziSSJo1OZewu5DdM2Dka5LfApM/BBfVl5ubxuVig=,iv:rnc6lBnARMt4DvZUT56/W7XpWfv0x9xsI5VM4BFhxVw=,tag:SFVjkNAZtd0NDYjrMcw0Qw==,type:str]
sops:
age:
- recipient: age1tu4xgfefvgdda0vn2thaqndq4p9tuydq2ud6qa98tzzgnff6749qnlcx29
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBTSGFRZFA5dkw0MmZrT2lj
VTZIQzZpRm5aWTJ0RnVPTTE1ZFY5ZGlDQ1VRCkcwdFREZjRNbEpwNmo5YTFTN00r
ck9KYWdERDJ5MHZQM0gxaFFpVlc4bkUKLS0tIHZrQ0RWSkl1Vlg5MVl6Ym9sK3Z3
cVFCUllLYml1ZGNIeFY4R21RUy9leDQKVJUn1z+nkizcTkr6RixUTkHTpaEdiDIi
wf310nXdO0bxKTrd/a6YNFr86KV3Y3LaqLTJl11Ewa+QFmLxAOnUqQ==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBseERQdHlpUzY2WFppTUhL
OVBuZExBUmFhQVJESGRhdUU2eHVjUzg3VkVnCkswWkF6RmFDSFVkTUo0L2NLL2VG
M2wrU1VKVU5BVHZMM3R4d2I2YVBhcjQKLS0tIGltMFMrVVYyNE85bUg3elo4RHBn
dVZkSWkrWnI0aFZhdTVYOFVXekVPQjgK4UOpZTnZYO/UxfGXPpG76js7VyCNdZxX
blPsgjBufI9orz2lBGVqCeyUQUioYUGPylVCc2vxiXp49ncrLe1Ftw==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2026-08-26T10:29:11Z"
mac: ENC[AES256_GCM,data:qs61rBjxyl4PalWnpEllBr4DxRRm2CAqxhOs4cAs3O6xokBuZr3bDGsn9ULsX+5AsDNfu6cOqXyuBkCeKnmrZorhEJONP4hmIb96LbGs29Dapk3ICvr99DvKVlObJ5COFp3BqyzZ4quz014njZOxj4H0rMecNuefdCl6jFOZ644=,iv:1NOey4HE8LASOEplPQNlGcM+yrfjnK7BAXidEugRGBE=,tag:u//2XxFn9jjK8AVt89rwBA==,type:str]
lastmodified: "2026-08-26T10:29:21Z"
mac: ENC[AES256_GCM,data:OiDZHX1X1k2mVAxyaKivqTDzFakq1MkpvHQKiiAvBfRJ4L3XyeoS6d9X8nperufPRUBJMBL5+AzVOUKD6rbUH0GicUL9/+wVokxWfLK7q7WWRk7FS8zhj0HroJXeXocLDJg1yIXERaVHm9aWy+8AJ8hP1fjWj9rlj0b6J9yV0l0=,iv:Sk6zxGpwv5bih+HrTGycQDh/416QkhW/jOVFpl/uOsQ=,tag:1YukuwsO/2aBhPj1sdDfAg==,type:str]
encrypted_regex: ^(data|stringData)$
version: 3.11.0
@@ -4,21 +4,21 @@ metadata:
name: longhorn-backup-target-secret
namespace: longhorn-system
stringData:
AWS_ACCESS_KEY_ID: ENC[AES256_GCM,data:kEDiVA1Czl9PcH9V6ffz8KGU+iM=,iv:kDcvtv82NDzojs/iw+2TZ7aI9XcdMZ0N/x7tlfVnCLw=,tag:V+hHgaeObdy0gJU/7cYT4A==,type:str]
AWS_SECRET_ACCESS_KEY: ENC[AES256_GCM,data:yvRmg+XhmfUjpqqOjFhfsehwFlfnZI1V/twB9LsjScEFEpoZvruWMQ==,iv:r91fBLxc+r4pVN4+M4uqXTm+GikJWglx/d5DvUwXgIQ=,tag:lAw9kmQSAaabOnhxBXFfag==,type:str]
AWS_ENDPOINTS: ENC[AES256_GCM,data:3LeFfyKyTx5aZ3rDzkp7kBj1tssJ4oCXNmYq1QcK0ri2J0KURhOAQwzB887x6CEtzADpglnNsDXjQE9VpA==,iv:rpYrnRaGHacd1wMdRXdH84TyqXk9O43BdzZdqyLVgKE=,tag:5WgHXMRcF5kPFQ1uJWUHcw==,type:str]
AWS_ACCESS_KEY_ID: ENC[AES256_GCM,data:jGTcggTYQKYVjAqymPs+Rx2OGgo=,iv:/c7Yl/pi5Pbdu7MhVGY167T0+u4kkkjlT7wbggFgWQc=,tag:28K8gU2a5eXVCWAcWsb/5A==,type:str]
AWS_SECRET_ACCESS_KEY: ENC[AES256_GCM,data:D8DfWoFmHwX4WsgGJ2PVuULzXu/9FoEqMpMVWoNPX8ZNpboz4EyxfA==,iv:ovlG1Lcp+YUVP1oM8vBvTQ65MqLfNPtl+N9YfqtJ3kg=,tag:xp6JN4qt+CquDJE5JMZNMA==,type:str]
AWS_ENDPOINTS: ENC[AES256_GCM,data:kw3BS+lW3ejBBn6mVMpIWw5cCrv3OhpY3XR15MXVGFDJ9bAVMWsbYr1zZio1zsZhXrbeTUPMGE3g/5Srww==,iv:vMav1Tza+RNE9KHPLi2addcGifxKUwEdmPQzD4A8Wqo=,tag:UYSNG6LJF4Gszdh020G44g==,type:str]
sops:
age:
- recipient: age18hhmdmupj90zjgjpxk3z5cf3lx36hcznnmqsp0fpyg50823pudrqjupydt
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBaS2hTNHNSMDQybThENnk3
TTN1cmZZNmQyOWxpT0hkM21jaUhhcjluM0hvCjM4VzJzNXRwWmdOelVRTlVRdHlv
R3BhaTNKcTZOV2JXcHVVTjcyQko3M1UKLS0tIDRxcTdDdUw2MEZFVkNqZ2VGNzF0
b0VvZFpSaUdaYm96TWtLc2o3TUdNcjgKZ5CIP/jCk4eN3/SbIqiKYXmgOBZlgJhv
wy4dWvrvbg2ehpz8FJeMQkPypc4NyQXLNWfpBmcY+71vdL2rwK+UmA==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBaRmhIaHVYR2lqeTFMcEYy
aHZYS3RzVTBLWEhiYmFOdGhoOEVtUGNIbWxRCk1MSEtVeVoyRXlYM1ZmTlJtN29a
YnBoZVlpWFlnUGZMTFl5QlNTeGdqLzAKLS0tIE4ybkFSMTFSY1pBWUMxejRYcmxZ
NWVNRkpMR1JHTkxBWTJZZDFTZUFoeXcKUJvifL8jl5xzXEGNXbSzZ2r8eSqqd1wI
oqilKMl28tEChU2jphKEWi650hR83ZpRIWQzIvG4agrmTnvNDJ3V1g==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2026-08-26T10:29:12Z"
mac: ENC[AES256_GCM,data:gaQ0thBkkkBU1eG7digQNH2pe4Z2cDwcTzU6B1FqLqeUPQZiS4plJHvSDb/OnvBc4WCxaXshqxDFl6PiOhahhP5g7VFqRQ7EVK2vLPRRcS3o4ym2mWQKb46jsdQd+6d4kjAflu9XANnpbHwWQLr5lwq65PLYf4MKOyvfo2LEFps=,iv:Reho8BoTcIOJXSxAkxLkFsq0hFn8OO4MCVWmEUDSLGo=,tag:QNE+yJ2F2SmzRBr46PCKEw==,type:str]
lastmodified: "2026-08-26T10:29:22Z"
mac: ENC[AES256_GCM,data:Tnkp9i0ZQcX9MHPq0dBqhbttMlSwPkoGr+E+b+zjOPkbjHHrsK4QZ/OzLXrFlnkh+PfbhdKs3lslidk1rwZko300s2ZWrwG8/1bIk0O1Sb+bgcwqxO9lZp4xamtAbJoMC9zS2XWDg7Qpdiv3p4eZyRyZvg/TEfNmONBkkNJrOc4=,iv:Z4oRjChyuZH8t7jO5WPo5vH4hcLRozS+Lc5i5qgXY1E=,tag:KoiS346oXEZMNOp07w0FZw==,type:str]
encrypted_regex: ^(data|stringData)$
version: 3.11.0
@@ -4,24 +4,24 @@ metadata:
name: s3-backup-proxy-secrets
namespace: longhorn-system
stringData:
WASABI_ACCESS_KEY_ID: ENC[AES256_GCM,data:kWSOroeMAcN3+rx9QI1jj06tdBk=,iv:5nxWpctKXCEb8RBOSxG/XvY+VnhiwEBKFeBvMD0dB9g=,tag:/22vhT0zNWCYUOYVe4D5EA==,type:str]
WASABI_SECRET_ACCESS_KEY: ENC[AES256_GCM,data:UMjDviWxTIJDiInHcv65U76jtStGTGbf8G3LpWHJubxEM9xSd651/g==,iv:+EgSRQcisuTyT6Ji9ukkHwv8Yxld+snpP+wCGVVC5iw=,tag:zPhxx5Dzr1tmhoDr/W6UoQ==,type:str]
CRYPT_PASSWORD: ENC[AES256_GCM,data:oIK4rUt7hQMEQ8OIOdAbzDsg3hToHuFMt70suprXUDgsmsjorCuB26Rc7g==,iv:bDn3QEBJ+FcnGRPCifO+bSSdJN9e/i3WVnX/zFW0E38=,tag:FKSa8lAAxWZkd0Pv35BZBg==,type:str]
CRYPT_PASSWORD2: ENC[AES256_GCM,data:FaXpnS9ZNvWiI7GGchn6AkYnmtbW0s0jg17e9CT/OvgM/Qu44aeYfuTPAw==,iv:ddPKiDZ6EhwzqlO3rzUXzkVJmDuPs2izdu4z/6GEoGw=,tag:TYay+FWqUxgsYcDFrtifQg==,type:str]
PROXY_ACCESS_KEY: ENC[AES256_GCM,data:3V3/rlsS8OWIDtB48GcnCGNEH+g=,iv:Z6yOjKyVf7HbRsEcT1tOyIwjK/6X1rn8d7X8lMD2hgI=,tag:eulcVQgTCcDrvKYh+rJjYg==,type:str]
PROXY_SECRET_KEY: ENC[AES256_GCM,data:aNQ6Gvo7nQ2k1+j3/gC5p4UF5rxPr6KSjy013fcG77I+2RDOCRCTAA==,iv:mAstxSbAZ0nW5BEBFtSRVRxKTO0kobBxlzUIuEL9KAw=,tag:DpcmtbuYNgeGUCNhzXhLiQ==,type:str]
WASABI_ACCESS_KEY_ID: ENC[AES256_GCM,data:2lgiZFNHtYl3eK/0Md8EXHRz3gU=,iv:w+qoxL2sVuwopDoQrvT3s4lVlSkNzV/OwCQZQYTy5V4=,tag:4Tc5UhXw1lUvQxOqNovGGw==,type:str]
WASABI_SECRET_ACCESS_KEY: ENC[AES256_GCM,data:PhYVelDj35KzDK66dZdg4CMfytptFDP/SHtkT1KqfoRKcez8R8/sKw==,iv:QIamTRqbmdBznOvvo7bqZAcOBUL2FFJywXsHQo48XZk=,tag:Z70aCEw0ssthUj1f/4Jo+Q==,type:str]
CRYPT_PASSWORD: ENC[AES256_GCM,data:C7rZ4qqhVYLNZmNvQiycjV1zJak+BHG3Izwz13vJPAbLaR0FK0uoBmmO3g==,iv:3r+sXuu1x+SAAsHcV0k4CIY7Yut0FQWfqW8rXyxmGbE=,tag:h2/K4lPugAcHdQGPJPL8OA==,type:str]
CRYPT_PASSWORD2: ENC[AES256_GCM,data:xfRvxUjzafnHnLMz13BctQKzGBJUDj8QbmmCv1kkFcMxqY3rrYUUHKH4gA==,iv:Ricq6wymYM7T2/eAoxT51ierVCKynf8I6SrzDuWgDh0=,tag:Mwh1mV4Z4rN4i1b74NrcNg==,type:str]
PROXY_ACCESS_KEY: ENC[AES256_GCM,data:4YlgjHrV0gfLyYUTFlMAnLw/ll8=,iv:0O5C6+hzDUFaG9a4ufwowfS5bzDf3740fDtjkVef0Qg=,tag:YCSVgK/zGCIDejFPZfLrZw==,type:str]
PROXY_SECRET_KEY: ENC[AES256_GCM,data:KUXfsELCSIaSDUXmNnJDni2z1WAYVosBJzVtLVQdpz+jC2sCNT+TOQ==,iv:xnxMB6F69fnHU7rNE2+SXlMHxmPDSoVzvu635gebjOo=,tag:AckiYKRLncuks5chFzkFfQ==,type:str]
sops:
age:
- recipient: age15vc3geq4lsec69rnxczluvwgcexeqae02zxzjpswsuatthaasu7qzath48
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBsYUVrMGVLYjF2ZDVGSUtW
WDAzTUJMTkJaOTdKMHRNYjdtc2I0anBnU0hVClZEUWdqUjhudG43TmR4R1d6WHhy
RS9sQmJvL3BldTNWVzN3U3NFSndCcDAKLS0tIHgvRGw0V2MyTzlPdmtlcFdpMUJl
TVNpeUhEd1VxcXRiYUZhdVZ3Y2RxeGMK7YHzypEQriuT3wn3l6ODDjGTg91hapqS
jVa4JmRweGo6TKLNepRYUsIZiY22jctX01yEv+GCl18+nJsT1T/HkA==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBnWk1GMjRaVGhTMU9EalJT
Qk5uU3RsaXBYNzBmOXh5K01vSWFUNzdBTEEwCjlSbGIzV1gwcHYyNTNBQjRSeHN3
ZDZ4RmtETkJZRi9BbmVOc2MwRWxsM0UKLS0tIDl0NTZNSXRTOTdkeU5tQnNaazFY
VDZTa1drZzhYa0U1bVM3bHVKQ2NQM2MKOfHd8sHrKXHkdHuCP3R0Qo6DHJjJQgRA
7Ti1RNKCiS+F50khsU8NeWHt+LWvKakW7L6eGSYEe9hZf+DvADk29g==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2026-08-26T10:29:13Z"
mac: ENC[AES256_GCM,data:uz4fp4ofC6Vyip0QRud6wpSctZ2+j0XOnPQYmeQNVfGvVpAVijLMZ4m0DONnAgl9vrlLmqgXqd0h9jSVyd1/8eRFPc9IsLgAFP4f5Sb0y4I8hL2drmPxUFUle5UJ5GaMxzjoAB/BpcguZxeTR3jIvheU4CBoO/y6JVtplNRQG2c=,iv:mb1xa4L8nEdSt9zAgBLOj47/QcKnsMFYcQi06l+YEno=,tag:qZPdKBaXqPFFcENh17WglA==,type:str]
lastmodified: "2026-08-26T10:29:22Z"
mac: ENC[AES256_GCM,data:ORPvNlOSjlXapwHqpzAgE+DPELn1c1+5SkPrRimNkrTFW1bPY0r2mRECekwxEuT4cGocZletgp6uYL/4IeTlb7B9S27hR3ynTbNPAKxwb3o2o89Wq20AJdgJ2ElKMw6xihE5QIJU1M+cxGOSE+BubkiFKTNG4t8bZwF8fHdPQ44=,iv:nuzcP1eXK/wGrf3cfWIvNzmW9MKRSGrszyQUwl5MBis=,tag:yv7VqkeAv3EGpO9yTL8/3A==,type:str]
encrypted_regex: ^(data|stringData)$
version: 3.11.0
@@ -1,4 +0,0 @@
apiVersion: v1
kind: Namespace
metadata:
name: photo-stats