-
Notifications
You must be signed in to change notification settings - Fork 0
Resolve external secrets by convention #26
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 2 commits
83bf554
fe1e80e
5fa2795
1c2076a
030b538
35e32fb
496a8c3
d6084da
2b8d4d0
6c23453
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -41,91 +41,13 @@ spec: | |||||||||||||||||||||||||||||||||||||
| name: {{ .Values.secretEnv.existingSecret | default "openops-env" }} | ||||||||||||||||||||||||||||||||||||||
| creationPolicy: Owner | ||||||||||||||||||||||||||||||||||||||
| data: | ||||||||||||||||||||||||||||||||||||||
| - secretKey: OPS_ENCRYPTION_KEY | ||||||||||||||||||||||||||||||||||||||
| remoteRef: | ||||||||||||||||||||||||||||||||||||||
| key: {{ .Values.externalSecrets.secretName }} | ||||||||||||||||||||||||||||||||||||||
| property: OPS_ENCRYPTION_KEY | ||||||||||||||||||||||||||||||||||||||
| - secretKey: OPS_JWT_SECRET | ||||||||||||||||||||||||||||||||||||||
| remoteRef: | ||||||||||||||||||||||||||||||||||||||
| key: {{ .Values.externalSecrets.secretName }} | ||||||||||||||||||||||||||||||||||||||
| property: OPS_JWT_SECRET | ||||||||||||||||||||||||||||||||||||||
| - secretKey: OPS_POSTGRES_PASSWORD | ||||||||||||||||||||||||||||||||||||||
| remoteRef: | ||||||||||||||||||||||||||||||||||||||
| key: {{ .Values.externalSecrets.secretName }} | ||||||||||||||||||||||||||||||||||||||
| property: OPS_POSTGRES_PASSWORD | ||||||||||||||||||||||||||||||||||||||
| - secretKey: OPS_OPENOPS_ADMIN_PASSWORD | ||||||||||||||||||||||||||||||||||||||
| remoteRef: | ||||||||||||||||||||||||||||||||||||||
| key: {{ .Values.externalSecrets.secretName }} | ||||||||||||||||||||||||||||||||||||||
| property: OPS_OPENOPS_ADMIN_PASSWORD | ||||||||||||||||||||||||||||||||||||||
| - secretKey: OPS_ANALYTICS_ADMIN_PASSWORD | ||||||||||||||||||||||||||||||||||||||
| remoteRef: | ||||||||||||||||||||||||||||||||||||||
| key: {{ .Values.externalSecrets.secretName }} | ||||||||||||||||||||||||||||||||||||||
| property: OPS_ANALYTICS_ADMIN_PASSWORD | ||||||||||||||||||||||||||||||||||||||
| - secretKey: ANALYTICS_POWERUSER_PASSWORD | ||||||||||||||||||||||||||||||||||||||
| remoteRef: | ||||||||||||||||||||||||||||||||||||||
| key: {{ .Values.externalSecrets.secretName }} | ||||||||||||||||||||||||||||||||||||||
| property: ANALYTICS_POWERUSER_PASSWORD | ||||||||||||||||||||||||||||||||||||||
| - secretKey: OPS_SLACK_APP_SIGNING_SECRET | ||||||||||||||||||||||||||||||||||||||
| remoteRef: | ||||||||||||||||||||||||||||||||||||||
| key: {{ .Values.externalSecrets.secretName }} | ||||||||||||||||||||||||||||||||||||||
| property: OPS_SLACK_APP_SIGNING_SECRET | ||||||||||||||||||||||||||||||||||||||
| - secretKey: OPS_LOGZIO_TOKEN | ||||||||||||||||||||||||||||||||||||||
| remoteRef: | ||||||||||||||||||||||||||||||||||||||
| key: {{ .Values.externalSecrets.secretName }} | ||||||||||||||||||||||||||||||||||||||
| property: OPS_LOGZIO_TOKEN | ||||||||||||||||||||||||||||||||||||||
| - secretKey: OPS_OPENOPS_ADMIN_PASSWORD_SALT | ||||||||||||||||||||||||||||||||||||||
| remoteRef: | ||||||||||||||||||||||||||||||||||||||
| key: {{ .Values.externalSecrets.secretName }} | ||||||||||||||||||||||||||||||||||||||
| property: OPS_OPENOPS_ADMIN_PASSWORD_SALT | ||||||||||||||||||||||||||||||||||||||
| - secretKey: OPS_LANGFUSE_PUBLIC_KEY | ||||||||||||||||||||||||||||||||||||||
| remoteRef: | ||||||||||||||||||||||||||||||||||||||
| key: {{ .Values.externalSecrets.secretName }} | ||||||||||||||||||||||||||||||||||||||
| property: OPS_LANGFUSE_PUBLIC_KEY | ||||||||||||||||||||||||||||||||||||||
| - secretKey: OPS_LANGFUSE_SECRET_KEY | ||||||||||||||||||||||||||||||||||||||
| remoteRef: | ||||||||||||||||||||||||||||||||||||||
| key: {{ .Values.externalSecrets.secretName }} | ||||||||||||||||||||||||||||||||||||||
| property: OPS_LANGFUSE_SECRET_KEY | ||||||||||||||||||||||||||||||||||||||
| - secretKey: OPS_SSO_FRONTEGG_PUBLIC_KEY | ||||||||||||||||||||||||||||||||||||||
| remoteRef: | ||||||||||||||||||||||||||||||||||||||
| key: {{ .Values.externalSecrets.secretName }} | ||||||||||||||||||||||||||||||||||||||
| property: OPS_SSO_FRONTEGG_PUBLIC_KEY | ||||||||||||||||||||||||||||||||||||||
| # Tables derived keys | ||||||||||||||||||||||||||||||||||||||
| - secretKey: LOGZIO_TOKEN | ||||||||||||||||||||||||||||||||||||||
| remoteRef: | ||||||||||||||||||||||||||||||||||||||
| key: {{ .Values.externalSecrets.secretName }} | ||||||||||||||||||||||||||||||||||||||
| property: OPS_LOGZIO_TOKEN | ||||||||||||||||||||||||||||||||||||||
| - secretKey: OPENOPS_ADMIN_PASSWORD_SALT | ||||||||||||||||||||||||||||||||||||||
| remoteRef: | ||||||||||||||||||||||||||||||||||||||
| key: {{ .Values.externalSecrets.secretName }} | ||||||||||||||||||||||||||||||||||||||
| property: OPS_OPENOPS_ADMIN_PASSWORD_SALT | ||||||||||||||||||||||||||||||||||||||
| # Tables (Baserow) derived keys | ||||||||||||||||||||||||||||||||||||||
| - secretKey: BASEROW_ADMIN_PASSWORD | ||||||||||||||||||||||||||||||||||||||
| remoteRef: | ||||||||||||||||||||||||||||||||||||||
| key: {{ .Values.externalSecrets.secretName }} | ||||||||||||||||||||||||||||||||||||||
| property: OPS_OPENOPS_ADMIN_PASSWORD | ||||||||||||||||||||||||||||||||||||||
| - secretKey: BASEROW_JWT_SIGNING_KEY | ||||||||||||||||||||||||||||||||||||||
| remoteRef: | ||||||||||||||||||||||||||||||||||||||
| key: {{ .Values.externalSecrets.secretName }} | ||||||||||||||||||||||||||||||||||||||
| property: OPS_JWT_SECRET | ||||||||||||||||||||||||||||||||||||||
| - secretKey: SECRET_KEY | ||||||||||||||||||||||||||||||||||||||
| remoteRef: | ||||||||||||||||||||||||||||||||||||||
| key: {{ .Values.externalSecrets.secretName }} | ||||||||||||||||||||||||||||||||||||||
| property: OPS_ENCRYPTION_KEY | ||||||||||||||||||||||||||||||||||||||
| - secretKey: DATABASE_PASSWORD | ||||||||||||||||||||||||||||||||||||||
| remoteRef: | ||||||||||||||||||||||||||||||||||||||
| key: {{ .Values.externalSecrets.secretName }} | ||||||||||||||||||||||||||||||||||||||
| property: OPS_POSTGRES_PASSWORD | ||||||||||||||||||||||||||||||||||||||
| # Analytics (Superset) derived keys | ||||||||||||||||||||||||||||||||||||||
| - secretKey: ADMIN_PASSWORD | ||||||||||||||||||||||||||||||||||||||
| remoteRef: | ||||||||||||||||||||||||||||||||||||||
| key: {{ .Values.externalSecrets.secretName }} | ||||||||||||||||||||||||||||||||||||||
| property: OPS_ANALYTICS_ADMIN_PASSWORD | ||||||||||||||||||||||||||||||||||||||
| - secretKey: POWERUSER_PASSWORD | ||||||||||||||||||||||||||||||||||||||
| remoteRef: | ||||||||||||||||||||||||||||||||||||||
| key: {{ .Values.externalSecrets.secretName }} | ||||||||||||||||||||||||||||||||||||||
| property: ANALYTICS_POWERUSER_PASSWORD | ||||||||||||||||||||||||||||||||||||||
| - secretKey: SUPERSET_SECRET_KEY | ||||||||||||||||||||||||||||||||||||||
| remoteRef: | ||||||||||||||||||||||||||||||||||||||
| key: {{ .Values.externalSecrets.secretName }} | ||||||||||||||||||||||||||||||||||||||
| property: SUPERSET_SECRET_KEY | ||||||||||||||||||||||||||||||||||||||
| {{- $allEnv := dict -}} | ||||||||||||||||||||||||||||||||||||||
| {{- range $k, $v := .Values.openopsEnv }}{{ $_ := set $allEnv $k ($v | toString) }}{{ end }} | ||||||||||||||||||||||||||||||||||||||
| {{- range $k, $v := .Values.tables.env }}{{ if not (hasKey $allEnv $k) }}{{ $_ := set $allEnv $k ($v | toString) }}{{ end }}{{ end }} | ||||||||||||||||||||||||||||||||||||||
|
Comment on lines
43
to
+47
|
||||||||||||||||||||||||||||||||||||||
| {{- range $k, $v := .Values.analytics.env }}{{ if not (hasKey $allEnv $k) }}{{ $_ := set $allEnv $k ($v | toString) }}{{ end }}{{ end }} | ||||||||||||||||||||||||||||||||||||||
| {{- range $k, $v := .Values.postgres.env }}{{ if not (hasKey $allEnv $k) }}{{ $_ := set $allEnv $k ($v | toString) }}{{ end }}{{ end }} | ||||||||||||||||||||||||||||||||||||||
| {{- if .Values.engine }}{{- if .Values.engine.env }} | ||||||||||||||||||||||||||||||||||||||
| {{- range $k, $v := .Values.engine.env }}{{ if not (hasKey $allEnv $k) }}{{ $_ := set $allEnv $k ($v | toString) }}{{ end }}{{ end }} | ||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+47
to
+51
|
||||||||||||||||||||||||||||||||||||||
| {{- range $k, $v := .Values.tables.env }}{{ if not (hasKey $allEnv $k) }}{{ $_ := set $allEnv $k ($v | toString) }}{{ end }}{{ end }} | |
| {{- range $k, $v := .Values.analytics.env }}{{ if not (hasKey $allEnv $k) }}{{ $_ := set $allEnv $k ($v | toString) }}{{ end }}{{ end }} | |
| {{- range $k, $v := .Values.postgres.env }}{{ if not (hasKey $allEnv $k) }}{{ $_ := set $allEnv $k ($v | toString) }}{{ end }}{{ end }} | |
| {{- if .Values.engine }}{{- if .Values.engine.env }} | |
| {{- range $k, $v := .Values.engine.env }}{{ if not (hasKey $allEnv $k) }}{{ $_ := set $allEnv $k ($v | toString) }}{{ end }}{{ end }} | |
| {{- range $k, $v := .Values.tables.env }}{{ $_ := set $allEnv $k ($v | toString) }}{{ end }} | |
| {{- range $k, $v := .Values.analytics.env }}{{ $_ := set $allEnv $k ($v | toString) }}{{ end }} | |
| {{- range $k, $v := .Values.postgres.env }}{{ $_ := set $allEnv $k ($v | toString) }}{{ end }} | |
| {{- if .Values.engine }}{{- if .Values.engine.env }} | |
| {{- range $k, $v := .Values.engine.env }}{{ $_ := set $allEnv $k ($v | toString) }}{{ end }} |
Copilot
AI
Mar 6, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
data: is followed by template actions starting at column 0 using {{- ... -}}. The leading - trims the newline/whitespace before the action, which can cause data: and the first rendered list item to end up on the same line (invalid YAML) or otherwise mis-indented. Keep the newline after data: and indent the rendered list items under it (e.g., avoid left-trimming here and/or nindent the included output).
| {{- $allEnv := dict -}} | |
| {{- range $k, $v := .Values.openopsEnv }}{{ $_ := set $allEnv $k ($v | toString) }}{{ end }} | |
| {{- range $k, $v := .Values.tables.env }}{{ if not (hasKey $allEnv $k) }}{{ $_ := set $allEnv $k ($v | toString) }}{{ end }}{{ end }} | |
| {{- range $k, $v := .Values.analytics.env }}{{ if not (hasKey $allEnv $k) }}{{ $_ := set $allEnv $k ($v | toString) }}{{ end }}{{ end }} | |
| {{- range $k, $v := .Values.postgres.env }}{{ if not (hasKey $allEnv $k) }}{{ $_ := set $allEnv $k ($v | toString) }}{{ end }}{{ end }} | |
| {{- if .Values.engine }}{{- if .Values.engine.env }} | |
| {{- range $k, $v := .Values.engine.env }}{{ if not (hasKey $allEnv $k) }}{{ $_ := set $allEnv $k ($v | toString) }}{{ end }}{{ end }} | |
| {{- end }}{{- end }} | |
| {{- include "openops.collectSecretEntries" (dict "env" $allEnv "secretName" .Values.externalSecrets.secretName) }} | |
| {{ $allEnv := dict -}} | |
| {{ range $k, $v := .Values.openopsEnv }}{{ $_ := set $allEnv $k ($v | toString) }}{{ end }} | |
| {{ range $k, $v := .Values.tables.env }}{{ if not (hasKey $allEnv $k) }}{{ $_ := set $allEnv $k ($v | toString) }}{{ end }}{{ end }} | |
| {{ range $k, $v := .Values.analytics.env }}{{ if not (hasKey $allEnv $k) }}{{ $_ := set $allEnv $k ($v | toString) }}{{ end }}{{ end }} | |
| {{ range $k, $v := .Values.postgres.env }}{{ if not (hasKey $allEnv $k) }}{{ $_ := set $allEnv $k ($v | toString) }}{{ end }}{{ end }} | |
| {{ if .Values.engine }}{{ if .Values.engine.env }} | |
| {{ range $k, $v := .Values.engine.env }}{{ if not (hasKey $allEnv $k) }}{{ $_ := set $allEnv $k ($v | toString) }}{{ end }}{{ end }} | |
| {{ end }}{{ end }} | |
| {{ include "openops.collectSecretEntries" (dict "env" $allEnv "secretName" .Values.externalSecrets.secretName) }} |
| Original file line number | Diff line number | Diff line change | ||||||
|---|---|---|---|---|---|---|---|---|
|
|
@@ -150,6 +150,8 @@ openopsEnv: | |||||||
| OPS_CODE_BLOCK_MEMORY_LIMIT_IN_MB: "256" | ||||||||
| OPS_SLACK_APP_SIGNING_SECRET: "" | ||||||||
| OPS_SLACK_ENABLE_INTERACTIONS: "true" | ||||||||
| # Superset secret key (analytics) - separate from OPS_ENCRYPTION_KEY | ||||||||
| SUPERSET_SECRET_KEY: "" | ||||||||
|
||||||||
| SUPERSET_SECRET_KEY: "" | |
| # NOTE: Override this with a strong, unique value in your own values file for production. | |
| SUPERSET_SECRET_KEY: "CHANGE_ME_SUPERSET_SECRET_KEY" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
openops.secretPropertyNameis not robust for the actual value strings used in values.yaml (they are typically quoted, e.g."{{ .Values.openopsEnvSecrets.X }}"). Because the function only trims{{/}}and spaces, it will often fail to strip leading quotes/whitespace and may emit an invalidremoteRef.propertylike the full template string. Consider extracting the referenced key with a regex (capture group on\.Values\.openopsEnvSecrets\.([A-Z0-9_]+)) and falling back to$keywhen there is no match.