From 42937adbac3b0c1b9db8bd89eb5719035e4a7eaa Mon Sep 17 00:00:00 2001 From: "azykov@mail.ru" Date: Sun, 16 Aug 2026 20:48:51 +0300 Subject: [PATCH] photo-stats --- clusters/base/apps/authelia/secret.enc.yaml | 18 +- clusters/base/apps/davical/secret.enc.yaml | 20 +- .../apps/markdown-vault-mcp/secret.enc.yaml | 20 +- clusters/base/apps/mosquitto/secret.enc.yaml | 16 +- clusters/base/apps/photo-stats/configmap.yaml | 175 ++++++++++++++++++ .../base/apps/photo-stats/helmrelease.yaml | 99 ++++++++++ .../base/apps/photo-stats/helmrepository.yaml | 10 + .../base/apps/photo-stats/kustomization.yaml | 7 + .../base/apps/photo-stats/pv-pvc-data.yaml | 37 ++++ .../base/apps/vaultwarden/secret.enc.yaml | 18 +- clusters/base/apps/webdav/secret.enc.yaml | 18 +- .../base/apps/zigbee2mqtt/secret.enc.yaml | 16 +- .../longhorn/longhorn-system/secret.enc.yaml | 20 +- .../longhorn/s3-backup-proxy/secret.enc.yaml | 26 +-- clusters/base/namespaces/photo-stats.yaml | 4 + clusters/home/apps/kustomization.yaml | 3 +- clusters/home/apps/photo-stats.yaml | 17 ++ clusters/home/namespaces/kustomization.yaml | 1 + 18 files changed, 438 insertions(+), 87 deletions(-) create mode 100644 clusters/base/apps/photo-stats/configmap.yaml create mode 100644 clusters/base/apps/photo-stats/helmrelease.yaml create mode 100644 clusters/base/apps/photo-stats/helmrepository.yaml create mode 100644 clusters/base/apps/photo-stats/kustomization.yaml create mode 100644 clusters/base/apps/photo-stats/pv-pvc-data.yaml create mode 100644 clusters/base/namespaces/photo-stats.yaml create mode 100644 clusters/home/apps/photo-stats.yaml diff --git a/clusters/base/apps/authelia/secret.enc.yaml b/clusters/base/apps/authelia/secret.enc.yaml index 7e1e54e..143f9bf 100644 --- a/clusters/base/apps/authelia/secret.enc.yaml +++ b/clusters/base/apps/authelia/secret.enc.yaml @@ -4,20 +4,20 @@ metadata: name: authelia-secrets namespace: auth stringData: - configuration.yml: ENC[AES256_GCM,data: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,iv:edVMtPPulJgUqgzKJ8pq3qIQ/8TudMIVod1lDnMUJ/Q=,tag:jSoltimdXUH6uGCTzzkBpQ==,type:str] - users_database.yml: ENC[AES256_GCM,data:7vf8FKBGLtNmzM06/gQO/XSGQWzSYij9IWscWkQS8dpklnk+jESOQ5fiBu0B+GtA3ETaa7guhtOjB2KrI11YSduuNP6gLewL0vgja/lQAiFVHQ1WrHGnYysN00Q0WA8wH5nyC0fj7+Bb3lOQctbiyLM0sUCbpOW4N8Ol8xyOf8wmeMNtc4RoSE5XUPoG8RkouV8CcJ6nggqkxK5MhWzoeH1S8mN3gNLK7M2dZzkQEPeQmk/F/9HxiPV6TupzOuW06bqNVVFODkI40eEAMmqxFpeeHPpNqyz89ra3FgsPLxSruacckrFbNb64HtPuxDec3Orop8go5XjfbShH2bjtfUlvwp7DzbIM0feSnY1g8oRH/iIjdSqo3ep/DXV36JDEE9yi6U5RWeS9yrHEIaTe5goq6dGrgh3/7WneU7CSmwp/B4SB5tziWLQWV6yRuqFKehxFfB4+lf0t2bZDWUN+vHxtxL5AiN5f7a27EIgLtwpFOpcixSPLWr27JD0Mp626nX+odhY+TfpxSj+hOArKPBCvY7N8nhkp1qR3rm2dKnPKHJi1XTelMGzaGn257D0+AsooEVbBI9LbqwofUSka0tGqHlzXt4Yg8AUwlxasxa3sREudQ3MtFEdQ+erCzFEtQ/NEiOKTBGGm6T4St88kEt82xIjpt44T8/FzwDsi2tSnvHYiem2AeDvAyUyunZuDAhWdRmJTAZr4xqIj2xBRdXwIneqoozhPeOKnvEvarJl73MbLCfgtBLus/TUH+FLX/7ofMrhz1lvvMSnG0DHtpPaR3emabH27oCky85o5mxaSyJsv90tB52Elo+PY38/UyLIRsctUqf83Q5JjxdCNyj2JU3pZhKaNGcMuAuRe3vvifHqq1bb9EMhi2uByqlMyILBMLYftMUImlpAWK7i6vkRTS4FXgY7k5fV9BJclhd4zw4FbaiKxk4nHoo0yHMJ555JnXENDjNyu5Q1tQtNdu8w+dFhn+qVmuVYAn9yy4s45stUe8x2tIhDg7h0K26LXRUahjoPUfnAJcAbZVFuhoaFQ+GiueB1QPhx87ch45t/ZPdXQLVShEbQKJqPK3kgP+Kx/T/aVYs5qNh37F+k0/2jw5W5G0pZpj2TvPXSQuY3l0jdQrYI1fxpdXKZ1CEtztVZBl/DRG3OX30eR454Fm0cFr7VhLlev3okRWzmBPBr6jSNtk8U2EHs31IEbQprzvKzMheqlEzO4YZrliRcdUCJSsX3KnmBhKtJ6ajvHGlN+PUIlVj352F//Y41tPVZEnvvLXUOZwfEI/ScOoD2WWndayx2dc1+zP6KyiIg0Di6TqPje9AqTPp8tK2KgK7Tjn7vG6CZq3M5dnnaJUG8baWy6Q4lbbIY5waRzwmcbihGbMk4iwLvjMPXmgSEyiZpfHD9s0QcKaiXjGiYpalThVBEII89KfZ9wbo6o42n8p13qyUIl1U4j45WznhoQPCbPcWWJh2FT7RtKqPCOoQW2tkbM4nHbHwXxN79cK0246uylDJyhmh/bHcP1eIyuFaxg4UT3dPvPIvswzWDivI+Eh4FRhGSMqFLbKT8hYG+qeMK25qvbtFP5sDOIS0ao/Impvxve7jeKiiPhF0rlvTsCxUMeC8Ar3rPRft1wb9iBPYkZdq5inipd3GV2HYgQKUJT9XBs9dkntTCMDXmGCb+A2HNdRdHDLxIFnlT4Ax8iA+ekDHWyu7y+88I/rdwr6A==,iv:ZBaFPhSZBVz3Lw5vIJQ6UiySK2BMriIgQZB6ldM0LDs=,tag:9dGDBO42M+itZ+2qy3vF1g==,type:str] + configuration.yml: ENC[AES256_GCM,data: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,iv:FsMdAfWwcSGWqsepmFiEQiyxkBO9qYX5oxgmIxzT3ow=,tag:27OUG+CATiNlHJGwCtan8w==,type:str] + users_database.yml: ENC[AES256_GCM,data:/4gMz8EkWcSTqg5OoLUCup+2Zxd2SGSnlH49itUEMe2HDfBXLgha4K6DhLrMo+i6cs1t1yJsjaW/rc3fkL3MgWP/EXG0ZPWJYLNhRH7NFCac4G/Ie418VZGZztLqY29/l6mDA1v4SxqJb84Favoc9ODucKFV+1D2rftrgivsSgzOwaJKFbBzPzKLxnraYEkfsZZ7rWe6HKgnQjBVS1ybIFA5KIEJtTjOAcsay/BvrYTus9nwzn4lPYMsG2ScCs/kX4L0O1TY6Cta7ti9Hk4RS6HKU/60SLjrDhkKfWMnNwMwhYrsd9hKiQ/6nTKG8SkZIOc5J2/R/iSOqRGjlN9qKuOoMU1dIs/+/bpTv1In3wmsCxXX2JqCBPJS1t3nV3+4Opk+gL9vjbDv5XVVWUoF5WpNSAKgJk/6PWUOd4lFpTfNl8ZbgCqCvAPrxKzb01iWXskpKwrYnC6sOOghqy0hUfZE2h79t3Y9GTFOMtul4LrWUGYvdOvrkreIEuWBklvgW4GER6vn70Cbl0NtniZd5cFB27cUIqiEfK37Bv7D53WEQ17zvqGWLn5WQ02sZsTRd7idgjzdurkPGG5ERNA2U9njykh0YI14jRBI+5g+CpxMJlyDCpi+IXZzN8CQVueYnj/oLsEVvtoplKaV9xkXsfXwLsasHXe+lyVwMhBKdcrGqP4Em4MqwPBVPOdol1YUrRsIR2y6tG8OxMcbr3Of9CPhakR1hpqNDcYrV3/9X5UPm8FJ4RlaYsS1uWyQMy5Q6gGa+R6QgJ2LoX17209mkb3UHlxQB8Ss3NKiNNYLsdZxdky9vGMjvvJ4ftdSQx+bsBRB6kAiPa0/Wi11LYNuChSLqKATzQveQff4lOhxchLKC3QQCq44CNpZ9gdMnDRsbm920l/bb9Wp+KnCdpOfVJX0ep5Fq66wbrpmvGi0Puhz0k+swJmqk5l0h2EwK72iJGfTeKw7cndTrQbexjI4utneKtEZm95Slu+hKEXM3gsaYkXkWxYRERz8tNdcFZnRm3FY8newRBokxkU2jDB3aYyBbtrfHiDDY15EXYT4UR8khoGtOe7HQpQlNlxJYJL4PlChfW8/i1PymBcV8y8m3HChAEax8I+MTV3y0pOs83CKDNZcFO448rbhu+cMYvbYn/Bei6gTB7jGfaPkSsD8k1xpFtUGRib92w3kweyG8kUA4qRVLY6VNL0pMOpqswULrA2l4uHhsiORmQ/Ur2zCle+WWD4yL8tg69uX/hvf1GGDjj1CUQTKJakJRj02xIi6YX3LGZhSv+1Lg+UCHP+0sGvMZcW3IUaarAGoyq/eufJtfybmWTcovrLlyWEvYfPE0nOc17t372bSkodld+5DFrfuwgQ9Y/+SpNwvqlzRzJsLyCMyVcMowQh44pPCu0XND8K67Lz0JZXOBhudN6WORPDo/UO9j6VhPiM3tMSqNB9c5AlnDfCBEgzPGmrYrLPFGRn45ju0ALCG7yHwuYoJVrRbOeD/XMbencAwzS1+zxoPpYVz7HHqiLAgz9frrG0vY81GIipWrTG9KhfvUtKKQFyUGlAZ1CT6Oh4OXVNkctSGGPu3jTOw3vTDp+/8uUXPygZYmUQmpgjsNMIuAp6eNzSNj/bqpiLeTwKOP5Ok+cFXs5pP7c8wVWL3rDe+XP0mYLUzBQYtr0TywFgVdkMhIWZMMa4mzbIzg9QJeHFV2iyKUji9s+ydSGE25SRALQ==,iv:PTErYyqj+5e0+b35rtI6zjtruee+4lKN/yphVONxhJc=,tag:Hx5T9NpkqcaODgPgyxEbJA==,type:str] sops: age: - recipient: age1ncw6uagcgncd5m2admqxt73ey0mcd99jsw9sa9lcdv3gu70mcerql8ya0k enc: | -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBhbVJWalJLMmg2RE5vMHdI - TU1PSTJGK0FsbURwSzRxRUZkblR0OEpSUm53ClJuV3NmU1BMcE5TTEVjbUVOcGJh - TFdtVU1zZERxa3BQVGx1dG11YmVVd2sKLS0tIGt3SU4vRkJiZVdmTnk3MFNUK3JP - SVRYUVp1enZ2MEJrNFROV0lwc2ZEYncKPZcSrxn8IPci/JymS2+s/LkwywYfVCGL - K+sJiMBD6RyxqW2HicMTEtcMH6Q0MU48r2XqnQaRl1fTLsJsx3nJpw== + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBjTkpldXlna295SnV5YVQ2 + MVFWNHhDNDBQRDVZQ1hnU05DYTJ0QVR5RVZjClR4cFJBZHVtWWFVWWY5bzI2Rzh6 + bm53a0VSUkpNYmVkTHJGdFZkU3FHeEUKLS0tIFEwUDRSVWt4TWxZemw4Z2dVSVhk + WSt6K212OWprV3V0K05PWFdpNW1yNXMKEM8N1iiD/W7hZwAcY6xCevZi5y+y0T95 + 4FNN5m0GLXD6NY2/+6mMOLr0Gs8ac6NZdYSS5mfYn08FwiB0zqNTwg== -----END AGE ENCRYPTED FILE----- - lastmodified: "2026-08-26T10:26:52Z" - mac: ENC[AES256_GCM,data:oT8+fSxh4RvFi/O7z/LkzrvY6/SJ+EcZFPK0NyYD+Ztu/30+e0Yd3Gh2WQR6YttY1RwqwYp2+ogJtflembn/wEbaUTkSy4FjG+FRBgRYSB2mnal9BtEwUowiDoSdxHLi44xbziNkhRgwMuG4FasMbvZV0G8DUzb/nhRyLx9Pxjw=,iv:lsfDPm50qhbM39NR7w0COm+RGARfpHjgQF4JXG4Nfsk=,tag:OTYjbqgKxkLh/lOhOhmV4w==,type:str] + lastmodified: "2026-08-26T10:27:00Z" + mac: ENC[AES256_GCM,data:1Qova1MEYGJfYP1zqiCnJAXBUfPgbgYvER8dpXSGl+SO+V+2OxkZlbD3ej1tgbsiWyfIYOs4TaYJcEP0nGjJTJS6ml7kpUa0gAq2UUV8WnzdUpr7dsFuA0DOzKL/H3X+BgI56bxqX8X1r1HePvxWnN+m37mq0ipXDlm+G/Lkljo=,iv:HUOjdWKj5hHmlaJpGsGifD2aPvVhdJCYGv6SeyduKFI=,tag:VZuRXf57TTUnfyn6h+/bAA==,type:str] encrypted_regex: ^(data|stringData)$ version: 3.11.0 diff --git a/clusters/base/apps/davical/secret.enc.yaml b/clusters/base/apps/davical/secret.enc.yaml index 20e185d..afbadec 100644 --- a/clusters/base/apps/davical/secret.enc.yaml +++ b/clusters/base/apps/davical/secret.enc.yaml @@ -4,21 +4,21 @@ metadata: name: davical-secrets namespace: pim stringData: - PGSQL_ROOT_PASS: ENC[AES256_GCM,data:f9r1bH7IqlFTeGGnBn1x4UDqfLvhRoVaesC7sxwBJIMABJ0ggOgk6mk0zteYZgGv,iv:xfucImRMa1Dw5QAIOsMs7XKjcnItB2H7j1L0YIapO/s=,tag:K7keBVRjLIpq6dQLhfdRpg==,type:str] - PASSDAVDB: ENC[AES256_GCM,data:FqlacdycRsRc+lQ1s6VaZ2Dsi7mevFYhwKAVG0AidkVKEJNJZavl/Ud1BLBSkpkB,iv:9yjFHQyJRCGRJJaCcACl5RuQUlUrWQR9oOmre5OcQAs=,tag:EYujVvJLT1DrDuswsdDTzQ==,type:str] - ADMINDAVICALPASS: ENC[AES256_GCM,data:6Fz/CP0VqI96rUyzX7yN/btZqPFta1waF8rnr1P71po=,iv:Z3TLC+sUmfQ8nZymJYHXw6Ibl4o58Agm8ytsbYdPuLg=,tag:epOHlqqpffJHkBBqsZSrYw==,type:str] + PGSQL_ROOT_PASS: ENC[AES256_GCM,data:GLoB3tznlBOy9elUlxcL9V747OWAT9YW6DjDapZUtxRAdw3wkWzFXBCqbw6vhwHi,iv:vLx1XvgLrEPhWC1XL5SKyHnp5xf2vvzc55k5ryZHVmk=,tag:y4wij39JbokpfFnugO66kQ==,type:str] + PASSDAVDB: ENC[AES256_GCM,data:FkWyfTAsorMziegamkdL3IPAm62NqEdYAM5H1gNRgDh+EWxQtQVwQuZl8G0TKe3W,iv:W64wNNiR2Iz8gU5eUJt3R23ed6tSxQl4ExOhzgzwrX4=,tag:wqApbLwnLejygCXoBj0BLA==,type:str] + ADMINDAVICALPASS: ENC[AES256_GCM,data:YqR0GWCQt9gibe+spuaeU5iiJ+igvQsX4Wt4uJBgb04=,iv:wR9VYd3032QGdG5f4HK3GEyMvVLNY0d0blbaNKFPcGE=,tag:0XII81rmALA+EXosfXNqYA==,type:str] sops: age: - recipient: age1yx8mey02c0mu6te9hwxwdqp5n4enjz35e8thchsmvhqw7xsrzy0syg367g enc: | -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB0bnB0WTc5UlVoeGZyMGE4 - RU5DSzF3UmxzWUdRZDhjbDhYeGZyWW9wRUdjCkt4elU5Y0FSQkFwTGkzenBQd0V5 - akozdm5JVkVnZXdUYlhDbzVjZXoybGcKLS0tIFBiU3JndU4rRllNN09IRmc3cmxk - Z1N0alIweEtzZk81SlBmdTgvNkpLUTgKz4ER63C8bBv8+DGab64wWeyTOl6IniT4 - mlseC26nHFecjvLFYNF0vHT9xg6414GgpfGvLdJCVaZQAsBuX/NuGw== + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBPcVBOSVF5MXUrN2xLRG83 + S1MrVno4cDNUelZXYnJmbG12dG9IVzVPc0V3CjNuL0ZUbjN2TWtmNWtsNVlLU1Fa + eEE2b3NtRWJZeXBtMS93QWxmUG5GU3cKLS0tIG80NzI4Z09TdVZSNEk0bktRRkFB + T3dzc09KQk93VElLaU1IY2xZSGh1QTQKN2vJ27BOBq7lnTyiNPAu6k2EpVAnv8jA + kTjoC3hbe2ZYherN7X/gc9QMz1PRt5AF/GsCwl6rXuSBuBucwPO2gQ== -----END AGE ENCRYPTED FILE----- - lastmodified: "2026-08-26T10:26:53Z" - mac: ENC[AES256_GCM,data:/DQGjxf7niDVagWw16E0eKglQ1kaPOOjeoekHndZMdzDwhdfL/GuD6Y4s2lNvM/Si7IBMvn8TlcE3EV5geWc4LzX9lEly6yr2LuVYyFUWe6zn/YNa7/YRP4so8qw0Gc0tlTDe3ojI6sBZDIGn+28xPrIM/2nkB8WzqieoszuQfI=,iv:RZYmMGUwx2sitw2ZiA9iDbqizs2RGVnsqcrZrd7T820=,tag:/heDuw3V2/GH+BU1ZaUilA==,type:str] + lastmodified: "2026-08-26T10:27:01Z" + mac: ENC[AES256_GCM,data:odu1+QzHWeTsRpgfdDzxhcnVE30cMTT+60RDqPZgzmOAwPBCHgGJvbwQG/zNwVCKkZegW6SlDXTBIr/f5CM8HBVLhl3c4QSzzNAZ9eY1ctNDVSBP7AIh7Nchg3ILZY00ickejRlGt1PTuIQ0d/Fl5AZoa4bPq+jTpgA7DFpua88=,iv:jFqOO3nM5sD+10bdgR7GOsibK5JxUKj0Ljj2267FfG4=,tag:zsPF9y6dv8oqJ6XUz8l/Cw==,type:str] encrypted_regex: ^(data|stringData)$ version: 3.11.0 diff --git a/clusters/base/apps/markdown-vault-mcp/secret.enc.yaml b/clusters/base/apps/markdown-vault-mcp/secret.enc.yaml index b6d14d0..0d46426 100644 --- a/clusters/base/apps/markdown-vault-mcp/secret.enc.yaml +++ b/clusters/base/apps/markdown-vault-mcp/secret.enc.yaml @@ -4,21 +4,21 @@ metadata: name: markdown-vault-mcp-secrets namespace: mcp stringData: - BEARER_TOKEN: ENC[AES256_GCM,data:bRV/5QwZO3I6yd9uW9onx3AJY/5ttlMm+sgjFBJjb+2b55nVtyX6H2waSXQteO4MhExpqGzfW2Jia+9ORrSQyA==,iv:y26U1Vi5+9Oui3rG/EQgmuRUSC6Fm0N0lLUwDHLr3Ic=,tag:rICRduPbUkw8zgPQ8TSGkA==,type:str] - OIDC_CLIENT_SECRET: ENC[AES256_GCM,data:6vhXqNXZAiDZz0Ej08wCSCJKkKu14MwgszdOYErxILg9U4icBeEGe9u3oMLoMt0KRrzz8qPNewomLyrjt3yAhA==,iv:9tGtJL0pcCkzOMIWbyqo5hE/OE5yZPFTYi8Z4AJUbDA=,tag:pTB/wtotzk6kqjZFkNOWKw==,type:str] - OIDC_JWT_SIGNING_KEY: ENC[AES256_GCM,data:UdeqSmsdmi1VLfPN/47bg39u0fB166nJ8LtPJUTpu+gVoOI0Kik2PJZY5AWYBz5APGgq+3yWG38nwgVI0E7jMA==,iv:shUioenkSoMNGF+6LZg2hiMXitb95k68CCRlauSmBdw=,tag:l2aB5fmBA39VbiQ9AsP85Q==,type:str] + BEARER_TOKEN: ENC[AES256_GCM,data:Inz6hYmHP3ZTqztps+ZI0+N6dDAvRQiO68gqooQBipSKXrVtYxM6H+eXInTyLfTIXnJo1Qw+j4wKFSaPfG25Ng==,iv:Xkk5HwEAkdf5EoTL1TQBL/Ab1Ug7MkFgbksC/EV3rys=,tag:LswsBBMwKEir3uMIodzaQw==,type:str] + OIDC_CLIENT_SECRET: ENC[AES256_GCM,data:EEHlrt/5yWA/Uk+zFISWcqNMI5jh081mY3gzSzfTBNoktzPisClLaj6LgeI+E4cJwzd6rqznvlUr9GThv2/ecw==,iv:iFUC4J9LlkubV+9kWLh0Prxc140NppG2W5MpZKGBgj4=,tag:PgYH3PnLN5ElJyR38PuRTg==,type:str] + OIDC_JWT_SIGNING_KEY: ENC[AES256_GCM,data:O6W+GihlmOshr123TFoke7DtXJttkZBMaBogvw74k4RL4uKXhOeL9Hsd3LhGheimLC5FaQJZQDdjgEpCCnF9iA==,iv:a35L2UTiMMrvixAWIOVFYQVo9n2nkbDWQxIdZGof1Dk=,tag:V+3gOYQKF6twiTnjjMM7jg==,type:str] sops: age: - recipient: age1kct5g7d7eus2hvdnmx99ewsrtz70lhlasxa25euqwdctqhwqqpxqz0n7gg enc: | -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBSNDc1TmdqSU54Q3c5UlBY - Z3pIQk5reG45VW5XVVp1OFI0eWVTNnM3MmhvCnRpaHprRUhkbTM4TjZ5bTdYR1l6 - MkxrTldDby8vZlhjSzc1RmtBSkVsODgKLS0tIFhnVkIwMUJ2TWw4bXdkTWI0SzBj - WWx6OUduek5UMmx3cUg0RzZoWXN0TUUKendroGbxE+IGxnrQe5m3CmZQFwsGcjvO - kZxWTIIpsHCwLXpBq5kmtg5kn7eEvySd2oL/Gh71K3OjDmKxXpM9JA== + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB1a0diUlZEZVJ2c2xVZTJr + YngwcDBRdks4Z3JtV2RRR1NIdWplNDRBUmhRCmR3bmlQNEhZTHlsMktGVDd4cmRn + a0R4UjlPK1BCaHlBbkdud2hUNi84WW8KLS0tIHpUd2hqVnJMM1A3U1BQdFJ5bmpm + SWpPNU9Gc2lNUUgra1M4bHVLRzNqVzAKXR2z4AtBMMmiO+hIBWzwkPaU5SrdXdVD + IbhJlYW0eHOZzp0/5aE9VMFnxNC3Vd9S4A9uCyZpDExAlg741GUTtw== -----END AGE ENCRYPTED FILE----- - lastmodified: "2026-08-26T10:26:54Z" - mac: ENC[AES256_GCM,data:WKkjMnv0COt7AnQ7rFnrfKbkaqnBcoXaFmg7ebrQvv+JPECysv5vvc3+gyioAsilYoGhN7rNSdzeIInDv4OrT3NAtZB3nsqcEmmLpKM6Nfa0FBPFmmDzFvu8HVARM5cgkPBgQMoLSqh6ZV0gqyF8+kEc9wVQBrA7ZLhttXamgkM=,iv:UYPu4dFCKpne15JIz7T80taadFIipvw/9OO3f8QzDZk=,tag:aGBrdJ9Kzmr59DYfrQPHtg==,type:str] + lastmodified: "2026-08-26T10:27:02Z" + mac: ENC[AES256_GCM,data:YA40JH2uWjuYnCF3b8L72HopTPjoUyNp2iy6e8jlXPmPclzAxNjh+TL+M40FzkfI9zK8VSJuoUV5KxKc5Y/DuZVzp3o4+yBh4hcq2YRO43vJ+ckFpFWKTGk6tvPAmPfaCkSnwlQYWoO5Voz9/c5GqSFCG8oe3g1VA8JugXlJo30=,iv:hxYQpBQGder3L8BuNKiVL20vfCpKZAG95Rj2ZIfqHA8=,tag:6THOxFNB85EBxnJdOEDCRw==,type:str] encrypted_regex: ^(data|stringData)$ version: 3.11.0 diff --git a/clusters/base/apps/mosquitto/secret.enc.yaml b/clusters/base/apps/mosquitto/secret.enc.yaml index 41464f2..4a286a9 100644 --- a/clusters/base/apps/mosquitto/secret.enc.yaml +++ b/clusters/base/apps/mosquitto/secret.enc.yaml @@ -4,19 +4,19 @@ metadata: name: mosquitto-passwd namespace: mqtt stringData: - passwd: ENC[AES256_GCM,data:WgX2+X52PX/SfyFwRgznyV31f+cMfdjiDgRA+Dyu4n95wLwWuxTPEPHBhS5TpkpRQ3/UGSSzTmxT4TRrQxOV4fAdxchzPtso0pAPeY+xscRU2qJLxriaL9Dtu1gyEAS9Lspb+mj9HwSyij0AsHXQV2e+Nff20E5rIsfX311aYZ53xdgHjWMIOP0SznYAJHPYQXS4YNjhgMpT5CGTVloAYzLHH7zqxXulwbf45qtA9zEXt1fjZi9u3r1jTcZ/VA==,iv:OjVaYdS3iRhuYQEZzUyrcbXq4g0eZBylY16C0krXQsE=,tag:6SZabYdjAcwL7hpphi31qQ==,type:str] + passwd: ENC[AES256_GCM,data:QJAG3td80Zz1lofBEu0Mm/HkfiE/adTFzGFL6TofKf9VB44Of9oKc0DDdODJiMCoNlhJFmE0fdU5M/m+yUo3tJuGo9kHWMcmGbf3ORNLBde0QQXK3D5IHqS84Bs4obWzh9VD5kD6bXGm+YIw3lxKDvEupuGAf6mKGUSHImHyGTfdq7JeL8gOZmFQ4s+64+H4nFhe9yhJoq4t6WmK/AIBHH+LRns1n8NTW61j/UJypPTKja12k8aFyGBTlYO7ew==,iv:tWSIZO8xWsEw/Qe6A9pZbX4scl2Z7OVXu9ZE4gheip0=,tag:RCiv6bTNYWC/gPLPPlRfoA==,type:str] sops: age: - recipient: age1u236u5mzkzj72y4mfxx68gfqw0u0j6tdgkudnm5pdfpe7apq4u6s89jr2h enc: | -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBjeEE0RXYvN2hGMW5MNHBa - RzRSL1luL1FkdHFPZ2trZnZHREtOeEdMRFdvCnhhcG0wTUdWT3ArTkNYTG5yOUE2 - STZXN0s0NU9DbnI1MzJBL3NhWTZpTkUKLS0tIEtvRk9CSDNOdCthT09xZmx1NlBB - ZEs2MzVMd2hnLzZCU01mR1lBZkw1Sk0KbsQETQCBIdGk0coHdUE8Q9hs3ZAcp32m - YpekSy/Mao3HQxrdGkIRoDSqO9sPOQKUxlpQwOTbyRYy8x59IOO8EA== + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAwR0ZPUDNqZkQvR3Y4RFcv + SVpqM3NBSWxrVEM0c3IxcWRoNGxqajlheFdBCnF4enE0akY5UEhJck4vaUx3YW5C + KytxU01Icm0zcFNZb2dBa3BaUXBwZFUKLS0tICszUFJCZElTL3lDSE52OVBXOFhn + T1UrblIzb29VTlN5Q2VaSWtjR2N3MkkKi3HN5VoLCBOTNh3GIbQv/8zl/JFf43HX + 7hvRNZlI1CtQFgCM9SDC+7feB6rA21rUHmd5B13jpoRkp0j9KRUBLA== -----END AGE ENCRYPTED FILE----- - lastmodified: "2026-08-26T10:26:54Z" - mac: ENC[AES256_GCM,data:VWjRqS1kE4eOUAADvtII/7ckZ8bENiXibfr/izLPYgsn+e/TuBpivzvYM8h2O480ElD0eq8AmxH2SoEy6qLBM4orRQ0JjDAbW7Fi3zNmurnsGDpL7+YA9dKFg2xyrt1VDEebzGdOuqAp7WzXW4OdScZm6vSeIITf5hObLmFe9c4=,iv:ObNftLT8p0sxcYaPkMPC6LpMIJDaCrDUmblU3Nq6UkA=,tag:fNwieqUIWrv2nnZSHkTAfw==,type:str] + lastmodified: "2026-08-26T10:27:03Z" + mac: ENC[AES256_GCM,data:Iu4ocAifzRzKV9TxUZLYL2AjahmaA5cBdkbBVqh3wIAV+8fYb4iAwffpaEBs6FtN+4dVKREPulxHGlaQUownyoRoAgx7uD/LTa1ft0HF90o5m5mgBJRbYkM1Qcl2k0YnUYg5RdWxidxXHK+Wfd0kUr/LIS5JwrhOsL6Vezariss=,iv:KjI2+poUcgsfywDbmlCMJ21QelNurxqeY1Pt2MbFNN4=,tag:o9XXyjzLkvwH/IAQrxbLbg==,type:str] encrypted_regex: ^(data|stringData)$ version: 3.11.0 diff --git a/clusters/base/apps/photo-stats/configmap.yaml b/clusters/base/apps/photo-stats/configmap.yaml new file mode 100644 index 0000000..711aa65 --- /dev/null +++ b/clusters/base/apps/photo-stats/configmap.yaml @@ -0,0 +1,175 @@ +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" + CUTOFF = datetime(2025, 1, 1, tzinfo=timezone.utc).timestamp() + RESCAN_INTERVAL_SECONDS = 6 * 3600 + + state_lock = threading.Lock() + state = { + "status": "starting", + "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 = "

Counting files...

" + elif s["status"] == "scanning": + pct = s["percent"] + progress_html = f""" +

Progress: {s['processed']} / {s['total']} ({pct:.1f}%)

+
+ """ + error_html = f"

Error: {s['error']}

" if s["error"] else "" + return f""" + Photo library stats + + +

Photo library stats

+

Path: {ROOT}

+

Status: {s['status']}

+ {progress_html} + {error_html} + + + + + + + +
Total files{s['total_files']}
Total size{human_size(s['total_size'])} ({s['total_size']} bytes)
Files newer than 2025-01-01{s['recent_files']}
Size of files newer than 2025-01-01{human_size(s['recent_size'])} ({s['recent_size']} bytes)
Last scan started{s['started_at'] or '-'}
Last scan finished{s['finished_at'] or '-'}
+ """ + + + 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() diff --git a/clusters/base/apps/photo-stats/helmrelease.yaml b/clusters/base/apps/photo-stats/helmrelease.yaml new file mode 100644 index 0000000..ded6cd0 --- /dev/null +++ b/clusters/base/apps/photo-stats/helmrelease.yaml @@ -0,0 +1,99 @@ +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 diff --git a/clusters/base/apps/photo-stats/helmrepository.yaml b/clusters/base/apps/photo-stats/helmrepository.yaml new file mode 100644 index 0000000..c8f381a --- /dev/null +++ b/clusters/base/apps/photo-stats/helmrepository.yaml @@ -0,0 +1,10 @@ +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" diff --git a/clusters/base/apps/photo-stats/kustomization.yaml b/clusters/base/apps/photo-stats/kustomization.yaml new file mode 100644 index 0000000..39a396d --- /dev/null +++ b/clusters/base/apps/photo-stats/kustomization.yaml @@ -0,0 +1,7 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: + - helmrepository.yaml + - configmap.yaml + - pv-pvc-data.yaml + - helmrelease.yaml diff --git a/clusters/base/apps/photo-stats/pv-pvc-data.yaml b/clusters/base/apps/photo-stats/pv-pvc-data.yaml new file mode 100644 index 0000000..29bb943 --- /dev/null +++ b/clusters/base/apps/photo-stats/pv-pvc-data.yaml @@ -0,0 +1,37 @@ +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 diff --git a/clusters/base/apps/vaultwarden/secret.enc.yaml b/clusters/base/apps/vaultwarden/secret.enc.yaml index eb7ef42..a4bbfd4 100644 --- a/clusters/base/apps/vaultwarden/secret.enc.yaml +++ b/clusters/base/apps/vaultwarden/secret.enc.yaml @@ -4,20 +4,20 @@ metadata: name: vaultwarden-secrets namespace: vaultwarden stringData: - #ENC[AES256_GCM,data:THltq/7KwEpBVrMJE80mXlC1UWLjsSqCVtvXwSQ20vMjAApSmNDw/J322/LTnKwDYFFtSZ/lMqCZ,iv:igZroXjPGz9IS7tzuwAH884WtTusLgT68eztm4fz39c=,tag:cJvJ3jePkp9/tfODydIgDw==,type:comment] - ADMIN_TOKEN: ENC[AES256_GCM,data:xjN/8MSKGnqVyYxvV6s5bxbhXAa0pXpA03Km1U2YuGAHHfdIOlF/MsWCRY2zVS0WvvCBoSPmEiulooRIgZ2eGBgz44BX809PWqeAfptN2vcQbyYBuV+weynTgpkLieZs3OT8PqJHvMICbqazy3wrSlyI0otF/g==,iv:sJVNE2pYT7d51arI9P+MvgP83IjbIWEX+cETdOBm3/c=,tag:/D6KoCt0qipwYD1zc3E84Q==,type:str] + #ENC[AES256_GCM,data:Sq8wdrLjTEEPS6LsHKOd4M5lR2PBigCpEmLmMpCT+gFtlCanrJOssot3d11RZB4BvJj6SUHA1p18,iv:RSFf74+IUVendOHVlLmzRWDLNNpCs9eQ6K0PsZhsQ1M=,tag:4WSvmiH8X/T8cKLWHA4YJg==,type:comment] + ADMIN_TOKEN: ENC[AES256_GCM,data:Eu4b2jiDLdmSFCFbVyCaRAVisQ1jH2UON/AfG5aaycxXww/DPrK3CiWyEQV7xDrFpArlFjFVXOvahUYC91qNhSrGbXKfma4cT9H1s5GSLGy4+P4vWineD8dStiKkk6tOACBnq4/xU7dyPp8NuEs1E4TO8Nifiw==,iv:Emka0B/dUAWu/GSWAy6oERLEhcMW7EpYVxb5FsGU7GY=,tag:7fSiet1SNKSjJquRiee8Xw==,type:str] sops: age: - recipient: age109zta6l0cwpkxn5wek82kvauxn6yqrq80rsz4mvu5atdnpcn9pusuvnqk5 enc: | -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBIaC80UTlBWWlicGF5alBU - MjNDcEl0OEVXd3RhREw2Q2Joa2d1R0tIN0JNCm5qSHo2N2NoangxeTl4N0lTMjJv - bzhrVjZPUm9saWhvcHNvKzdQdHk5clkKLS0tIHUrVExLYVp3S0thazc1S0U1Y1VW - K2MxT0Z3RnpOT2JFYzZmTTEzR3hsdzQKnl8slZroL9NgbSSn/sYxSMKpdZ2WRz01 - fdoK+VZvYlxEG43RxdelBu/SGmeU/V56sUmoaL7t9tKaLMyja8IbGQ== + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA5WDNZazF0ZGRyZldjTTU0 + UXVIcFF6K1MxeFptV1psVUMxSU5LbVZ5em04CnA5VVQvcUQ5a1k1Q3daUXZMNFVI + YjhONGkraDljSGZMUi95RXhlK3cvWUkKLS0tIG1pS0M4WUh0elJ3dThjVzFBcExZ + U21MZlNteis2d1laY05HdW0zZEFuekUKpy3Mh/EQOly2oR0iR2HDvTWKUp1Buwo3 + 6LuGvEW1/j63fAK6QUR8TaBIUYemSS0pktg9rM0dN9cRaj2LhEwKFA== -----END AGE ENCRYPTED FILE----- - lastmodified: "2026-08-26T10:26:55Z" - mac: ENC[AES256_GCM,data:ZJjrZdL9HGmaM6a/iZCLKrnlRb28YlDbtlQB2WcMIbUtwXiY+CuvKWwCYPrvmzat/Vw/OHGOIJgkSc02BEguR+BzEk4jV0gAQbeWYJkl5uhRK8SRYE3dsC6nodKm7njIPJZOC5W2z/+U5DiWMJrP1dkt7L6DRWJg3wrtcVXv8D8=,iv:LLOAdQAw7pVeuoB8R4KpQmb3LakBNiq8NZvAHgKRo0I=,tag:MNMcmV1svsN5xa9nJ/HQFA==,type:str] + lastmodified: "2026-08-26T10:27:04Z" + mac: ENC[AES256_GCM,data:lNONeW13K6Tj4qp7hbfn3HziZa/zHh27P/BjdUjgiUEXtEjAaZLhz0tSKf0b4vKqk9Bigw8MscjVdhQUHRF9/eNNg+Nb/s6P3IchKMYRspKX4pbxx9c9Owgg7s/6d43D1xiKf+QstLZdJ0T2T5TF98WPNuwiVe1gSQEKgrgGY7w=,iv:lBHZ+DNVQjL9RASkH41/2RF7aTfYBTbLDihYBG05fBo=,tag:K40FzebWm36wrku0o38aOg==,type:str] encrypted_regex: ^(data|stringData)$ version: 3.11.0 diff --git a/clusters/base/apps/webdav/secret.enc.yaml b/clusters/base/apps/webdav/secret.enc.yaml index 1633302..dd75044 100644 --- a/clusters/base/apps/webdav/secret.enc.yaml +++ b/clusters/base/apps/webdav/secret.enc.yaml @@ -4,20 +4,20 @@ metadata: name: webdav-secrets namespace: webdav stringData: - WEBDAV_USERNAME: ENC[AES256_GCM,data:UfbWqs4=,iv:xkkVtgClX0vVFi8B8+yx5gGRZ23SaLXAG8a1qJRxrGI=,tag:SygijCFPSRsaOJ7i0/pXrw==,type:str] - WEBDAV_PASSWORD: ENC[AES256_GCM,data:HyseceanaRGCybMgdRyDNUbYbTLShnu8Wn5Y/LoOjNUhXa8IWSzfPEp02nSZdY6Q,iv:VXcD47n70Ghu5rzfANUpADGfjv7CUdKc00JzNI7VOr0=,tag:bM7hkjxxmrX+690d/DCpKA==,type:str] + WEBDAV_USERNAME: ENC[AES256_GCM,data:W90Dfoo=,iv:vmkJMPaVJ1T+xUaFVsIhTqXJC0rD/1EV8ofCujkyeEM=,tag:V27OH9FGCYGs3HH7pBlSCg==,type:str] + WEBDAV_PASSWORD: ENC[AES256_GCM,data:St7zfrWnJ2b74BcgnTCYYhFhLlMMYUOjDcxSw6vNrUbrsjh4n2XLib+xc9B7CHhP,iv:P7efLNC08AK/DDzyePyGhl8X+b0WuC9RtyvIrm6pIts=,tag:4iEAfvT+Qd0HC7a2f9V3Qg==,type:str] sops: age: - recipient: age1y8t9v56yuvskznddqfsd4yddzzch0yf2dutvvt8rrx6rjh5f9g0s3qeays enc: | -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBvV2lEZlZmLzl0OXZFWEdP - V0grT20ybGFIVE1aRFREME9sYW4rNlcvZzBVCkpkK2EwNHgyOGo2S3VwK1JCMlYw - RzFTcENHMzVSa0t4N3VUZUhxZk0vbG8KLS0tIDIvdjM0aERnTmdXRmF1Ni9UbTFw - WEFBSnd0TFJVUEU4S2R3WTZPR0cwSG8K9lfv1pMSlEc6Ik8B6eVcdUHMVrUkNtBm - EisBk5UttT8PoEw7jKw4OmkWyG9PKhuGj6EGI18saujICUinBFIHJw== + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSByNkJKdWQ1V09vZWU1ZHY2 + MGwraExVNWhlMml1R2pLR2NvZ2orNVc2K3d3CkRLd0ZaWmh6OUVKVk9EbGZJUTlQ + V04rOHhaWXVES2pEOFhJU2ZjbG5MMFkKLS0tIFpLVGU1K0diTTZFVThmVU1xQjlH + S1VBTDVRNmpCMXVodEVYRDRlS0lTMkUKz+pTnHz8umsDh943JDdyyisUsFHlZKQQ + a8qLtzb6JoJQaUANNLgi70tb2JoXDTLm7N5l2f84HG4F5aEPJxUN6A== -----END AGE ENCRYPTED FILE----- - lastmodified: "2026-08-26T10:26:56Z" - mac: ENC[AES256_GCM,data:FScG+0XDcgAezvwjNX//zuYjKTCy5ABAE/xrINKaGAF2ntKeIo3234DnF8VoAyLC+/9bQZfYV2+AE6YbJifrGFjMtjcvIYsMpM5N/QdQNKOzyfs45w/4kbbmdQhqCfcTDMu5/CitE6lSmkYRvJG0+ck0thxc+OX2wSaBIOciCNA=,iv:f62kG5AUL9PMH9jjbAbespMGt0vknuddgXXO+V27yos=,tag:yA931FYuj+IWKDumqM9lZg==,type:str] + lastmodified: "2026-08-26T10:27:04Z" + mac: ENC[AES256_GCM,data:vjB7JuakuH6ns8CA/QXKwwxqGe+5jSNP1xTF5rSeoXJbd93SibyLXMCLIE3Lm6ijAeVm6nZItplBf2Ol2zB9AHy3KRVgfrdaTHFVZxV6Z5PFLfROLJ2yseljEP8ysEADRggPPPwdzf2hWDOer7bp5bSrMsC0epZ6osgDYG0960I=,iv:oX6lgHXDPXJkPX+b1T+7LL4G6BCdX0D6qVNwHsl+xJg=,tag:2GGp+6Hgx6BRFfjITZnZEA==,type:str] encrypted_regex: ^(data|stringData)$ version: 3.11.0 diff --git a/clusters/base/apps/zigbee2mqtt/secret.enc.yaml b/clusters/base/apps/zigbee2mqtt/secret.enc.yaml index 0ec39a4..7fed7b7 100644 --- a/clusters/base/apps/zigbee2mqtt/secret.enc.yaml +++ b/clusters/base/apps/zigbee2mqtt/secret.enc.yaml @@ -4,19 +4,19 @@ metadata: name: zigbee2mqtt-secrets namespace: zigbee2mqtt stringData: - secret.yaml: ENC[AES256_GCM,data:WEWYDE2qxId6BBcq24tTRRg8myNsAagHQDF1J3/6RCedrue/io1MLXDTGAgTcSuMrVb8cKDcMQI8g5dRBz0VAF88+eYLj52aFOJ3FrOWePxPGAYbtiV30O0tU2lIsxjwR5VyIdtifpJLTH5AHFFe7S+mhGQPuEkbFaBfYRY=,iv:Qg7UALLLFsDXx56r0jbpOVXa8F9YJ9ZZSIIUaAkjI0Y=,tag:EJ4YlXWxOwPddGVmxD75IQ==,type:str] + secret.yaml: ENC[AES256_GCM,data:Jzp4iCtmc/HxpCujnlmDZ1uQ09wc2ayg9y60uhpcbSbUs21ROxaOeN1TMzkiAlGXfSUz8fCy88SPDezGw42CY5eJ8bJCkPpGFTPo0h7F7LNr5Fvywl5Vr/IB8gcdntucCutRmo8TZThfw71vCQzoD+RvvUt/DZIJN7BiCbk=,iv:55jEHYOCU3IoeI2tJixzz9UEVnifqCuMFwE5IYaMPTQ=,tag:+Fy5b3xyEpH9Ozgz6TuQIg==,type:str] sops: age: - recipient: age1tu4xgfefvgdda0vn2thaqndq4p9tuydq2ud6qa98tzzgnff6749qnlcx29 enc: | -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAycVhXTTh6VTNHQk1OWGps - KzRsb0RMYkdrcHN4OHRkN1g2YlM1SzJrckFVCnZHYVA2L2x3Vkpvc3NRNkFjbnJj - RUJOQjhXV2dEQitjWGdZenQwUUZ4Wm8KLS0tIG1IQ2ZPT1NjWUU2OGhXL2o0MGlx - V1ZxQkZLZVo3N0owRURVaGI0eTFOVzQKrMDV4gJ5sT1AqTyY1F1QbK3HXPukIVhL - BsQaGEO1SqopOYkYgeDqT6Cbb/L3nkgDoE0VcIsdU4G1U2cNaaU3gQ== + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBickZDaFNjSlkxOXk5STRo + ZGpCMWxPbkJCVkhuaWRqdTl3b2g3dU5NZXprCi9xbzAvci96eEpnaDJLeG1mQWFz + SzJLeHZQc05KenpPOWNqQ3VUOUJoLzQKLS0tIFo2VTB1RGQxR0doYktSM3I1YWM0 + b01IQUM0NzFacUs1aVBYb2VPUjducGcKYnBZVphRgyKJWIMpmpFTGl1cpUJ/DoU4 + 8LdC7Aa0xWiIORjeHopeWFeOYTNaCkBWZ303LTAjS6vhh+MsMgcCcQ== -----END AGE ENCRYPTED FILE----- - lastmodified: "2026-08-26T10:26:57Z" - mac: ENC[AES256_GCM,data:/AtpxHBsfW57Y3ubiMyGpu8Pu0hHa9MokVUAedC2gsemfa2K9cD/G4QYbENSFf9nQ8ryiZDGCOVEeney4lLHKnxPKpzffekQMNc7crkIQwo/5nJuHiQeauMWBYowFTE3ToU2jRMxZ9T8CGpKRfzO6SWxrpC+brmbrlEz8QYRZWE=,iv:3F7R13u3/sKEEuO5gOr5M8tgL7mPohqSVgu5MBgTGL4=,tag:k3gS/EscAoXSRHImm2K7dw==,type:str] + lastmodified: "2026-08-26T10:27:05Z" + mac: ENC[AES256_GCM,data:GVIA/B4iQ507OH35gUKsxQb8IDwhuvnPsgUHz3yp9r/lWKiC7344wdJEXceAYxRfw5SJ29KrRmzlqYURWYd4GFc/6MVkt5lAC9yCvfuphcbSg5Ei6oVhsgsrj6HAgilhecyO824Cw33wOUQa0eOH+mKC1rN4xfAM0NbDCiQY2dY=,iv:Zq9PZTEdcf4fG+bhAbhThPovSlEHqlJW5azvyVEkU+g=,tag:Bb7oC5V9HGI+8fs9XNXGMg==,type:str] encrypted_regex: ^(data|stringData)$ version: 3.11.0 diff --git a/clusters/base/infra/longhorn/longhorn-system/secret.enc.yaml b/clusters/base/infra/longhorn/longhorn-system/secret.enc.yaml index e72f793..bec38e0 100644 --- a/clusters/base/infra/longhorn/longhorn-system/secret.enc.yaml +++ b/clusters/base/infra/longhorn/longhorn-system/secret.enc.yaml @@ -4,21 +4,21 @@ metadata: name: longhorn-backup-target-secret namespace: longhorn-system stringData: - AWS_ACCESS_KEY_ID: ENC[AES256_GCM,data:kAxayQHJJlYP5P/Qg3bfGARO3ws=,iv:QxmY1tJcPER6bNZvtTBjQyCWPdEKroJxBqFaD89B0nE=,tag:7OfX60UbPIrML0nQwlantw==,type:str] - AWS_SECRET_ACCESS_KEY: ENC[AES256_GCM,data:GCLL628VnGXtnSQ/GMzum0Tlob5aoUo4nZuRYgfy8Pdu/AMlvYFhng==,iv:lFhwXvj4D+se6dMhBAF66Bku5RNUa9Un4vNo3ARTK8Q=,tag:E4uq78IJYRT/1EZwb2e2Aw==,type:str] - AWS_ENDPOINTS: ENC[AES256_GCM,data:8cVRBo/eKO5AGSYRLnCAyTRG0uqIx5vRqlJEyUHfbc1OuP2Irj+GHP3uM6RjiJUXUWkJ51S90Rrt7nvlQg==,iv:zzmzHqhi//+/n7A68h0qRukeLtJ3tDFBlghSxR6rsJo=,tag:kVsEEFpo5d88J0HaJoslmQ==,type:str] + AWS_ACCESS_KEY_ID: ENC[AES256_GCM,data:ZPHzn70fTTlktcXJTm2CaNhMmiQ=,iv:yyJPkdGZqY25UVcKs3rL+CobBSjUVb4pq71FA+Sh7X0=,tag:rKH6QWJoZUxZc3/iel/Yyw==,type:str] + AWS_SECRET_ACCESS_KEY: ENC[AES256_GCM,data:2uiWufb57rx191+S472IZzDer0g0VNWUR3Ol9xqIl7FUzaq48dPzLQ==,iv:KTdxvcIbyuuXkNp+SD4cX3g35iYzUltf1V4TKGH6Z7I=,tag:sxsCUE59rNpovGK+ocrNUw==,type:str] + AWS_ENDPOINTS: ENC[AES256_GCM,data:YDF01AWElo0avLZ57q5Qqh0Rxkk2Xl6AzaqG4k5KKkZdth1LHRJ1pxW3zYLl8AyrOaKAXQvlciu++V/sgg==,iv:Dq7adJVsg8Vjrr2bAP67pWUKRtIay9s9DcEUzY3LOlA=,tag:TxAiHorV/AavZgqP7z4XvQ==,type:str] sops: age: - recipient: age18hhmdmupj90zjgjpxk3z5cf3lx36hcznnmqsp0fpyg50823pudrqjupydt enc: | -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSArdUlwTVQwa0ZzWEdUUXZk - T1RGNFJiOWFpVnA5emNMQS9mZTc1cjBwckZBCjNac09XNnV2ZFRKQkNkV1dIWEg3 - TmFKT3RDcFptSmh4VXgxVVZ1ODNkS2sKLS0tIEJPT3Nxd3hCbjg1QzRwTTFYckQz - SU5CYXFNdklpSktoREZLZC96UHl5czAKEqV76PrD+6whVKJH8XyIac6emtqIrbX0 - k251UN0K0tidSFZ7bz8iRK5I2Fh1LzNpq+XomBh12AjXgJktjDZ0Zg== + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBLREttNm9CdnpPOTI0OGlK + Qkc3aDZmZkJMcnpyQ0FvdjBXSmNEMHRPWWdjCnRPQmdURFpJbGF6ck5GekQzTXRi + YlBZZFZNZFB5SXROUjh1N2x3UUt5UzQKLS0tIHplUk14VkNKQTBMbUN2RTQ5Zlp5 + YmE5aXIvcTAxdDVRa2FrejI4QUs4NFEKOcys+MuoW+pKiyb+JLJ64IvTnbVvXppd + DVZpYPxi3+BLOY18Vi0FuVwm0bY6gHrdWRu4bphS7Q10cHT6hasa8Q== -----END AGE ENCRYPTED FILE----- - lastmodified: "2026-08-26T10:26:57Z" - mac: ENC[AES256_GCM,data:II69xHd5Ay2MNqgkTKckoubQiIz+WrwBQpaL5KWflq04tTClF0VaEWj6j4qKEE5lfLpv7p3O4cC9UYkh/otsNJIRMCPh7ixOPc8x7wd9ceF7Tmea3LbwTMsYvJPlowDivYzfFmIoF8tA2c/HRdOT8gdKP0jCcka3BBcSyTl2aQs=,iv:RT/MHeJsUCm+hwFoVYWfzGLwtif5p9uVeDTHwpyo/aE=,tag:xlIXKHJfmLUsZczoVTn19A==,type:str] + lastmodified: "2026-08-26T10:27:06Z" + mac: ENC[AES256_GCM,data:cAfmtVpmtm6830kPK/a8YA4XN5acVZ26u3SezNZ3bEG1wtwLM+aoclj9HWU9MaevdF6Pa0rfD6/vme6sqamjPaNa6BBufRBNwzgUB04yQTNyV2BbJ5oHH9uh6DfQPxIjFBok5Kc6upA5NjSOC9UZZLtjmSB74Ykkerdc1BGM5k4=,iv:Nq5BhphQQG4RUfgyZ5jmvCGa4sIjB4/VzWOw7i7WJuM=,tag:vMW5ZqXYocdw0zF4bducjw==,type:str] encrypted_regex: ^(data|stringData)$ version: 3.11.0 diff --git a/clusters/base/infra/longhorn/s3-backup-proxy/secret.enc.yaml b/clusters/base/infra/longhorn/s3-backup-proxy/secret.enc.yaml index 7379524..0274d60 100644 --- a/clusters/base/infra/longhorn/s3-backup-proxy/secret.enc.yaml +++ b/clusters/base/infra/longhorn/s3-backup-proxy/secret.enc.yaml @@ -4,24 +4,24 @@ metadata: name: s3-backup-proxy-secrets namespace: longhorn-system stringData: - WASABI_ACCESS_KEY_ID: ENC[AES256_GCM,data:xTKTVs40ee+2LZhF8dRKJ6yH/6M=,iv:hCG/KpY5o4LFbCMv3XOc/XatoFsw2bCfCR3oZvGktro=,tag:19i0oHwqkK+KTv11C4n4Lg==,type:str] - WASABI_SECRET_ACCESS_KEY: ENC[AES256_GCM,data:L/aDOLvyP59VhJO/G/nhnKKun2D18cFZ7plXZz/h53GbxN8OEjeT9Q==,iv:THEkt4TWzeaRszSaZDHIjheUOqKQD/PREiztay72+ls=,tag:eRfCi38J0lnKl2IF2zW+Iw==,type:str] - CRYPT_PASSWORD: ENC[AES256_GCM,data:xISIVuxj/gjfqtB/cSOKXSyUVDu4vISSXNg76yTl913Hf+coVAs+GfIx6w==,iv:nCnsDVADWodWE7lsm/rBGpMQ4FwIOFHTwCWRhZfVt8c=,tag:QCfigqI+NgsOk5O7jhf/yA==,type:str] - CRYPT_PASSWORD2: ENC[AES256_GCM,data:KfBNxWZF4nS+s9uH0NEk/kJaFxQA/v1qZFEbYalkLFv1kttU2YK63PADkw==,iv:up46WBg3cPXS6LNFbLQoSNHGB/4Bnp4Aa4iw9HB+9h4=,tag:hy0K4ZNJtrO44Ann9Aebzw==,type:str] - PROXY_ACCESS_KEY: ENC[AES256_GCM,data:xW5LowuU7UlMaG1XSujzrIpDpAo=,iv:kBEJQu/iyLwr33+A+1OM50HNLbqPP5Ct+aR3FMn4TA4=,tag:JaLBdAWdGehW/RKj8AyA4w==,type:str] - PROXY_SECRET_KEY: ENC[AES256_GCM,data:2d9+aY6Y5/P/ylBxSkYhg/om/lHlWn/ATorl5sZThrMisyjY7gFsFg==,iv:k+Ty3ApNWCVv/tQUgC2kF6dIkKE2Hv9ACyPQZ/UM374=,tag:7MuSpoX5dfc0Ws8lvZjc+A==,type:str] + WASABI_ACCESS_KEY_ID: ENC[AES256_GCM,data:/bXM9lcWza6rogcwSaC8p1RaEoU=,iv:s3MQ/fLRW1EwjEt7p+j6YWqI5fVTG59LkmhQHRrphO4=,tag:pzb2PzuNgw/X6mqBcwoozA==,type:str] + WASABI_SECRET_ACCESS_KEY: ENC[AES256_GCM,data:vCIW9VIlFO1o6bj6jx9CCCfTAkY5bcLRMuODqCaJ+KQCknuFq5N+xQ==,iv:vsPw9o6AV5CrDRh23VsNCZmOHyjtjXDyJbl+aeBB1ow=,tag:1BMEZlDmzftGvHHc/r/Yrw==,type:str] + CRYPT_PASSWORD: ENC[AES256_GCM,data:Q7MOvwhYu0WgqGDYpiXWjSRKcBhjAlUM5J3fk7Sl/e4ALnyryIsjutcQDA==,iv:y6GZ6ZacJMrOryJnxrrJ9ePYm+qAQqZSo1h34OKWu/w=,tag:9JMNmz+A8k09zE1Vo3euGA==,type:str] + CRYPT_PASSWORD2: ENC[AES256_GCM,data:lKu2fN0w3BLOl1Y8psY4bJzBCtYffAggQwfbe+StkIGOImuURpZJm0nopw==,iv:azU3sCSDYeahWlEuU+Hywr8H4Mz2TvBm6WQQCMsDxhM=,tag:dFLCtyG5IDhaV4jqBwhVeA==,type:str] + PROXY_ACCESS_KEY: ENC[AES256_GCM,data:WiY9BE78eEAmYGk0DjwE/tnUAsw=,iv:4jKzOOmJ3Dd+Lba7UiRO+F87eqbFDdAVdMbRcwrouRY=,tag:pqReD8mlKSVJ3rEaR3vy9g==,type:str] + PROXY_SECRET_KEY: ENC[AES256_GCM,data:inQxFJqttogy40N5DeU6j1tltQXJuAP3fJ6EGvK/KyyBoQHhAlcg6Q==,iv:orNJvCoXAMiIAqsNZO0m+winQabIwseyE3ICSP/qmJs=,tag:TbyH8Wp9rNpAs6p/zkQMDQ==,type:str] sops: age: - recipient: age15vc3geq4lsec69rnxczluvwgcexeqae02zxzjpswsuatthaasu7qzath48 enc: | -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBXQ1hUdEt2ZWUweGRqalZq - RWNHcVMybFByWU9XUm93R1N2ZzFHQmJLWmtnCldneUJtMCtMUWhLMWRBSng1cjN6 - YzVMajN4a0Y0azFJQzFUclVWclJkM2MKLS0tIEhKQVp6TC96YUl2MGlWREw3bDBn - MS9Cc1NVelp4NUt5dlp1TGNtcnY4c2sKrb0mbFyz+d1H6Rz0+uq/mfUgYXB6Vp0W - NZkvuGa25cxB6CFdzenWs/pvf4e7c9qutqCk9h1NjSYJy4NSpHG4CQ== + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBTazZZL0YzZ1M0UDdzY1kv + K1ByNUY2Ykx6K1d6V1NkZFhqcC9tbC9LOTJNCkpaeW8yN2h4d29iOFNFTWMzWERZ + eWROVmZXc2VpSVp1NTdtdTQwa3JDbFUKLS0tIGFIZWcrb3RvdFFmVHBGTllFMVVp + U2pmSUY5TjJpNENHVEQ1WHJxM2h0NFkKBqipEvH05cCrOK2YyrJR4mueigQEHrEd + CsgqMvhQeMk12xatTwECjuSFfNd+WzSQBbES86n6A7T50NmXdIYGCw== -----END AGE ENCRYPTED FILE----- - lastmodified: "2026-08-26T10:26:58Z" - mac: ENC[AES256_GCM,data:YBSPMh1sKeHb4DAgdHZsNbSv95gc00p7fONGIa7r7bm55uBDsXzTbVwvEjnkzFJYAqXudlNDcA1dyK+bnpguKUdJb6LuFdQyRgqMvfgOdvtlu3/xZIEYRaALcj4FUs3ITDXn1jCuc8uVBcDTFgui4hve3KjqdeQvSHmzIHCpDvI=,iv:pykF25ERTJ8/AyisBVRUyPdvUNSrFp0ePETB/+lIx5k=,tag:1R68dA8Y0XWAwGG2S//iEg==,type:str] + lastmodified: "2026-08-26T10:27:07Z" + mac: ENC[AES256_GCM,data:+6wq0xuP2mTUwMFmjU6gkj+2bRJgouxM2RK+5z5CFDuizYxSdex1PZt5+aMOElnZbK2QAhOIOWLt1btgSoBPiop6Wo320lxCEGHvcAWk8obDemJHx4cAe9eyKWkD/2pjED72Rh4e+t8kd5obTQuwGE8vSGUi33NDT2hAUXaSBM4=,iv:PZ6HbyoRX5ImXqpQn0GbPsNJjwDnXOab53tgLpvEBMY=,tag:/M8cuXF8+LBRBuonewRaBQ==,type:str] encrypted_regex: ^(data|stringData)$ version: 3.11.0 diff --git a/clusters/base/namespaces/photo-stats.yaml b/clusters/base/namespaces/photo-stats.yaml new file mode 100644 index 0000000..0331213 --- /dev/null +++ b/clusters/base/namespaces/photo-stats.yaml @@ -0,0 +1,4 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: photo-stats diff --git a/clusters/home/apps/kustomization.yaml b/clusters/home/apps/kustomization.yaml index 5e191bb..dcd3c1e 100644 --- a/clusters/home/apps/kustomization.yaml +++ b/clusters/home/apps/kustomization.yaml @@ -14,4 +14,5 @@ resources: - fava.yaml - infcloud.yaml - syncthing.yaml - - nfs-photo.yaml \ No newline at end of file + - nfs-photo.yaml + - photo-stats.yaml \ No newline at end of file diff --git a/clusters/home/apps/photo-stats.yaml b/clusters/home/apps/photo-stats.yaml new file mode 100644 index 0000000..3086112 --- /dev/null +++ b/clusters/home/apps/photo-stats.yaml @@ -0,0 +1,17 @@ +apiVersion: kustomize.toolkit.fluxcd.io/v1 +kind: Kustomization +metadata: + name: photo-stats + namespace: flux-system +spec: + interval: 10m + sourceRef: + kind: GitRepository + name: flux-system + path: ./clusters/base/apps/photo-stats + prune: true + wait: true + dependsOn: + - name: namespaces + - name: infra + retryInterval: 5s diff --git a/clusters/home/namespaces/kustomization.yaml b/clusters/home/namespaces/kustomization.yaml index 8a8d849..cb7ffb7 100644 --- a/clusters/home/namespaces/kustomization.yaml +++ b/clusters/home/namespaces/kustomization.yaml @@ -15,3 +15,4 @@ resources: - ../../base/namespaces/finance.yaml - ../../base/namespaces/nfs.yaml - ../../base/namespaces/syncthing.yaml + - ../../base/namespaces/photo-stats.yaml