Skip to content

Commit ecf00a4

Browse files
fix(helm/intel): scope AI resources per-release to avoid cross-release Secret conflicts (#164)
Fixes: #163 Problem - Deploying multiple `codetogether-intel` releases in the same namespace caused a collision on statically named resources (e.g., `ai-secrets` / `ai-config`), producing Helm ownership errors. What changed - templates/ai-config.yaml - Create ConfigMap only when `ai.enabled=true` and `ai.mode=external`. - Name is now release-scoped: `{{ .Release.Name }}-ai-config`. - templates/ai-external-secret.yaml - Respect `ai.externalSecret.create` and `ai.externalSecret.name`. - Default Secret name is release-scoped: `{{ include "codetogether.fullname" . }}-ai-external-secret`. - Store API key under `stringData.apiKey`. - templates/deployment.yaml - Read `AI_PROVIDER` / `AI_EXTERNAL_URL` from `{{ .Release.Name }}-ai-config`. - Read `AI_EXTERNAL_API_KEY` from the default or user-specified Secret: `{{ default (printf "%s-ai-external-secret" (include "codetogether.fullname" .)) .Values.ai.externalSecret.name }}`. - Bundled mode unchanged; external resources are not created in bundled mode. Why - Ensures two or more releases (e.g., `qa-intel` and `demo-staging-intel`) can coexist in the same namespace without Helm ownership clashes. How to test - External (chart-managed Secret): `helm template demo-staging-intel ./charts/intel -n default \ --set ai.enabled=true --set ai.mode=external \ --set ai.provider=openai --set ai.url=https://api.openai.com \ --set ai.externalSecret.create=true --set ai.externalSecret.apiKey=TESTKEY` → renders `demo-staging-intel-ai-config` and `demo-staging-intel-ai-external-secret`. - External (existing Secret): `kubectl create secret generic my-custom-ai-secret -n default \ --from-literal=apiKey=TESTKEY` `helm template qa-intel ./charts/intel -n default \ --set ai.enabled=true --set ai.mode=external \ --set ai.provider=openai --set ai.url=https://api.openai.com \ --set ai.externalSecret.create=false --set ai.externalSecret.name=my-custom-ai-secret` → renders only the release-scoped ConfigMap; Deployment references the existing Secret. - Bundled: `helm template demo ./charts/intel -n default --set ai.enabled=true --set ai.mode=bundled` → no AI ConfigMap/Secret rendered; sidecar included.
1 parent 264c8e4 commit ecf00a4

3 files changed

Lines changed: 13 additions & 6 deletions

File tree

charts/intel/templates/ai-config.yaml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,13 @@
22
apiVersion: v1
33
kind: ConfigMap
44
metadata:
5-
name: ai-config
5+
name: {{ printf "%s-ai-config" (include "codetogether.fullname" .) }}
66
namespace: {{ .Release.Namespace }}
7+
labels:
8+
{{- include "codetogether.labels" . | nindent 4 }}
79
data:
810
ai_provider: {{ .Values.ai.provider | quote }}
911
ai_url: {{ .Values.ai.url | quote }}
1012
{{- end }}
1113

14+

charts/intel/templates/deployment.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,12 @@ spec:
4444
- name: AI_PROVIDER
4545
valueFrom:
4646
configMapKeyRef:
47-
name: ai-config
47+
name: {{ printf "%s-ai-config" (include "codetogether.fullname" .) }}
4848
key: ai_provider
4949
- name: AI_EXTERNAL_URL
5050
valueFrom:
5151
configMapKeyRef:
52-
name: ai-config
52+
name: {{ printf "%s-ai-config" (include "codetogether.fullname" .) }}
5353
key: ai_url
5454
- name: AI_EXTERNAL_API_KEY
5555
valueFrom:

charts/intel/values.yaml

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -143,9 +143,13 @@ securityContext: {}
143143
ai:
144144
enabled: false
145145
mode: "bundled" # Options: bundled | external
146-
image:
147-
repository: hub.edge.codetogether.com/releases/codetogether-llm
148-
tag: latest
146+
provider: ""
147+
url: ""
148+
modelName: "gemma3:1b"
149+
externalSecret:
150+
create: false
151+
name: ""
152+
apiKey: ""
149153
# resources: # Recommended resources configuration
150154
# requests:
151155
# cpu: "2"

0 commit comments

Comments
 (0)