Skip to content

Commit 2647eea

Browse files
committed
Implement registry/repository split and global overrides
Fixes opencloud-eu#11, Fixes opencloud-eu#38 This commit implements the ability to split image configuration into registry and repository components, and adds global overrides for all images in the chart. Changes: - Add global.image.registry and global.image.pullPolicy overrides - Split all image configurations into registry + repository - Add helper templates for image rendering with overrides - Update all deployment templates to use new helpers - Add MinIO image configuration (was hardcoded before) - Consolidate web extensions to use common image settings Benefits: - Easy configuration for private registries/mirrors - Single setting to redirect all images - Support for air-gapped environments - Maintains backward compatibility Example usage: helm install opencloud ./charts/opencloud \\ --set global.image.registry=my-registry.com Documentation: - Added section in README about private registry support - Updated configuration tables with new parameters - Added examples for common use cases Note: This feature is only implemented in the production chart. The development chart remains unchanged due to its simpler structure.
1 parent bd388de commit 2647eea

File tree

12 files changed

+160
-41
lines changed

12 files changed

+160
-41
lines changed

README.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,24 @@ helm install opencloud ./charts/opencloud-dev \
108108

109109
[View Development Chart Documentation](./charts/opencloud-dev/README.md)
110110

111+
## 🔒 Private Registry Support
112+
113+
The **production chart** (`charts/opencloud`) supports using private container registries for all images. This is useful for:
114+
- Air-gapped environments
115+
- Corporate registry mirrors
116+
- Pull-through caches
117+
118+
Simply use the global override:
119+
```bash
120+
helm install opencloud ./charts/opencloud \
121+
--set global.image.registry=my-registry.com \
122+
--set global.image.pullPolicy=Always
123+
```
124+
125+
See the [production chart documentation](./charts/opencloud/README.md#using-private-registries) for detailed configuration.
126+
127+
**Note:** This feature is currently only available in the production chart.
128+
111129
## Architecture
112130

113131
The production chart (`charts/opencloud`) deploys the following components:

charts/opencloud/README.md

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,25 @@ Key interactions:
191191

192192
The following table lists the configurable parameters of the OpenCloud chart and their default values.
193193

194+
### Using Private Registries
195+
196+
The chart supports using private container registries through global overrides. This is useful for:
197+
- Air-gapped environments
198+
- Corporate registry mirrors
199+
- Pull-through caches
200+
201+
To use a private registry for all images:
202+
203+
```bash
204+
helm install opencloud ./charts/opencloud \
205+
--set global.image.registry=my-registry.com \
206+
--set global.image.pullPolicy=Always
207+
```
208+
209+
This will prepend `my-registry.com/` to all image references in the chart. For example:
210+
- `keycloak/keycloak:26.1.4` becomes `my-registry.com/keycloak/keycloak:26.1.4`
211+
- `opencloudeu/opencloud-rolling:latest` becomes `my-registry.com/opencloudeu/opencloud-rolling:latest`
212+
194213
### Global Settings
195214

196215
| Parameter | Description | Default |
@@ -205,11 +224,14 @@ The following table lists the configurable parameters of the OpenCloud chart and
205224
| `global.tls.enabled` | Enable TLS (set to false when using gateway TLS termination externally) | `false` |
206225
| `global.tls.secretName` | secretName for TLS certificate | `""` |
207226
| `global.storage.storageClass` | Storage class for persistent volumes | `""` |
227+
| `global.image.registry` | Global registry override for all images (e.g., `my-registry.com`) | `""` |
228+
| `global.image.pullPolicy` | Global pull policy override for all images (`Always`, `IfNotPresent`, `Never`) | `""` |
208229

209230
### Image Settings
210231

211232
| Parameter | Description | Default |
212233
| --------- | ----------- | ------- |
234+
| `image.registry` | OpenCloud image registry | `docker.io` |
213235
| `image.repository` | OpenCloud image repository | `opencloudeu/opencloud-rolling` |
214236
| `image.tag` | OpenCloud image tag | `latest` |
215237
| `image.pullPolicy` | Image pull policy | `IfNotPresent` |

charts/opencloud/templates/_helpers/tpl.yaml

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,48 @@ Create a fully qualified Tika name.
148148

149149
{{/* namespace helper removed - use .Release.Namespace directly */}}
150150

151+
{{/*
152+
Return the image registry, using global override if set
153+
*/}}
154+
{{- define "opencloud.image.registry" -}}
155+
{{- $registry := .registry -}}
156+
{{- if .global -}}
157+
{{- if .global.image -}}
158+
{{- if .global.image.registry -}}
159+
{{- $registry = .global.image.registry -}}
160+
{{- end -}}
161+
{{- end -}}
162+
{{- end -}}
163+
{{- $registry -}}
164+
{{- end -}}
165+
166+
{{/*
167+
Return the image pull policy, using global override if set
168+
*/}}
169+
{{- define "opencloud.image.pullPolicy" -}}
170+
{{- $pullPolicy := .pullPolicy -}}
171+
{{- if .global -}}
172+
{{- if .global.image -}}
173+
{{- if .global.image.pullPolicy -}}
174+
{{- $pullPolicy = .global.image.pullPolicy -}}
175+
{{- end -}}
176+
{{- end -}}
177+
{{- end -}}
178+
{{- $pullPolicy -}}
179+
{{- end -}}
180+
181+
{{/*
182+
Return the full image name with registry
183+
*/}}
184+
{{- define "opencloud.image" -}}
185+
{{- $registry := include "opencloud.image.registry" (dict "registry" .imageValues.registry "global" .global) -}}
186+
{{- if $registry -}}
187+
{{- printf "%s/%s:%s" $registry .imageValues.repository .imageValues.tag -}}
188+
{{- else -}}
189+
{{- printf "%s:%s" .imageValues.repository .imageValues.tag -}}
190+
{{- end -}}
191+
{{- end -}}
192+
151193
{{/*
152194
Return the appropriate apiVersion for ingress
153195
*/}}

charts/opencloud/templates/collabora/deployment.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ spec:
2020
spec:
2121
containers:
2222
- name: collabora
23-
image: {{ .Values.collabora.image.repository }}:{{ .Values.collabora.image.tag }}
24-
imagePullPolicy: {{ .Values.collabora.image.pullPolicy | default "IfNotPresent" }}
23+
image: {{ include "opencloud.image" (dict "imageValues" .Values.collabora.image "global" .Values.global) | quote }}
24+
imagePullPolicy: {{ include "opencloud.image.pullPolicy" (dict "pullPolicy" .Values.collabora.image.pullPolicy "global" .Values.global) }}
2525
command: ['/bin/bash', '-c']
2626
args:
2727
- 'coolconfig generate-proof-key && /start-collabora-online.sh'

charts/opencloud/templates/collaboration/deployment.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,8 @@ spec:
5353
{{- end }}
5454
containers:
5555
- name: collaboration
56-
image: {{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}
57-
imagePullPolicy: {{ .Values.image.pullPolicy }}
56+
image: {{ include "opencloud.image" (dict "imageValues" .Values.image "global" .Values.global) | quote }}
57+
imagePullPolicy: {{ include "opencloud.image.pullPolicy" (dict "pullPolicy" .Values.image.pullPolicy "global" .Values.global) }}
5858
command: ["/bin/sh"]
5959
args: ["-c", "opencloud collaboration server"]
6060
env:

charts/opencloud/templates/keycloak/deployment.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ spec:
2424
fsGroup: 1000
2525
containers:
2626
- name: keycloak
27-
image: {{ .Values.keycloak.image.repository }}:{{ .Values.keycloak.image.tag }}
28-
imagePullPolicy: {{ .Values.keycloak.image.pullPolicy }}
27+
image: {{ include "opencloud.image" (dict "imageValues" .Values.keycloak.image "global" .Values.global) | quote }}
28+
imagePullPolicy: {{ include "opencloud.image.pullPolicy" (dict "pullPolicy" .Values.keycloak.image.pullPolicy "global" .Values.global) }}
2929
securityContext:
3030
allowPrivilegeEscalation: false
3131
capabilities:

charts/opencloud/templates/minio/deployment.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ spec:
3737
mountPath: /data
3838
containers:
3939
- name: minio
40-
image: minio/minio:latest
40+
image: {{ include "opencloud.image" (dict "imageValues" .Values.opencloud.storage.s3.internal.image "global" .Values.global) | quote }}
41+
imagePullPolicy: {{ include "opencloud.image.pullPolicy" (dict "pullPolicy" .Values.opencloud.storage.s3.internal.image.pullPolicy "global" .Values.global) }}
4142
securityContext:
4243
runAsUser: 1000
4344
runAsGroup: 1000

charts/opencloud/templates/onlyoffice/deployment.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ spec:
2020
spec:
2121
containers:
2222
- name: onlyoffice
23-
image: {{ .Values.onlyoffice.repository }}:{{ .Values.onlyoffice.tag | default "8.2.2" }}
24-
imagePullPolicy: {{ .Values.onlyoffice.pullPolicy | default "IfNotPresent" }}
23+
image: {{ include "opencloud.image" (dict "imageValues" .Values.onlyoffice.image "global" .Values.global) | quote }}
24+
imagePullPolicy: {{ include "opencloud.image.pullPolicy" (dict "pullPolicy" .Values.onlyoffice.image.pullPolicy "global" .Values.global) }}
2525
command: ["/bin/sh", "/entrypoint-override.sh"]
2626
env:
2727
- name: WOPI_ENABLED

charts/opencloud/templates/opencloud/deployment.yaml

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -46,47 +46,47 @@ spec:
4646
# Web extensions init containers
4747
{{- if .Values.webExtensions.extensions.drawio.enabled }}
4848
- name: init-drawio
49-
image: {{ .Values.webExtensions.extensions.drawio.repository }}:{{ .Values.webExtensions.extensions.drawio.tag }}
49+
image: {{ include "opencloud.image" (dict "imageValues" (merge (dict "tag" .Values.webExtensions.extensions.drawio.tag) .Values.webExtensions.image) "global" .Values.global) | quote }}
5050
command: ['sh', '-c', 'mkdir -p /extensions/draw-io && cp -R /usr/share/nginx/html/draw-io/ /extensions/']
5151
volumeMounts:
5252
- name: extensions
5353
mountPath: /extensions
5454
{{- end }}
5555
{{- if .Values.webExtensions.extensions.externalsites.enabled }}
5656
- name: init-externalsites
57-
image: {{ .Values.webExtensions.extensions.externalsites.repository }}:{{ .Values.webExtensions.extensions.externalsites.tag }}
57+
image: {{ include "opencloud.image" (dict "imageValues" (merge (dict "tag" .Values.webExtensions.extensions.externalsites.tag) .Values.webExtensions.image) "global" .Values.global) | quote }}
5858
command: ['sh', '-c', 'mkdir -p /extensions/external-sites && cp -R /usr/share/nginx/html/external-sites/ /extensions/']
5959
volumeMounts:
6060
- name: extensions
6161
mountPath: /extensions
6262
{{- end }}
6363
{{- if .Values.webExtensions.extensions.importer.enabled }}
6464
- name: init-importer
65-
image: {{ .Values.webExtensions.extensions.importer.repository }}:{{ .Values.webExtensions.extensions.importer.tag }}
65+
image: {{ include "opencloud.image" (dict "imageValues" (merge (dict "tag" .Values.webExtensions.extensions.importer.tag) .Values.webExtensions.image) "global" .Values.global) | quote }}
6666
command: ['sh', '-c', 'mkdir -p /extensions/importer && cp -R /usr/share/nginx/html/importer/ /extensions/']
6767
volumeMounts:
6868
- name: extensions
6969
mountPath: /extensions
7070
{{- end }}
7171
{{- if .Values.webExtensions.extensions.jsonviewer.enabled }}
7272
- name: init-jsonviewer
73-
image: {{ .Values.webExtensions.extensions.jsonviewer.repository }}:{{ .Values.webExtensions.extensions.jsonviewer.tag }}
73+
image: {{ include "opencloud.image" (dict "imageValues" (merge (dict "tag" .Values.webExtensions.extensions.jsonviewer.tag) .Values.webExtensions.image) "global" .Values.global) | quote }}
7474
command: ['sh', '-c', 'mkdir -p /extensions/json-viewer && cp -R /usr/share/nginx/html/json-viewer/ /extensions/']
7575
volumeMounts:
7676
- name: extensions
7777
mountPath: /extensions
7878
{{- end }}
7979
{{- if .Values.webExtensions.extensions.progressbars.enabled }}
8080
- name: init-progressbars
81-
image: {{ .Values.webExtensions.extensions.progressbars.repository }}:{{ .Values.webExtensions.extensions.progressbars.tag }}
81+
image: {{ include "opencloud.image" (dict "imageValues" (merge (dict "tag" .Values.webExtensions.extensions.progressbars.tag) .Values.webExtensions.image) "global" .Values.global) | quote }}
8282
command: ['sh', '-c', 'mkdir -p /extensions/progress-bars && cp -R /usr/share/nginx/html/progress-bars/ /extensions/']
8383
volumeMounts:
8484
- name: extensions
8585
mountPath: /extensions
8686
{{- end }}
8787
{{- if .Values.webExtensions.extensions.unzip.enabled }}
8888
- name: init-unzip
89-
image: {{ .Values.webExtensions.extensions.unzip.repository }}:{{ .Values.webExtensions.extensions.unzip.tag }}
89+
image: {{ include "opencloud.image" (dict "imageValues" (merge (dict "tag" .Values.webExtensions.extensions.unzip.tag) .Values.webExtensions.image) "global" .Values.global) | quote }}
9090
command: ['sh', '-c', 'mkdir -p /extensions/unzip && cp -R /usr/share/nginx/html/unzip/ /extensions/']
9191
volumeMounts:
9292
- name: extensions
@@ -106,7 +106,7 @@ spec:
106106
{{- end }}
107107
containers:
108108
- name: opencloud
109-
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
109+
image: {{ include "opencloud.image" (dict "imageValues" .Values.image "global" .Values.global) | quote }}
110110
securityContext:
111111
allowPrivilegeEscalation: false
112112
capabilities:
@@ -115,7 +115,7 @@ spec:
115115
runAsNonRoot: true
116116
seccompProfile:
117117
type: RuntimeDefault
118-
imagePullPolicy: {{ .Values.image.pullPolicy }}
118+
imagePullPolicy: {{ include "opencloud.image.pullPolicy" (dict "pullPolicy" .Values.image.pullPolicy "global" .Values.global) }}
119119
command: ["/bin/sh"]
120120
args: ["-c", "opencloud init || true; opencloud server"]
121121
{{- with .Values.opencloud.envFrom }}

charts/opencloud/templates/postgres/deployment.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ spec:
2424
fsGroup: 999 # Default PostgreSQL group ID
2525
containers:
2626
- name: postgres
27-
image: {{ .Values.postgres.image.repository }}:{{ .Values.postgres.image.tag }}
28-
imagePullPolicy: {{ .Values.postgres.image.pullPolicy }}
27+
image: {{ include "opencloud.image" (dict "imageValues" .Values.postgres.image "global" .Values.global) | quote }}
28+
imagePullPolicy: {{ include "opencloud.image.pullPolicy" (dict "pullPolicy" .Values.postgres.image.pullPolicy "global" .Values.global) }}
2929
env:
3030
- name: POSTGRES_DB
3131
value: {{ .Values.postgres.database | quote }}

0 commit comments

Comments
 (0)