Skip to content

Commit 52ac30a

Browse files
authored
fix(helm): per-agent image as string, fallback to appVersion, persistence.size default 1Gi (#145)
* fix(helm): per-agent image as string, fallback to appVersion, persistence.size default 1Gi * fix(helm): guard nil persistence in pvc template * docs: fix claude working_dir to /home/node in manual config example * fix: readme * feat(helm): add per-agent enabled flag to skip resource creation Default kiro agent persists via Helm deep merge even when users only define a different agent. Add `agents.<name>.enabled` (default true) so users can set `agents.kiro.enabled: false` to avoid creating unwanted resources. Update README with all three deployment scenarios.
1 parent 38920e4 commit 52ac30a

8 files changed

Lines changed: 69 additions & 19 deletions

File tree

README.md

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -97,11 +97,34 @@ See the **[Helm chart docs](https://openabdev.github.io/openab)** for full insta
9797
```bash
9898
helm repo add openab https://openabdev.github.io/openab
9999
helm repo update
100+
101+
# Kiro CLI only (default)
100102
helm install openab openab/openab \
101103
--set agents.kiro.discord.botToken="$DISCORD_BOT_TOKEN" \
102104
--set-string 'agents.kiro.discord.allowedChannels[0]=YOUR_CHANNEL_ID'
105+
106+
# Claude Code only (disable default kiro)
107+
helm install openab openab/openab \
108+
--set agents.kiro.enabled=false \
109+
--set agents.claude.discord.botToken="$DISCORD_BOT_TOKEN" \
110+
--set-string 'agents.claude.discord.allowedChannels[0]=YOUR_CHANNEL_ID' \
111+
--set agents.claude.image=ghcr.io/openabdev/openab-claude:78f8d2c \
112+
--set agents.claude.command=claude-agent-acp \
113+
--set agents.claude.workingDir=/home/node
114+
115+
# Multi-agent (kiro + claude in one release)
116+
helm install openab openab/openab \
117+
--set agents.kiro.discord.botToken="$KIRO_BOT_TOKEN" \
118+
--set-string 'agents.kiro.discord.allowedChannels[0]=KIRO_CHANNEL_ID' \
119+
--set agents.claude.discord.botToken="$CLAUDE_BOT_TOKEN" \
120+
--set-string 'agents.claude.discord.allowedChannels[0]=CLAUDE_CHANNEL_ID' \
121+
--set agents.claude.image=ghcr.io/openabdev/openab-claude:78f8d2c \
122+
--set agents.claude.command=claude-agent-acp \
123+
--set agents.claude.workingDir=/home/node
103124
```
104125

126+
Each agent key in `agents` map creates its own Deployment, ConfigMap, Secret, and PVC. Set `agents.<name>.enabled: false` to skip creating resources for an agent.
127+
105128
### Manual config.toml
106129

107130
For non-Helm deployments, configure the `[agent]` block per CLI:
@@ -117,19 +140,19 @@ working_dir = "/home/agent"
117140
[agent]
118141
command = "codex-acp"
119142
args = []
120-
working_dir = "/home/agent"
143+
working_dir = "/home/node"
121144

122145
# Claude Code (requires claude-agent-acp in PATH)
123146
[agent]
124147
command = "claude-agent-acp"
125148
args = []
126-
working_dir = "/home/agent"
149+
working_dir = "/home/node"
127150

128151
# Gemini
129152
[agent]
130153
command = "gemini"
131154
args = ["--acp"]
132-
working_dir = "/home/agent"
155+
working_dir = "/home/node"
133156
env = { GEMINI_API_KEY = "${GEMINI_API_KEY}" }
134157
```
135158

charts/openab/templates/NOTES.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ openab {{ .Chart.AppVersion }} has been installed!
44

55
Agents deployed:
66
{{- range $name, $cfg := .Values.agents }}
7+
{{- if ne (include "openab.agentEnabled" $cfg) "false" }}
78
• {{ $name }} ({{ $cfg.command }})
89
{{- if not $cfg.discord.botToken }}
910
⚠️ No bot token provided. Create the secret manually:
@@ -28,3 +29,4 @@ Agents deployed:
2829
Restart after auth:
2930
kubectl rollout restart deployment/{{ include "openab.agentFullname" (dict "ctx" $ "agent" $name) }}
3031
{{- end }}
32+
{{- end }}

charts/openab/templates/_helpers.tpl

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,27 @@ app.kubernetes.io/component: {{ .agent }}
4141
{{- printf "%s-%s" (include "openab.fullname" .ctx) .agent | trunc 63 | trimSuffix "-" }}
4242
{{- end }}
4343

44-
{{/* Resolve image: agent-level override → global default */}}
44+
{{/* Resolve image: agent-level string override → global default (repository:tag, tag defaults to appVersion) */}}
4545
{{- define "openab.agentImage" -}}
46-
{{- $repo := .ctx.Values.image.repository }}
47-
{{- $tag := .ctx.Values.image.tag }}
48-
{{- if and .cfg.image .cfg.image.repository (ne .cfg.image.repository "") }}{{ $repo = .cfg.image.repository }}{{ end }}
49-
{{- if and .cfg.image .cfg.image.tag (ne .cfg.image.tag "") }}{{ $tag = .cfg.image.tag }}{{ end }}
50-
{{- printf "%s:%s" $repo $tag }}
46+
{{- if and .cfg.image (kindIs "string" .cfg.image) (ne .cfg.image "") }}
47+
{{- .cfg.image }}
48+
{{- else }}
49+
{{- $tag := default .ctx.Chart.AppVersion .ctx.Values.image.tag }}
50+
{{- printf "%s:%s" .ctx.Values.image.repository $tag }}
51+
{{- end }}
52+
{{- end }}
53+
54+
{{/* Resolve imagePullPolicy: global default (per-agent image string has no pullPolicy) */}}
55+
{{- define "openab.agentImagePullPolicy" -}}
56+
{{- .ctx.Values.image.pullPolicy }}
57+
{{- end }}
58+
59+
{{/* Agent enabled: default true unless explicitly set to false */}}
60+
{{- define "openab.agentEnabled" -}}
61+
{{- if eq (.enabled | toString) "false" }}false{{ else }}true{{ end }}
62+
{{- end }}
63+
64+
{{/* Persistence enabled: default true unless explicitly set to false */}}
65+
{{- define "openab.persistenceEnabled" -}}
66+
{{- if and . .persistence (eq (.persistence.enabled | toString) "false") }}false{{ else }}true{{ end }}
5167
{{- end }}

charts/openab/templates/configmap.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
{{- range $name, $cfg := .Values.agents }}
2+
{{- if ne (include "openab.agentEnabled" $cfg) "false" }}
23
{{- $d := dict "ctx" $ "agent" $name "cfg" $cfg }}
34
---
45
apiVersion: v1
@@ -38,3 +39,4 @@ data:
3839
{{- $cfg.agentsMd | nindent 4 }}
3940
{{- end }}
4041
{{- end }}
42+
{{- end }}

charts/openab/templates/deployment.yaml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
{{- range $name, $cfg := .Values.agents }}
2+
{{- if ne (include "openab.agentEnabled" $cfg) "false" }}
23
{{- $d := dict "ctx" $ "agent" $name "cfg" $cfg }}
3-
{{- $pvcEnabled := and $cfg.persistence $cfg.persistence.enabled }}
4+
{{- $pvcEnabled := not (eq (include "openab.persistenceEnabled" $cfg) "false") }}
45
---
56
apiVersion: apps/v1
67
kind: Deployment
@@ -31,7 +32,7 @@ spec:
3132
containers:
3233
- name: openab
3334
image: {{ include "openab.agentImage" $d | quote }}
34-
imagePullPolicy: {{ $.Values.image.pullPolicy }}
35+
imagePullPolicy: {{ include "openab.agentImagePullPolicy" $d }}
3536
{{- with $.Values.containerSecurityContext }}
3637
securityContext:
3738
{{- toYaml . | nindent 12 }}
@@ -93,3 +94,4 @@ spec:
9394
claimName: {{ include "openab.agentFullname" $d }}
9495
{{- end }}
9596
{{- end }}
97+
{{- end }}

charts/openab/templates/pvc.yaml

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
{{- range $name, $cfg := .Values.agents }}
2-
{{- if and $cfg.persistence $cfg.persistence.enabled }}
2+
{{- if ne (include "openab.agentEnabled" $cfg) "false" }}
3+
{{- if not (eq (include "openab.persistenceEnabled" $cfg) "false") }}
34
{{- $d := dict "ctx" $ "agent" $name "cfg" $cfg }}
45
---
56
apiVersion: v1
@@ -11,11 +12,12 @@ metadata:
1112
spec:
1213
accessModes:
1314
- ReadWriteOnce
14-
{{- if $cfg.persistence.storageClass }}
15+
{{- if and $cfg.persistence $cfg.persistence.storageClass }}
1516
storageClassName: {{ $cfg.persistence.storageClass }}
1617
{{- end }}
1718
resources:
1819
requests:
19-
storage: {{ $cfg.persistence.size }}
20+
storage: {{ (and $cfg.persistence $cfg.persistence.size) | default "1Gi" }}
21+
{{- end }}
2022
{{- end }}
2123
{{- end }}

charts/openab/templates/secret.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
{{- range $name, $cfg := .Values.agents }}
2+
{{- if ne (include "openab.agentEnabled" $cfg) "false" }}
23
{{- if $cfg.discord.botToken }}
34
{{- $d := dict "ctx" $ "agent" $name "cfg" $cfg }}
45
---
@@ -15,3 +16,4 @@ data:
1516
discord-bot-token: {{ $cfg.discord.botToken | b64enc | quote }}
1617
{{- end }}
1718
{{- end }}
19+
{{- end }}

charts/openab/values.yaml

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
image:
22
repository: ghcr.io/openabdev/openab
3-
tag: "78f8d2c"
3+
# tag defaults to .Chart.AppVersion
4+
tag: ""
45
pullPolicy: IfNotPresent
56

67
podSecurityContext:
@@ -17,6 +18,7 @@ containerSecurityContext:
1718

1819
agents:
1920
kiro:
21+
enabled: true # set to false to skip creating resources for this agent
2022
# To add a second agent, uncomment and fill in the block below:
2123
# claude:
2224
# command: claude-agent-acp
@@ -44,9 +46,8 @@ agents:
4446
# nodeSelector: {}
4547
# tolerations: []
4648
# affinity: {}
47-
image:
48-
repository: ""
49-
tag: ""
49+
# image: "ghcr.io/openabdev/openab-claude:latest"
50+
image: ""
5051
command: kiro-cli
5152
args:
5253
- acp
@@ -68,7 +69,7 @@ agents:
6869
persistence:
6970
enabled: true
7071
storageClass: ""
71-
size: 1Gi
72+
size: 1Gi # defaults to 1Gi if not set
7273
agentsMd: ""
7374
resources: {}
7475
nodeSelector: {}

0 commit comments

Comments
 (0)