-
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 all 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 | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -143,11 +143,16 @@ Secret name used to store sensitive environment variables. | |||||||||||||||
| {{- end }} | ||||||||||||||||
|
|
||||||||||||||||
| {{/* | ||||||||||||||||
| Determine if an environment variable name should be treated as a secret. | ||||||||||||||||
| Determine if an environment variable should be treated as a secret. | ||||||||||||||||
| A key is a secret if it exists in openopsEnvSecrets or its value references openopsEnvSecrets. | ||||||||||||||||
| Expected dict: { "root": $, "key": "ENV_VAR", "value": "some-value" } | ||||||||||||||||
| */}} | ||||||||||||||||
| {{- define "openops.isSecretKey" -}} | ||||||||||||||||
| {{- $key := upper . -}} | ||||||||||||||||
| {{- if or (contains "PASSWORD" $key) (contains "SECRET" $key) (contains "KEY" $key) (contains "LOGZIO_TOKEN" $key) -}} | ||||||||||||||||
| {{- $root := .root -}} | ||||||||||||||||
| {{- $key := .key -}} | ||||||||||||||||
| {{- $value := .value | default "" | toString -}} | ||||||||||||||||
| {{- $secrets := default (dict) $root.Values.openopsEnvSecrets -}} | ||||||||||||||||
| {{- if or (hasKey $secrets $key) (contains ".Values.openopsEnvSecrets." $value) -}} | ||||||||||||||||
| true | ||||||||||||||||
| {{- else -}} | ||||||||||||||||
| false | ||||||||||||||||
|
|
@@ -162,12 +167,13 @@ Expected dict: { "root": $, "key": "ENV", "value": "value" } | |||||||||||||||
| {{- $root := .root -}} | ||||||||||||||||
| {{- $key := .key -}} | ||||||||||||||||
| {{- $value := .value -}} | ||||||||||||||||
| {{- if eq (include "openops.isSecretKey" $key) "true" -}} | ||||||||||||||||
| {{- if eq (include "openops.isSecretKey" (dict "root" $root "key" $key "value" $value)) "true" -}} | ||||||||||||||||
| - name: {{ $key }} | ||||||||||||||||
| valueFrom: | ||||||||||||||||
| secretKeyRef: | ||||||||||||||||
| name: {{ include "openops.secretName" $root }} | ||||||||||||||||
| key: {{ $key }} | ||||||||||||||||
| optional: true | ||||||||||||||||
| {{- else -}} | ||||||||||||||||
| - name: {{ $key }} | ||||||||||||||||
| value: {{ tpl (tpl $value $root) $root | quote }} | ||||||||||||||||
|
|
@@ -189,7 +195,43 @@ Expected dict: { "root": $, "env": dict } | |||||||||||||||
| {{- end }} | ||||||||||||||||
|
|
||||||||||||||||
| {{/* | ||||||||||||||||
| Render deployment strategy | ||||||||||||||||
| Resolve the AWS Secrets Manager property name for a secret key. | ||||||||||||||||
| For standalone keys (in openopsEnvSecrets), the property is the key itself. | ||||||||||||||||
| For derived keys (in tables/analytics/etc), the value is a template ref like | ||||||||||||||||
| "{{ .Values.openopsEnvSecrets.OPS_POSTGRES_PASSWORD }}" - extract the referenced key name. | ||||||||||||||||
| Expected dict: { "key": "DATABASE_PASSWORD", "value": "{{ .Values.openopsEnvSecrets.OPS_POSTGRES_PASSWORD }}" } | ||||||||||||||||
| */}} | ||||||||||||||||
| {{- define "openops.secretPropertyName" -}} | ||||||||||||||||
| {{- $key := .key -}} | ||||||||||||||||
| {{- $value := .value | toString -}} | ||||||||||||||||
| {{- if contains ".Values.openopsEnvSecrets." $value -}} | ||||||||||||||||
| {{- $value | trimPrefix "{{" | trimPrefix " " | trimSuffix "}}" | trimSuffix " " | trimPrefix ".Values.openopsEnvSecrets." -}} | ||||||||||||||||
| {{- else -}} | ||||||||||||||||
| {{- $key -}} | ||||||||||||||||
| {{- end -}} | ||||||||||||||||
| {{- end }} | ||||||||||||||||
|
|
||||||||||||||||
| {{/* | ||||||||||||||||
| Collect ExternalSecret data entries for all secret keys in an env map. | ||||||||||||||||
| Emits YAML list items for keys that are secrets (in openopsEnvSecrets or referencing it). | ||||||||||||||||
| Expected dict: { "root": $, "env": dict, "secretName": "my-secret" } | ||||||||||||||||
| */}} | ||||||||||||||||
| {{- define "openops.collectSecretEntries" -}} | ||||||||||||||||
| {{- $root := .root -}} | ||||||||||||||||
| {{- $env := .env -}} | ||||||||||||||||
| {{- $secretName := .secretName -}} | ||||||||||||||||
| {{- range $k := keys $env | sortAlpha -}} | ||||||||||||||||
| {{- $v := index $env $k -}} | ||||||||||||||||
| {{- if eq (include "openops.isSecretKey" (dict "root" $root "key" $k "value" ($v | toString))) "true" }} | ||||||||||||||||
| - secretKey: {{ $k }} | ||||||||||||||||
| remoteRef: | ||||||||||||||||
| key: {{ $secretName }} | ||||||||||||||||
| property: {{ include "openops.secretPropertyName" (dict "key" $k "value" ($v | toString)) }} | ||||||||||||||||
| {{- end -}} | ||||||||||||||||
| {{- end -}} | ||||||||||||||||
| {{- end }} | ||||||||||||||||
|
|
||||||||||||||||
| {{/* | ||||||||||||||||
| */}} | ||||||||||||||||
| {{- define "openops.deploymentStrategy" -}} | ||||||||||||||||
| {{- if .Values.global.strategy }} | ||||||||||||||||
|
|
@@ -293,26 +335,26 @@ Validate that required secrets are configured - ALWAYS ENFORCED | |||||||||||||||
| {{- /* Skip validation if using an external secret manager */ -}} | ||||||||||||||||
| {{- $usingExistingSecret := and .Values.secretEnv .Values.secretEnv.existingSecret (not .Values.secretEnv.create) -}} | ||||||||||||||||
| {{- if not $usingExistingSecret -}} | ||||||||||||||||
| {{- $encKey := .Values.openopsEnv.OPS_ENCRYPTION_KEY -}} | ||||||||||||||||
| {{- $encKey := .Values.openopsEnvSecrets.OPS_ENCRYPTION_KEY -}} | ||||||||||||||||
| {{- if not $encKey -}} | ||||||||||||||||
| {{- fail "ERROR: OPS_ENCRYPTION_KEY is required. Generate with: openssl rand -hex 32" -}} | ||||||||||||||||
| {{- fail "ERROR: OPS_ENCRYPTION_KEY is required. Generate with: openssl rand -hex 16" -}} | ||||||||||||||||
| {{- end -}} | ||||||||||||||||
| {{- if ne (len $encKey) 32 -}} | ||||||||||||||||
|
Comment on lines
+338
to
342
|
||||||||||||||||
| {{- fail "ERROR: OPS_ENCRYPTION_KEY must be exactly 32 hex characters" -}} | ||||||||||||||||
| {{- end -}} | ||||||||||||||||
|
Comment on lines
+338
to
344
|
||||||||||||||||
| {{- if not .Values.openopsEnv.OPS_JWT_SECRET -}} | ||||||||||||||||
| {{- fail "ERROR: OPS_JWT_SECRET is required. Generate with: openssl rand -hex 32" -}} | ||||||||||||||||
| {{- if not .Values.openopsEnvSecrets.OPS_JWT_SECRET -}} | ||||||||||||||||
| {{- fail "ERROR: OPS_JWT_SECRET is required. Generate with: openssl rand -hex 16" -}} | ||||||||||||||||
| {{- end -}} | ||||||||||||||||
| {{- if not .Values.openopsEnv.OPS_OPENOPS_ADMIN_PASSWORD -}} | ||||||||||||||||
| {{- if not .Values.openopsEnvSecrets.OPS_OPENOPS_ADMIN_PASSWORD -}} | ||||||||||||||||
| {{- fail "ERROR: OPS_OPENOPS_ADMIN_PASSWORD is required. Use a strong password" -}} | ||||||||||||||||
| {{- end -}} | ||||||||||||||||
| {{- if not .Values.openopsEnv.OPS_POSTGRES_PASSWORD -}} | ||||||||||||||||
| {{- if not .Values.openopsEnvSecrets.OPS_POSTGRES_PASSWORD -}} | ||||||||||||||||
| {{- fail "ERROR: OPS_POSTGRES_PASSWORD is required. Use a strong password" -}} | ||||||||||||||||
| {{- end -}} | ||||||||||||||||
| {{- if not .Values.openopsEnv.OPS_ANALYTICS_ADMIN_PASSWORD -}} | ||||||||||||||||
| {{- if not .Values.openopsEnvSecrets.OPS_ANALYTICS_ADMIN_PASSWORD -}} | ||||||||||||||||
| {{- fail "ERROR: OPS_ANALYTICS_ADMIN_PASSWORD is required. Use a strong password" -}} | ||||||||||||||||
| {{- end -}} | ||||||||||||||||
| {{- if not .Values.openopsEnv.ANALYTICS_POWERUSER_PASSWORD -}} | ||||||||||||||||
| {{- if not .Values.openopsEnvSecrets.ANALYTICS_POWERUSER_PASSWORD -}} | ||||||||||||||||
| {{- fail "ERROR: ANALYTICS_POWERUSER_PASSWORD is required. Use a strong password" -}} | ||||||||||||||||
| {{- end -}} | ||||||||||||||||
| {{- end -}} | ||||||||||||||||
|
Comment on lines
359
to
360
|
||||||||||||||||
| {{- end -}} | |
| {{- end -}} | |
| {{- end -}} | |
| {{- if not .Values.openopsEnvSecrets.SUPERSET_SECRET_KEY -}} | |
| {{- fail "ERROR: SUPERSET_SECRET_KEY is required. Generate with: openssl rand -hex 32" -}} | |
| {{- end -}} | |
| {{- end -}} |
| Original file line number | Diff line number | Diff line change | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -74,6 +74,7 @@ spec: | |||||||||||||
| - name: OPS_COMPONENT | ||||||||||||||
| value: app | ||||||||||||||
| {{ include "openops.renderEnv" (dict "root" . "env" .Values.openopsEnv) | nindent 12 }} | ||||||||||||||
| {{ include "openops.renderEnv" (dict "root" . "env" .Values.openopsEnvSecrets) | nindent 12 }} | ||||||||||||||
|
Comment on lines
76
to
+77
|
||||||||||||||
| {{ include "openops.renderEnv" (dict "root" . "env" .Values.openopsEnv) | nindent 12 }} | |
| {{ include "openops.renderEnv" (dict "root" . "env" .Values.openopsEnvSecrets) | nindent 12 }} | |
| {{- $openopsEnv := .Values.openopsEnv | default (dict) }} | |
| {{- $openopsEnvSecrets := .Values.openopsEnvSecrets | default (dict) }} | |
| {{- $mergedEnv := merge $openopsEnv $openopsEnvSecrets }} | |
| {{ include "openops.renderEnv" (dict "root" . "env" $mergedEnv) | nindent 12 }} |
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -57,6 +57,7 @@ spec: | |||||||||||||||||||||
| - name: OPS_COMPONENT | ||||||||||||||||||||||
| value: engine | ||||||||||||||||||||||
| {{ include "openops.renderEnv" (dict "root" . "env" .Values.openopsEnv) | nindent 12 }} | ||||||||||||||||||||||
| {{ include "openops.renderEnv" (dict "root" . "env" .Values.openopsEnvSecrets) | nindent 12 }} | ||||||||||||||||||||||
|
Comment on lines
59
to
+60
|
||||||||||||||||||||||
| {{ include "openops.renderEnv" (dict "root" . "env" .Values.openopsEnv) | nindent 12 }} | |
| {{ include "openops.renderEnv" (dict "root" . "env" .Values.openopsEnvSecrets) | nindent 12 }} | |
| {{- $mergedEnv := dict -}} | |
| {{- if .Values.openopsEnv }} | |
| {{- $mergedEnv = merge $mergedEnv .Values.openopsEnv }} | |
| {{- end }} | |
| {{- if .Values.openopsEnvSecrets }} | |
| {{- $mergedEnv = merge $mergedEnv .Values.openopsEnvSecrets }} | |
| {{- end }} | |
| {{ include "openops.renderEnv" (dict "root" . "env" $mergedEnv) | nindent 12 }} |
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -41,91 +41,14 @@ 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.openopsEnvSecrets }}{{ $_ := set $allEnv $k ($v | toString) }}{{ end }} | ||||||||||||||||||||||
| {{- range $k, $v := .Values.openopsEnv }}{{ if not (hasKey $allEnv $k) }}{{ $_ := set $allEnv $k ($v | toString) }}{{ end }}{{ 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 }} |
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
|
|
@@ -97,12 +97,8 @@ openopsEnv: | |||||
| OPS_OPENOPS_TABLES_VERSION: "{{ .Values.tables.tag }}" | ||||||
| OPS_ANALYTICS_VERSION: "{{ .Values.analytics.tag }}" | ||||||
|
|
||||||
| # Authentication - REQUIRED, NO DEFAULTS | ||||||
| # Generate secure values with: openssl rand -hex 32 | ||||||
| OPS_ENCRYPTION_KEY: "" # REQUIRED: 32-character hex string | ||||||
| OPS_JWT_SECRET: "" # REQUIRED: Random secret string | ||||||
| # Authentication | ||||||
| OPS_OPENOPS_ADMIN_EMAIL: admin@openops.com | ||||||
| OPS_OPENOPS_ADMIN_PASSWORD: "" # REQUIRED: Strong password | ||||||
|
|
||||||
| # Telemetry | ||||||
| OPS_LOG_LEVEL: info | ||||||
|
|
@@ -125,7 +121,6 @@ openopsEnv: | |||||
| OPS_POSTGRES_HOST: '{{ include "openops.postgresHost" . }}' | ||||||
| OPS_POSTGRES_PORT: '{{ include "openops.postgresPort" . }}' | ||||||
| OPS_POSTGRES_USERNAME: postgres | ||||||
| OPS_POSTGRES_PASSWORD: "" # REQUIRED: Strong password | ||||||
|
|
||||||
| # Tables | ||||||
| OPS_OPENOPS_TABLES_DATABASE_NAME: tables | ||||||
|
|
@@ -139,18 +134,32 @@ openopsEnv: | |||||
| # Analytics | ||||||
| OPS_ANALYTICS_PUBLIC_URL: '{{ include "openops.publicUrl" . }}' | ||||||
| OPS_ANALYTICS_PRIVATE_URL: '{{ include "openops.analyticsServiceUrl" . }}' | ||||||
| OPS_ANALYTICS_ADMIN_PASSWORD: "" # REQUIRED: Strong password | ||||||
| ANALYTICS_POWERUSER_PASSWORD: "" # REQUIRED: Strong password | ||||||
| ANALYTICS_ALLOW_ADHOC_SUBQUERY: "true" | ||||||
|
|
||||||
| # AWS | ||||||
| OPS_AWS_ENABLE_IMPLICIT_ROLE: "false" | ||||||
|
|
||||||
| # Blocks custom settings | ||||||
| OPS_CODE_BLOCK_MEMORY_LIMIT_IN_MB: "256" | ||||||
| OPS_SLACK_APP_SIGNING_SECRET: "" | ||||||
| OPS_SLACK_ENABLE_INTERACTIONS: "true" | ||||||
|
|
||||||
| # Secret environment variables | ||||||
| # Any var in this section is treated as a secret (stored in K8s Secret, referenced via secretKeyRef). | ||||||
| # Generate secure values with: openssl rand -hex 16 | ||||||
| openopsEnvSecrets: | ||||||
| OPS_ENCRYPTION_KEY: "" # REQUIRED: 32-character hex string (openssl rand -hex 16) | ||||||
|
Comment on lines
+146
to
+150
|
||||||
| OPS_JWT_SECRET: "" # REQUIRED: Random secret string | ||||||
| OPS_OPENOPS_ADMIN_PASSWORD: "" # REQUIRED: Strong password | ||||||
| OPS_POSTGRES_PASSWORD: "" # REQUIRED: Strong password | ||||||
| OPS_ANALYTICS_ADMIN_PASSWORD: "" # REQUIRED: Strong password | ||||||
| ANALYTICS_POWERUSER_PASSWORD: "" # REQUIRED: Strong password | ||||||
| OPS_SLACK_APP_SIGNING_SECRET: "" | ||||||
| SUPERSET_SECRET_KEY: "thisISaSECRET_1234" | ||||||
|
||||||
| SUPERSET_SECRET_KEY: "thisISaSECRET_1234" | |
| SUPERSET_SECRET_KEY: "" # REQUIRED: Random secret string |
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.