mirror of
https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk.git
synced 2025-12-06 15:31:38 +01:00
Compare commits
2 Commits
jtorres/de
...
lender/fea
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
38afa2a654 | ||
|
|
8aac097ebb |
38
docs/external-secrets.md
Normal file
38
docs/external-secrets.md
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
<!--
|
||||||
|
SPDX-FileCopyrightText: 2025 Zentrum für Digitale Souveränität der Öffentlichen Verwaltung (ZenDiS) GmbH
|
||||||
|
SPDX-License-Identifier: Apache-2.0
|
||||||
|
-->
|
||||||
|
|
||||||
|
<h1>External Secrets</h1>
|
||||||
|
|
||||||
|
This document covers how to utilise external secrets and special requirements.
|
||||||
|
|
||||||
|
<!-- TOC -->
|
||||||
|
* [General](#general)
|
||||||
|
* [Components](#components)
|
||||||
|
* [Notes](#notes)
|
||||||
|
<!-- TOC -->
|
||||||
|
|
||||||
|
# General
|
||||||
|
|
||||||
|
For most components when set the external secret will supersede e.g. a password in a `values.yaml` file.
|
||||||
|
|
||||||
|
The file [`external_secrets.yaml`](/helmfile/environments/default/external_secrets.yaml.gotmpl) lists all possible references to external secrets that are currently implemented in openDesk.
|
||||||
|
|
||||||
|
# Components
|
||||||
|
|
||||||
|
This section covers information and special requirements to external secrets that some Helm Charts expect.
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
There are some values that consist of more than just one secret part.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
backend:
|
||||||
|
configuration:
|
||||||
|
django:
|
||||||
|
superuserEmail:
|
||||||
|
value: {{ printf "default.admin@%s" .Values.global.domain | quote }}
|
||||||
|
redisUrl:
|
||||||
|
value: "redis://default:{{ .Values.cache.notes.password | default .Values.secrets.redis.password }}@{{ .Values.cache.notes.host }}:{{ .Values.cache.notes.port }}/7"
|
||||||
|
```
|
||||||
@@ -4,8 +4,14 @@
|
|||||||
global:
|
global:
|
||||||
collaborationServerSecret:
|
collaborationServerSecret:
|
||||||
value: {{ .Values.secrets.notes.collaborationSecret | quote }}
|
value: {{ .Values.secrets.notes.collaborationSecret | quote }}
|
||||||
|
existingSecret:
|
||||||
|
name: {{ .Values.externalSecrets.notes.collaborationSecret.name | quote }}
|
||||||
|
key: {{ .Values.externalSecrets.notes.collaborationSecret.key | quote }}
|
||||||
yProviderApiKey:
|
yProviderApiKey:
|
||||||
value: {{ .Values.secrets.notes.collaborationSecret | quote }}
|
value: {{ .Values.secrets.notes.collaborationSecret | quote }}
|
||||||
|
existingSecret:
|
||||||
|
name: {{ .Values.externalSecrets.notes.collaborationSecret.name | quote }}
|
||||||
|
key: {{ .Values.externalSecrets.notes.collaborationSecret.key | quote }}
|
||||||
fqdn: "{{ .Values.global.hosts.notes }}.{{ .Values.global.domain }}"
|
fqdn: "{{ .Values.global.hosts.notes }}.{{ .Values.global.domain }}"
|
||||||
tlsSecretName: {{ .Values.ingress.tls.secretName | quote }}
|
tlsSecretName: {{ .Values.ingress.tls.secretName | quote }}
|
||||||
|
|
||||||
@@ -35,14 +41,23 @@ backend:
|
|||||||
ai:
|
ai:
|
||||||
apiKey:
|
apiKey:
|
||||||
value: {{ .Values.ai.apiKey }}
|
value: {{ .Values.ai.apiKey }}
|
||||||
|
existingSecret:
|
||||||
|
name: {{ .Values.externalSecrets.ai.apiKey.name | quote }}
|
||||||
|
key: {{ .Values.externalSecrets.ai.apiKey.key | quote }}
|
||||||
baseUrl: {{ .Values.ai.endpoint }}
|
baseUrl: {{ .Values.ai.endpoint }}
|
||||||
model: {{ .Values.ai.model | quote }}
|
model: {{ .Values.ai.model | quote }}
|
||||||
aws:
|
aws:
|
||||||
endpointUrl: {{ printf "https://%s" (.Values.objectstores.notes.endpoint | default (printf "%s.%s" .Values.global.hosts.minioApi .Values.global.domain)) | quote }}
|
endpointUrl: {{ printf "https://%s" (.Values.objectstores.notes.endpoint | default (printf "%s.%s" .Values.global.hosts.minioApi .Values.global.domain)) | quote }}
|
||||||
s3AccessKeyId:
|
s3AccessKeyId:
|
||||||
value: {{ .Values.objectstores.notes.username }}
|
value: {{ .Values.objectstores.notes.username }}
|
||||||
|
existingSecret:
|
||||||
|
name: {{ .Values.externalSecrets.objectstores.notes.s3AccessKeyId.name | quote }}
|
||||||
|
key: {{ .Values.externalSecrets.objectstores.notes.s3AccessKeyId.key | quote }}
|
||||||
s3SecretAccessKey:
|
s3SecretAccessKey:
|
||||||
value: {{ .Values.objectstores.notes.secretKey | default .Values.secrets.minio.notesUser | quote }}
|
value: {{ .Values.objectstores.notes.secretKey | default .Values.secrets.minio.notesUser | quote }}
|
||||||
|
existingSecret:
|
||||||
|
name: {{ .Values.externalSecrets.objectstores.notes.s3SecretAccessKey.name | quote }}
|
||||||
|
key: {{ .Values.externalSecrets.objectstores.notes.s3SecretAccessKey.key | quote }}
|
||||||
storageBucketName: {{ .Values.objectstores.notes.bucket }}
|
storageBucketName: {{ .Values.objectstores.notes.bucket }}
|
||||||
collaboration:
|
collaboration:
|
||||||
apiUrl: {{ printf "https://%s.%s/collaboration/api/" .Values.global.hosts.notes .Values.global.domain | quote }}
|
apiUrl: {{ printf "https://%s.%s/collaboration/api/" .Values.global.hosts.notes .Values.global.domain | quote }}
|
||||||
@@ -52,9 +67,15 @@ backend:
|
|||||||
name: {{ .Values.databases.notes.name | quote }}
|
name: {{ .Values.databases.notes.name | quote }}
|
||||||
password:
|
password:
|
||||||
value: {{ .Values.databases.notes.password | default .Values.secrets.postgresql.notesUser | quote }}
|
value: {{ .Values.databases.notes.password | default .Values.secrets.postgresql.notesUser | quote }}
|
||||||
|
existingSecret:
|
||||||
|
name: {{ .Values.externalSecrets.databases.notes.password.name | quote }}
|
||||||
|
key: {{ .Values.externalSecrets.databases.notes.password.key | quote }}
|
||||||
port: {{ .Values.databases.notes.port | quote }}
|
port: {{ .Values.databases.notes.port | quote }}
|
||||||
user:
|
user:
|
||||||
value: {{ .Values.databases.notes.username | quote }}
|
value: {{ .Values.databases.notes.username | quote }}
|
||||||
|
existingSecret:
|
||||||
|
name: {{ .Values.externalSecrets.databases.notes.user.name | quote }}
|
||||||
|
key: {{ .Values.externalSecrets.databases.notes.user.key | quote }}
|
||||||
email:
|
email:
|
||||||
brandName: "openDesk"
|
brandName: "openDesk"
|
||||||
from: "{{ .Values.smtp.localpartNoReply }}@{{ .Values.global.domain }}"
|
from: "{{ .Values.smtp.localpartNoReply }}@{{ .Values.global.domain }}"
|
||||||
@@ -63,14 +84,23 @@ backend:
|
|||||||
logoImage: {{ printf "https://%s.%s/univention/portal/icons/entries/swp.notes.svg" .Values.global.hosts.nubus .Values.global.domain | quote }}
|
logoImage: {{ printf "https://%s.%s/univention/portal/icons/entries/swp.notes.svg" .Values.global.hosts.nubus .Values.global.domain | quote }}
|
||||||
user:
|
user:
|
||||||
value: {{ printf "%s@%s" "opendesk-system" ( .Values.global.mailDomain | default .Values.global.domain ) }}
|
value: {{ printf "%s@%s" "opendesk-system" ( .Values.global.mailDomain | default .Values.global.domain ) }}
|
||||||
|
existingSecret:
|
||||||
|
name: {{ .Values.externalSecrets.postfix.opendeskSystemUsername.name | quote }}
|
||||||
|
key: {{ .Values.externalSecrets.postfix.opendeskSystemUsername.key | quote }}
|
||||||
password:
|
password:
|
||||||
value: {{ .Values.secrets.postfix.opendeskSystemPassword | quote }}
|
value: {{ .Values.secrets.postfix.opendeskSystemPassword | quote }}
|
||||||
|
existingSecret:
|
||||||
|
name: {{ .Values.externalSecrets.postfix.opendeskSystemPassword.name | quote }}
|
||||||
|
key: {{ .Values.externalSecrets.postfix.opendeskSystemPassword.key | quote }}
|
||||||
oidc:
|
oidc:
|
||||||
enabled: true
|
enabled: true
|
||||||
rpClientId:
|
rpClientId:
|
||||||
value: "opendesk-notes"
|
value: "opendesk-notes"
|
||||||
rpClientSecret:
|
rpClientSecret:
|
||||||
value: {{ .Values.secrets.keycloak.clientSecret.notes | quote }}
|
value: {{ .Values.secrets.keycloak.clientSecret.notes | quote }}
|
||||||
|
existingSecret:
|
||||||
|
name: {{ .Values.externalSecrets.keycloak.clientSecret.notes.name | quote }}
|
||||||
|
key: {{ .Values.externalSecrets.keycloak.clientSecret.notes.key | quote }}
|
||||||
opJWKSEndpoint: "https://{{ .Values.global.hosts.keycloak }}.{{ .Values.global.domain }}/realms/{{ .Values.platform.realm }}/protocol/openid-connect/certs"
|
opJWKSEndpoint: "https://{{ .Values.global.hosts.keycloak }}.{{ .Values.global.domain }}/realms/{{ .Values.platform.realm }}/protocol/openid-connect/certs"
|
||||||
opAuthorizationEndpoint: "https://{{ .Values.global.hosts.keycloak }}.{{ .Values.global.domain }}/realms/{{ .Values.platform.realm }}/protocol/openid-connect/auth"
|
opAuthorizationEndpoint: "https://{{ .Values.global.hosts.keycloak }}.{{ .Values.global.domain }}/realms/{{ .Values.platform.realm }}/protocol/openid-connect/auth"
|
||||||
opTokenEndpoint: "https://{{ .Values.global.hosts.keycloak }}.{{ .Values.global.domain }}/realms/{{ .Values.platform.realm }}/protocol/openid-connect/token"
|
opTokenEndpoint: "https://{{ .Values.global.hosts.keycloak }}.{{ .Values.global.domain }}/realms/{{ .Values.platform.realm }}/protocol/openid-connect/token"
|
||||||
@@ -87,14 +117,26 @@ backend:
|
|||||||
django:
|
django:
|
||||||
secretKey:
|
secretKey:
|
||||||
value: {{ .Values.secrets.notes.djangoSecretKey }}
|
value: {{ .Values.secrets.notes.djangoSecretKey }}
|
||||||
|
existingSecret:
|
||||||
|
name: {{ .Values.externalSecrets.notes.django.secretKey.name | quote }}
|
||||||
|
key: {{ .Values.externalSecrets.notes.django.secretKey.key | quote }}
|
||||||
createSuperuser: true
|
createSuperuser: true
|
||||||
superuserEmail:
|
superuserEmail:
|
||||||
value: {{ printf "default.admin@%s" .Values.global.domain | quote }}
|
value: {{ printf "default.admin@%s" .Values.global.domain | quote }}
|
||||||
|
existingSecret:
|
||||||
|
name: {{ .Values.externalSecrets.notes.django.superuserEmail.name | quote }}
|
||||||
|
key: {{ .Values.externalSecrets.notes.django.superuserEmail.key | quote }}
|
||||||
superuserPassword:
|
superuserPassword:
|
||||||
value: {{ .Values.secrets.notes.superuser }}
|
value: {{ .Values.secrets.notes.superuser }}
|
||||||
|
existingSecret:
|
||||||
|
name: {{ .Values.externalSecrets.notes.django.superuserPassword.name | quote }}
|
||||||
|
key: {{ .Values.externalSecrets.notes.django.superuserPassword.key | quote }}
|
||||||
frontendTheme: "openDesk"
|
frontendTheme: "openDesk"
|
||||||
redisUrl:
|
redisUrl:
|
||||||
value: "redis://default:{{ .Values.cache.notes.password | default .Values.secrets.redis.password }}@{{ .Values.cache.notes.host }}:{{ .Values.cache.notes.port }}/7"
|
value: "redis://default:{{ .Values.cache.notes.password | default .Values.secrets.redis.password }}@{{ .Values.cache.notes.host }}:{{ .Values.cache.notes.port }}/7"
|
||||||
|
existingSecret:
|
||||||
|
name: {{ .Values.externalSecrets.notes.redisUrl.name | quote }}
|
||||||
|
key: {{ .Values.externalSecrets.notes.redisUrl.key | quote }}
|
||||||
extraEnvVars:
|
extraEnvVars:
|
||||||
- name: "FRONTEND_HOMEPAGE_FEATURE_ENABLED"
|
- name: "FRONTEND_HOMEPAGE_FEATURE_ENABLED"
|
||||||
value: "False"
|
value: "False"
|
||||||
|
|||||||
55
helmfile/environments/default/external_secrets.yaml.gotmpl
Normal file
55
helmfile/environments/default/external_secrets.yaml.gotmpl
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
# SPDX-FileCopyrightText: 2025 Zentrum für Digitale Souveränität der Öffentlichen Verwaltung (ZenDiS) GmbH
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
# The variables set in this file are required to upgrade components to their "Enterprise" product variant.
|
||||||
|
---
|
||||||
|
externalSecrets:
|
||||||
|
ai:
|
||||||
|
apiKey:
|
||||||
|
name: "a"
|
||||||
|
key: "aiapikey"
|
||||||
|
databases:
|
||||||
|
notes:
|
||||||
|
password:
|
||||||
|
name: "a"
|
||||||
|
key: "notesDatabasePassword"
|
||||||
|
user:
|
||||||
|
name: "a"
|
||||||
|
key: "notesDatabaseUser"
|
||||||
|
keycloak:
|
||||||
|
clientSecret:
|
||||||
|
notes:
|
||||||
|
name: "a"
|
||||||
|
key: "keycloaknotes"
|
||||||
|
notes:
|
||||||
|
collaborationSecret:
|
||||||
|
name: "a"
|
||||||
|
key: "notesCollaborationSecret"
|
||||||
|
django:
|
||||||
|
secretKey:
|
||||||
|
name: "a"
|
||||||
|
key: "notesDjangoSecretKey"
|
||||||
|
superuserEmail:
|
||||||
|
name: "a"
|
||||||
|
key: "notessuperuserEmail"
|
||||||
|
superuserPassword:
|
||||||
|
name: "a"
|
||||||
|
key: "notessuperuserPassword"
|
||||||
|
redisUrl:
|
||||||
|
name: "a"
|
||||||
|
key: "notesredisurl"
|
||||||
|
objectstores:
|
||||||
|
notes:
|
||||||
|
s3AccessKeyId:
|
||||||
|
name: "a"
|
||||||
|
key: "objectstoresNotesS3AccessKeyId"
|
||||||
|
s3SecretAccessKey:
|
||||||
|
name: "a"
|
||||||
|
key: "objectstoresNotesS3SecretAccessKey"
|
||||||
|
postfix:
|
||||||
|
opendeskSystemPassword:
|
||||||
|
name: "a"
|
||||||
|
key: "postfixopendeskSystemPassword"
|
||||||
|
opendeskSystemUsername:
|
||||||
|
name: "a"
|
||||||
|
key: "postfixopendeskSystemUsername"
|
||||||
|
...
|
||||||
Reference in New Issue
Block a user