rhema-claw(kube): deploy

This commit is contained in:
2026-10-10 13:49:22 +02:00
parent 8c7a905d39
commit a1ce8d3880
8 changed files with 132 additions and 1 deletions
+1
View File
@@ -36,6 +36,7 @@ resources:
# Personal (apps storing my own content, grouped by content type)
- personal/paperless
- personal/radicale
- personal/rhema-claw
- personal/syncthing
- personal/media/photoprism
- personal/notes/notesnook
@@ -0,0 +1,13 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: rhema-claw
resources:
- namespace.yaml
- repository.yaml
- release.yaml
secretGenerator:
- name: rhema-claw-values
files:
- values.yaml=values.yaml
configurations:
- kustomizeconfig.yaml
@@ -0,0 +1,6 @@
nameReference:
- kind: Secret
version: v1
fieldSpecs:
- path: spec/valuesFrom/name
kind: HelmRelease
@@ -0,0 +1,7 @@
apiVersion: v1
kind: Namespace
metadata:
name: rhema-claw
labels:
app.kubernetes.io/name: rhema-claw
app.kubernetes.io/component: ai-agent
@@ -0,0 +1,24 @@
# Tracks the rhema-claw chart as CI publishes it on main: the timestamp
# pre-releases (0.1.0-YYYYMMDD-HHMMSS) all sort above 0.1.0-0, and the
# chart's appVersion carries the commit SHA the image was tagged with —
# values.image.tag stays empty to ride it. Same rolling scheme as the
# saggar release.
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: rhema-claw
namespace: rhema-claw
spec:
interval: 1m
chart:
spec:
sourceRef:
kind: HelmRepository
name: vhaudiquet
namespace: rhema-claw
chart: rhema-claw
version: ">=0.1.0-0"
interval: 1m
valuesFrom:
- kind: Secret
name: rhema-claw-values
@@ -0,0 +1,11 @@
# The vhaudiquet package repository on the home Gitea — where the rhema
# CI publishes the rhema-claw chart on every main push (base version +
# timestamp, ordered by SemVer pre-release rules). Public: no auth.
apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
metadata:
name: vhaudiquet
namespace: rhema-claw
spec:
interval: 1m
url: https://git.vhaudiquet.fr/api/packages/vhaudiquet/helm
@@ -0,0 +1,69 @@
# The rhema claw — the resident agent daemon from ../rhema.
# Single-node by design (one SQLite store, one dispatcher): the chart
# fails the render past one replica.
image:
repository: git.vhaudiquet.fr/vhaudiquet/rhema-claw
# Empty: follows the chart's appVersion — the commit SHA CI stamped on
# the pushed images.
tag: ""
# Bearer token for the /v1 routes (/healthz stays open). The daemon
# shells out through the coding agent, so the surface must not sit open
# on the LAN. Encrypted at rest: the .sops.yaml creation rule scoped to
# this file adds `token` to the values encrypted_regex.
token: ENC[AES256_GCM,data:fZKJzLy8FjN+0ONrHn40Tgb1/uTtYdAWTJwY7BfFltsGCPnuMx1F8KIPfQbzliyH,iv:yzaHrdDrSBbnT01aJmv8537D1lVe4kwIDINiuOgXPKU=,tag:dT7Z5v3CUhJg/+BqcjAWIA==,type:str]
# No provider, model, or credentials: the backend is selected
# dynamically (nothing injected, nothing pinned) — when a dispatch or a
# chat turn needs a key, the daemon resolves it through the rhema
# config seam, not through this release. The nulls erase the chart's
# built-in anthropic/claude defaults from the rendered claw.yaml.
config:
provider: null
model: null
watches: null
# The chart's own ingress, rendered from these values. Plain HTTP on
# purpose: kosmos.lan is LAN-internal and token-auth-only, like every
# other .lan surface here (no TLS story for .lan hosts).
ingress:
enabled: true
host: kosmos.lan
className: traefik
annotations:
external-dns.alpha.kubernetes.io/enabled: "true"
persistence:
enabled: true
storageClass: longhorn
size: 5Gi
resources:
requests:
cpu: 100m
memory: 256Mi
limits:
cpu: "1"
memory: 1Gi
sops:
lastmodified: "2026-10-10T11:49:22Z"
mac: ENC[AES256_GCM,data:vz3cATCAOEoyXOJCz0u+GfIq06lV5sV3mUoOKa4lUOWnShGOnxxE+v60AslV4KYBfmSCVliTalM0Vm8isuqJSAd9ZdPaI0CZ9F0gkxza22eaESkapIcIYrAhJYcZnRBSyAXjdVHyIzlvVwyTEqWYvEW7F5MJUgc4igHFD1/gMIA=,iv:VxsYzAWGhOiLXCt68Mpu8N9xgjsXXgc2LnInv2BExV8=,tag:rICLpdj4D37QZtTNV91uWA==,type:str]
pgp:
- created_at: "2026-10-10T11:49:22Z"
enc: |-
-----BEGIN PGP MESSAGE-----
hQIMA7uy4qQr71wiAQ//WeO+shUgWwJAu2IdxVteea0IpFCyo93hWqxLWMytqF7+
3h2s7zXXsNvNCvqndHzNSrZt+OuSQDWSBVIzfxlztw7ga6BdI92OhpOZPCIyKwDT
LzzUCPrSAGOZVekOkFXKlVDjMFunAiEp/soGda7bbP+VrdHJmeRh8fioTOgd/4qL
/QmmJk3bMTlMoVcknOW2qI3n79YA9qnI0vjwBL63bDeZnxZ8CiZzd1SDr10K0rDf
f9ErcmeKAwm+HgehSA3xId0Cph4gnf3xNhNDe2gcZvoFlPIrZT0iU0fBzMRuJPxt
c9g+TqTAHBfx90H58/NF8Sfr3ScXNUHvHzgzrq4w+ogqmp8NYsdDbzG1C318dV2o
nITluENiYgR9Qs6gJda94aEc00IYEBp4lNGp5G1SyHiDB+jMMsiHX6w3x286dgNx
G6DcJ+TabCO+A+Fzq74I2ds+paoEgDegDMCIgK6uSKF0jT2ID579Bf2kRraneOqV
amgBI2CQZG5FAqdhbtpf4PHAK9YR3b42mgF9nBAc+f/oFeAZm8nFmG7LubwxqbgY
HLa7+ct38ygp/pwZ0FQcU5I3VwqYyU+JA3HMsL2yspHJAeQuXAvzkCQ8NaDOMpEY
JRY1pIHl3SwTkV3zh9co8r2Ho8fGYO6KzlNfEdRsx2C6DegM70kpPuYzcCDYAd3S
XAE6EX2dM+NxYqhHEIwKjFMJlROWwhhRhheFZnyYRMsn75NkeqRfPi2tJgMkIMk9
OJ1eekhgFbQr8vaWtrIOhjvQG9ieg2ujuyltVcC2XUFxQONCxbfoXC2oYu1Y
=gTTK
-----END PGP MESSAGE-----
fp: DC6910268E657FF70BA7EC289974494E76938DDC
encrypted_regex: ^(password|value|ssh-key|api-key|user|username|privateKey|clientSecret|clientId|apiKey|extraArgs.*|.*Secret.*|extraEnvVars|.*SECRET.*|.*secret.*|key|.*Password|.*PASS|.*SOCIALACCOUNT_PROVIDERS|.*\.ya?ml|token)$
mac_only_encrypted: true
version: 3.10.2