cluster

Infrastructure files for Nordgedanken and Midnightthoughts.
git clone git://archive.git.mtrnord.blog/MTRNord/cluster.git
Log | Files | Refs | README

commit d96518eb23c5df6905ce93be100f1c3316df618b
parent dbd1a99b8f17e7c94535c8bc5a2f23e82e7400fb
Author: MTRNord <MTRNord@users.noreply.github.com>
Date:   Sat, 30 Aug 2025 16:46:33 +0200

Add matrix org statistics

Diffstat:
Mapps/talos_cluster/draupnir-synapse/release.yaml | 18+++++++++---------
Mapps/talos_cluster/draupnir4all/deployment.yaml | 180+++++++++++++++++++++++++++++++++++++------------------------------------------
Mapps/talos_cluster/envoy-gateway/gateway_settings.yaml | 12++++++++++++
Mapps/talos_cluster/kimai/release.yaml | 36++++++++++++++++++------------------
Mapps/talos_cluster/mailserver/release.yaml | 28++++++++++++++--------------
Mapps/talos_cluster/matrix-org-statistics/deployment.yaml | 105+++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------
Mapps/talos_cluster/vaultwarden/release.yaml | 36++++++++++++++++++------------------
7 files changed, 226 insertions(+), 189 deletions(-)

diff --git a/apps/talos_cluster/draupnir-synapse/release.yaml b/apps/talos_cluster/draupnir-synapse/release.yaml @@ -104,7 +104,7 @@ spec: emptyDir: {} - name: configs secret: - secretName: ENC[AES256_GCM,data:m7x2Z3oCmA6xIRqbkrccx91eNA==,iv:TsKqYTJLDiFtnH0TmLOsFLlwEdNg1r8hJYZdkhtWOGo=,tag:0SXGKKpLh0yUSHcqQ+aKcg==,type:str] + secretName: ENC[AES256_GCM,data:m7x2Z3oCmA6xIRqbkrccx91eNA==,iv:TsKqYTJLDiFtnH0TmLOsFLlwEdNg1r8hJYZdkhtWOGo=,tag:0SXGKKpLh0yUSHcqQ+aKcg==,type:str] extraConfig: opentracing: enabled: false @@ -319,7 +319,7 @@ spec: emptyDir: {} - name: configs secret: - secretName: ENC[AES256_GCM,data:aVOK2h6KTIKNX8Ypa+AF2UOITA==,iv:PIyZ94Tfr84QUqut2oFu09bYRGwJiKpEpfBmWtQZNXE=,tag:QZflZ3hovkN5a1Bs5S4oMg==,type:str] + secretName: ENC[AES256_GCM,data:aVOK2h6KTIKNX8Ypa+AF2UOITA==,iv:PIyZ94Tfr84QUqut2oFu09bYRGwJiKpEpfBmWtQZNXE=,tag:QZflZ3hovkN5a1Bs5S4oMg==,type:str] ## Liveness probe configuration to use ## livenessProbe: @@ -392,13 +392,13 @@ sops: age: - recipient: age1esjyg2qfy49awv0ptkzvpk425adczjr38m37w2mmcahzc4p8n54sll2nzh enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB2dFpjM1lmcllpR0RKdXdv - bTAydDBWbVRoRXhDUjRwc0FxcjdNU1VNalNJCjcwWE9mQnUydU9QdGZNVWRvSk5k - NWRiY1diZy9XRkgxaEgycVp5ZHgyQlkKLS0tIFNtbFJRdm5lMklZUS9FL0xrMW5F - RUwrQmhKTlRLVjk3QlRxQ3pUb3pEMHcKRT/WEzTcOmlzlvMT5ddT82d8inRAgvyQ - qom+xJO9SM2jcej4kl+0cMJ8zqsrXmw7PukTLjKXOh6egmw+p6qMpQ== - -----END AGE ENCRYPTED FILE----- + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB2dFpjM1lmcllpR0RKdXdv + bTAydDBWbVRoRXhDUjRwc0FxcjdNU1VNalNJCjcwWE9mQnUydU9QdGZNVWRvSk5k + NWRiY1diZy9XRkgxaEgycVp5ZHgyQlkKLS0tIFNtbFJRdm5lMklZUS9FL0xrMW5F + RUwrQmhKTlRLVjk3QlRxQ3pUb3pEMHcKRT/WEzTcOmlzlvMT5ddT82d8inRAgvyQ + qom+xJO9SM2jcej4kl+0cMJ8zqsrXmw7PukTLjKXOh6egmw+p6qMpQ== + -----END AGE ENCRYPTED FILE----- lastmodified: "2025-01-18T16:41:05Z" mac: ENC[AES256_GCM,data:bejkU903B5B+O8+zzTa0Rypwfq29N94yWBw9/kOf/XByJZYdsCtC6kYX6G/QLwPRRvKuONYEozAxqFbiTqkR1NVyzqDf8Oj+KEXtQBf3P0SY334yCmaeajHLlKm6kanD5NnpVSmX3BcuVfTGwQK3jZ+Kab+cDNu4/AGqw+6Vnxg=,iv:vg1mrpIUNny4WqqS666kM4yvZpI0TuL7ViSP+ib7HVM=,tag:JF0OdVZino0cP0+Bmx+slw==,type:str] pgp: [] diff --git a/apps/talos_cluster/draupnir4all/deployment.yaml b/apps/talos_cluster/draupnir4all/deployment.yaml @@ -42,11 +42,11 @@ spec: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: - matchExpressions: - - key: app - operator: In - values: - - draupnir4all + matchExpressions: + - key: app + operator: In + values: + - draupnir4all topologyKey: "kubernetes.io/hostname" containers: - name: draupnir4all @@ -67,107 +67,97 @@ spec: # - name: TRACING_METRIC_URL # value: http://tempo.monitoring.svc.cluster.local:4318/v1/metrics env: - - name: NODE_OPTIONS - value: "--trace-warnings" + - name: NODE_OPTIONS + value: "--trace-warnings" command: ["./draupnir-entrypoint.sh"] - args: - [ - "appservice", - "-c", - "/data/config/config.appservice.yaml", - "-f", - "/data/config/draupnir-registration.yaml", - "--draupnir-config", - "/data/config/draupnir-config.yaml", - "-p", - "9000", - ] + args: ["appservice", "-c", "/data/config/config.appservice.yaml", "-f", "/data/config/draupnir-registration.yaml", + "--draupnir-config", "/data/config/draupnir-config.yaml", "-p", "9000"] resources: - limits: {} - requests: - memory: "344Mi" - cpu: "252m" + limits: {} + requests: + memory: "344Mi" + cpu: "252m" securityContext: - runAsUser: 1000 - runAsGroup: 1000 - readOnlyRootFilesystem: true + runAsUser: 1000 + runAsGroup: 1000 + readOnlyRootFilesystem: true ports: - - containerPort: 9001 - name: api - protocol: TCP - - containerPort: 9000 - name: appservice - protocol: TCP + - containerPort: 9001 + name: api + protocol: TCP + - containerPort: 9000 + name: appservice + protocol: TCP volumeMounts: - - name: configs - mountPath: "/data/config" - readOnly: true - - mountPath: /data/storage - name: storage - - mountPath: /tmp - name: tmp + - name: configs + mountPath: "/data/config" + readOnly: true + - mountPath: /data/storage + name: storage + - mountPath: /tmp + name: tmp livenessProbe: - httpGet: - path: /healthz - port: appservice - scheme: HTTP - initialDelaySeconds: 15 - periodSeconds: 10 + httpGet: + path: /healthz + port: appservice + scheme: HTTP + initialDelaySeconds: 15 + periodSeconds: 10 startupProbe: - httpGet: - path: /healthz - port: appservice - initialDelaySeconds: 15 - failureThreshold: 30 - periodSeconds: 10 - # - name: draupnir4all-web - # image: ghcr.io/mtrnord/draupnir4all-web:latest - # imagePullPolicy: Always - # env: - # - name: SESSION_SECRET - # valueFrom: - # secretKeyRef: - # name: draupnir4all-web - # key: session-secret - # - name: D4ALL_INSTANCE_ADDRESS - # value: "http://localhost:9001" - # resources: - # limits: {} - # requests: - # memory: "344Mi" - # cpu: "252m" - # securityContext: - # runAsUser: 1000 - # runAsGroup: 1000 - # readOnlyRootFilesystem: true - # ports: - # - containerPort: 3000 - # name: web - # protocol: TCP - # volumeMounts: - # - mountPath: /tmp - # name: tmp - # livenessProbe: - # httpGet: - # path: / - # port: web - # scheme: HTTP - # initialDelaySeconds: 15 - # periodSeconds: 10 - # startupProbe: - # httpGet: - # path: / - # port: web - # initialDelaySeconds: 15 - # failureThreshold: 30 - # periodSeconds: 10 + httpGet: + path: /healthz + port: appservice + initialDelaySeconds: 15 + failureThreshold: 30 + periodSeconds: 10 + # - name: draupnir4all-web + # image: ghcr.io/mtrnord/draupnir4all-web:latest + # imagePullPolicy: Always + # env: + # - name: SESSION_SECRET + # valueFrom: + # secretKeyRef: + # name: draupnir4all-web + # key: session-secret + # - name: D4ALL_INSTANCE_ADDRESS + # value: "http://localhost:9001" + # resources: + # limits: {} + # requests: + # memory: "344Mi" + # cpu: "252m" + # securityContext: + # runAsUser: 1000 + # runAsGroup: 1000 + # readOnlyRootFilesystem: true + # ports: + # - containerPort: 3000 + # name: web + # protocol: TCP + # volumeMounts: + # - mountPath: /tmp + # name: tmp + # livenessProbe: + # httpGet: + # path: / + # port: web + # scheme: HTTP + # initialDelaySeconds: 15 + # periodSeconds: 10 + # startupProbe: + # httpGet: + # path: / + # port: web + # initialDelaySeconds: 15 + # failureThreshold: 30 + # periodSeconds: 10 volumes: - name: configs secret: - secretName: draupnir-appservice + secretName: draupnir-appservice - name: storage persistentVolumeClaim: - claimName: d4all-persistent-storage + claimName: d4all-persistent-storage - name: tmp emptyDir: - sizeLimit: 2048Mi + sizeLimit: 2048Mi diff --git a/apps/talos_cluster/envoy-gateway/gateway_settings.yaml b/apps/talos_cluster/envoy-gateway/gateway_settings.yaml @@ -375,6 +375,18 @@ spec: certificateRefs: - kind: Secret name: kimai.midnightthoughts.space + - name: https-midnightthoughts-morg-statistics + protocol: HTTPS + hostname: "morg-statistics.midnightthoughts.space" + port: 443 + allowedRoutes: + namespaces: + from: "All" + tls: + mode: Terminate + certificateRefs: + - kind: Secret + name: morg-statistics.midnightthoughts.space - name: http protocol: HTTP port: 80 diff --git a/apps/talos_cluster/kimai/release.yaml b/apps/talos_cluster/kimai/release.yaml @@ -63,13 +63,13 @@ sops: age: - recipient: age1esjyg2qfy49awv0ptkzvpk425adczjr38m37w2mmcahzc4p8n54sll2nzh enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA5V1djTlY4djAyTG0ybXE2 - dHZMc1MybU82TDlVRVBJR2RCaGZvQy9XN0Y4CldwdUo2ckxWbEFZQlNwRlU4RFpm - aTFOSnpKdkNEWXRxcW1EdDFLaCtkMk0KLS0tIGkrWGVSOW5sTUxPS25JWVRGOVZC - aVZHUThkZkQ5N3ZDaE0xYUpPTktFdlUKyXnmTdBYiBn0lmL09N/rSCOwA5ydC7a0 - D0B1sYyxdlFV1T4msbzwXyBcOKZYHRRBDccnzCscdMC6izZJlpornw== - -----END AGE ENCRYPTED FILE----- + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA5V1djTlY4djAyTG0ybXE2 + dHZMc1MybU82TDlVRVBJR2RCaGZvQy9XN0Y4CldwdUo2ckxWbEFZQlNwRlU4RFpm + aTFOSnpKdkNEWXRxcW1EdDFLaCtkMk0KLS0tIGkrWGVSOW5sTUxPS25JWVRGOVZC + aVZHUThkZkQ5N3ZDaE0xYUpPTktFdlUKyXnmTdBYiBn0lmL09N/rSCOwA5ydC7a0 + D0B1sYyxdlFV1T4msbzwXyBcOKZYHRRBDccnzCscdMC6izZJlpornw== + -----END AGE ENCRYPTED FILE----- lastmodified: "2025-08-13T13:38:38Z" mac: ENC[AES256_GCM,data:DoVQ4+QoGkYWU3RDgKP1af6xMBYtBD84C6b12vzMgDnz3hPzAm+Ubicn9O1oxuv85v/pXml2pEcqO4K+5k0pokxCWK7Q7DYr2cWPBgLECyEN0f9RNDs45PLd3Uxja+OSyWuNeUkAsdUxt8AiiQapgMBjCrO0VwdtOU3epoftcMI=,iv:E8eTUluv5MsBUADNEzSni7I4WXQkYRrpsI2sx1evJaE=,tag:BwQ3a1Fa+dTsOejXARkewQ==,type:str] pgp: [] @@ -89,11 +89,11 @@ spec: - kimai.midnightthoughts.space rules: - backendRefs: - - name: kimai-kimai2 - port: 80 + - name: kimai-kimai2 + port: 80 timeouts: - request: 240s - backendRequest: 0s + request: 240s + backendRequest: 0s sops: kms: [] gcp_kms: [] @@ -102,13 +102,13 @@ sops: age: - recipient: age1esjyg2qfy49awv0ptkzvpk425adczjr38m37w2mmcahzc4p8n54sll2nzh enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA5V1djTlY4djAyTG0ybXE2 - dHZMc1MybU82TDlVRVBJR2RCaGZvQy9XN0Y4CldwdUo2ckxWbEFZQlNwRlU4RFpm - aTFOSnpKdkNEWXRxcW1EdDFLaCtkMk0KLS0tIGkrWGVSOW5sTUxPS25JWVRGOVZC - aVZHUThkZkQ5N3ZDaE0xYUpPTktFdlUKyXnmTdBYiBn0lmL09N/rSCOwA5ydC7a0 - D0B1sYyxdlFV1T4msbzwXyBcOKZYHRRBDccnzCscdMC6izZJlpornw== - -----END AGE ENCRYPTED FILE----- + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA5V1djTlY4djAyTG0ybXE2 + dHZMc1MybU82TDlVRVBJR2RCaGZvQy9XN0Y4CldwdUo2ckxWbEFZQlNwRlU4RFpm + aTFOSnpKdkNEWXRxcW1EdDFLaCtkMk0KLS0tIGkrWGVSOW5sTUxPS25JWVRGOVZC + aVZHUThkZkQ5N3ZDaE0xYUpPTktFdlUKyXnmTdBYiBn0lmL09N/rSCOwA5ydC7a0 + D0B1sYyxdlFV1T4msbzwXyBcOKZYHRRBDccnzCscdMC6izZJlpornw== + -----END AGE ENCRYPTED FILE----- lastmodified: "2025-08-13T13:38:38Z" mac: ENC[AES256_GCM,data:DoVQ4+QoGkYWU3RDgKP1af6xMBYtBD84C6b12vzMgDnz3hPzAm+Ubicn9O1oxuv85v/pXml2pEcqO4K+5k0pokxCWK7Q7DYr2cWPBgLECyEN0f9RNDs45PLd3Uxja+OSyWuNeUkAsdUxt8AiiQapgMBjCrO0VwdtOU3epoftcMI=,iv:E8eTUluv5MsBUADNEzSni7I4WXQkYRrpsI2sx1evJaE=,tag:BwQ3a1Fa+dTsOejXARkewQ==,type:str] pgp: [] diff --git a/apps/talos_cluster/mailserver/release.yaml b/apps/talos_cluster/mailserver/release.yaml @@ -231,8 +231,8 @@ spec: sectionName: smtp rules: - backendRefs: - - name: mailserver-docker-mailserver - port: 12525 + - name: mailserver-docker-mailserver + port: 12525 --- apiVersion: gateway.networking.k8s.io/v1alpha2 kind: TCPRoute @@ -248,8 +248,8 @@ spec: sectionName: submissions rules: - backendRefs: - - name: mailserver-docker-mailserver - port: 10465 + - name: mailserver-docker-mailserver + port: 10465 --- apiVersion: gateway.networking.k8s.io/v1alpha2 kind: TCPRoute @@ -265,8 +265,8 @@ spec: sectionName: submission rules: - backendRefs: - - name: mailserver-docker-mailserver - port: 10587 + - name: mailserver-docker-mailserver + port: 10587 --- apiVersion: gateway.networking.k8s.io/v1alpha2 kind: TCPRoute @@ -282,8 +282,8 @@ spec: sectionName: imap rules: - backendRefs: - - name: mailserver-docker-mailserver - port: 10143 + - name: mailserver-docker-mailserver + port: 10143 --- apiVersion: gateway.networking.k8s.io/v1alpha2 kind: TCPRoute @@ -299,8 +299,8 @@ spec: sectionName: imaps rules: - backendRefs: - - name: mailserver-docker-mailserver - port: 10993 + - name: mailserver-docker-mailserver + port: 10993 --- apiVersion: gateway.envoyproxy.io/v1alpha1 kind: BackendTrafficPolicy @@ -340,8 +340,8 @@ spec: - rspamd.midnightthoughts.space rules: - backendRefs: - - name: mailserver-docker-mailserver - port: 11334 + - name: mailserver-docker-mailserver + port: 11334 timeouts: - request: 240s - backendRequest: 0s + request: 240s + backendRequest: 0s diff --git a/apps/talos_cluster/matrix-org-statistics/deployment.yaml b/apps/talos_cluster/matrix-org-statistics/deployment.yaml @@ -13,7 +13,7 @@ spec: apiVersion: apps/v1 kind: Deployment metadata: - name: statistics + name: morg-statistics namespace: statistics spec: strategy: @@ -23,56 +23,91 @@ spec: type: RollingUpdate selector: matchLabels: - app: statistics + app: morg-statistics template: + metadata: + labels: + app: morg-statistics spec: imagePullSecrets: - name: ghcr-pull containers: - - name: statistics + - name: morg-statistics image: gnuxie/draupnir:v2.6.1 imagePullPolicy: IfNotPresent env: - - name: CACHE_DIR - value: "/data" + - name: CACHE_DIR + value: "/data" resources: - limits: - memory: "1Gi" - cpu: "1" - requests: - memory: "500Mi" - cpu: "250m" + limits: + memory: "1Gi" + cpu: "1" + requests: + memory: "500Mi" + cpu: "250m" securityContext: - runAsUser: 1000 - runAsGroup: 1000 - readOnlyRootFilesystem: true + runAsUser: 1000 + runAsGroup: 1000 + readOnlyRootFilesystem: true ports: - - containerPort: 8080 - name: http - protocol: TCP + - containerPort: 8080 + name: http + protocol: TCP volumeMounts: - - mountPath: /data - name: storage - - mountPath: /tmp - name: tmp + - mountPath: /data + name: storage + - mountPath: /tmp + name: tmp livenessProbe: - httpGet: - path: / - port: http - scheme: HTTP - initialDelaySeconds: 15 - periodSeconds: 10 + httpGet: + path: / + port: http + scheme: HTTP + initialDelaySeconds: 15 + periodSeconds: 10 startupProbe: - httpGet: - path: / - port: http - initialDelaySeconds: 15 - failureThreshold: 30 - periodSeconds: 10 + httpGet: + path: / + port: http + initialDelaySeconds: 15 + failureThreshold: 30 + periodSeconds: 10 volumes: - name: storage persistentVolumeClaim: - claimName: m-org-statistics-persistent-storage + claimName: m-org-statistics-persistent-storage - name: tmp emptyDir: - sizeLimit: 2048Mi + sizeLimit: 2048Mi +--- +apiVersion: v1 +kind: Service +metadata: + name: morg-statistics + namespace: statistics + labels: + app: morg-statistics +spec: + selector: + app: morg-statistics + ports: + - port: 8080 + targetPort: http + protocol: TCP + name: http +--- +apiVersion: gateway.networking.k8s.io/v1 +kind: HTTPRoute +metadata: + name: morg-statistics + namespace: statistics +spec: + parentRefs: + - name: envoy-gateway + namespace: envoy-gateway + hostnames: + - morg-statistics.midnightthoughts.space + rules: + - backendRefs: + - name: morg-statistics + port: 8080 diff --git a/apps/talos_cluster/vaultwarden/release.yaml b/apps/talos_cluster/vaultwarden/release.yaml @@ -71,13 +71,13 @@ sops: age: - recipient: age1esjyg2qfy49awv0ptkzvpk425adczjr38m37w2mmcahzc4p8n54sll2nzh enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBXY25DbjBHRXptTFd4U0Qv - WUpBejVlem5qRkNqdTFkL204MjQ4SG95d2hRCmNqay9vL2t1ZjRKemJHbEUva29j - ZW5DcnVrTDlJNjNtK3VXZlRRV1ptM2MKLS0tIFFDMjBKOU1IOTRQZmhyUkU2NFJI - akd6NWdaQWcraVF3ODE2Yk9CeVRYVlkK9+kkjjx7Tc460EBcyKo8ABuowyun7BHF - MfxYFcO1qSoate+NX1RPZjErpoW3SccgPd6YgkN6zXxic5PGZu4ILQ== - -----END AGE ENCRYPTED FILE----- + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBXY25DbjBHRXptTFd4U0Qv + WUpBejVlem5qRkNqdTFkL204MjQ4SG95d2hRCmNqay9vL2t1ZjRKemJHbEUva29j + ZW5DcnVrTDlJNjNtK3VXZlRRV1ptM2MKLS0tIFFDMjBKOU1IOTRQZmhyUkU2NFJI + akd6NWdaQWcraVF3ODE2Yk9CeVRYVlkK9+kkjjx7Tc460EBcyKo8ABuowyun7BHF + MfxYFcO1qSoate+NX1RPZjErpoW3SccgPd6YgkN6zXxic5PGZu4ILQ== + -----END AGE ENCRYPTED FILE----- lastmodified: "2025-08-03T20:07:48Z" mac: ENC[AES256_GCM,data:IJboxKsmBu4xBfLAufFLcqGlrRtKiZLMZi3QQ81yn6op3YcHEnrAhz298mGXzHT7EDsdQf8SdvJw6A8YnJ/oZ+V8O2XZjF3Os/Jmb4UC0MgA8Tx/14FVLJ7w2MEvH+HcBn63VhBjCOyWd5LukMIwZ4fpviUl/Y8NhxulAX9F5R8=,iv:ZvhSalxt6ny4+3pJDNq8DiHuGar37AQl6L2zAFK5+ag=,tag:Hb8HEi0PEA7xP/1Rl3+dgQ==,type:str] pgp: [] @@ -97,11 +97,11 @@ spec: - vault.midnightthoughts.space rules: - backendRefs: - - name: vaultwarden - port: 80 + - name: vaultwarden + port: 80 timeouts: - request: 240s - backendRequest: 0s + request: 240s + backendRequest: 0s sops: kms: [] gcp_kms: [] @@ -110,13 +110,13 @@ sops: age: - recipient: age1esjyg2qfy49awv0ptkzvpk425adczjr38m37w2mmcahzc4p8n54sll2nzh enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBXY25DbjBHRXptTFd4U0Qv - WUpBejVlem5qRkNqdTFkL204MjQ4SG95d2hRCmNqay9vL2t1ZjRKemJHbEUva29j - ZW5DcnVrTDlJNjNtK3VXZlRRV1ptM2MKLS0tIFFDMjBKOU1IOTRQZmhyUkU2NFJI - akd6NWdaQWcraVF3ODE2Yk9CeVRYVlkK9+kkjjx7Tc460EBcyKo8ABuowyun7BHF - MfxYFcO1qSoate+NX1RPZjErpoW3SccgPd6YgkN6zXxic5PGZu4ILQ== - -----END AGE ENCRYPTED FILE----- + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBXY25DbjBHRXptTFd4U0Qv + WUpBejVlem5qRkNqdTFkL204MjQ4SG95d2hRCmNqay9vL2t1ZjRKemJHbEUva29j + ZW5DcnVrTDlJNjNtK3VXZlRRV1ptM2MKLS0tIFFDMjBKOU1IOTRQZmhyUkU2NFJI + akd6NWdaQWcraVF3ODE2Yk9CeVRYVlkK9+kkjjx7Tc460EBcyKo8ABuowyun7BHF + MfxYFcO1qSoate+NX1RPZjErpoW3SccgPd6YgkN6zXxic5PGZu4ILQ== + -----END AGE ENCRYPTED FILE----- lastmodified: "2025-08-03T20:07:48Z" mac: ENC[AES256_GCM,data:IJboxKsmBu4xBfLAufFLcqGlrRtKiZLMZi3QQ81yn6op3YcHEnrAhz298mGXzHT7EDsdQf8SdvJw6A8YnJ/oZ+V8O2XZjF3Os/Jmb4UC0MgA8Tx/14FVLJ7w2MEvH+HcBn63VhBjCOyWd5LukMIwZ4fpviUl/Y8NhxulAX9F5R8=,iv:ZvhSalxt6ny4+3pJDNq8DiHuGar37AQl6L2zAFK5+ag=,tag:Hb8HEi0PEA7xP/1Rl3+dgQ==,type:str] pgp: []