Database Integration📜
If the package you are integrating connects to a database, you will need to follow the instructions below to integrate this feature into Big Bang.
Prerequisites📜
- Existing database
 
Integration📜
Stateful applications in Big Bang use two different common patterns to connect to a database. For development purposes, a third pattern is also available, but is not recommended for production.
- 
Package charts accept value inputs for hostname, username, and password. The package chart generates the required Kubernetes Secret and/or ConfigMap.
 - 
Package chart accepts a secret name where all the DB connection info is defined. In these cases, we generate the secret in the Big Bang umbrella chart.
 - 
DEVELOPMENT ONLY: many charts have an optional dependency on a PostgreSQL (or other database) chart. In these cases, the package chart will use the PostgreSQL chart to create a database and user for the package. This is not recommended for production because it is ephemeral and not persistent.
 
The following steps can be used to configure a database:
- Add database values for the package in bigbang/chart/values.yaml
 
NOTE: Names of key/values may differ based on the specific package application. Please refer to package chart values to validate key/value pairs are valid. Refer to specific application documentation for additional information on connecting to a database.
<package>
  database:
    # -- Hostname of a pre-existing PostgreSQL database to use.
    host: ""
    # -- Port of a pre-existing PostgreSQL database to use.
    port: ""
    # -- Database name to connect to on host.
    database: ""
    # -- Username to connect as to external database, the user must have all privileges on the database.
    username: ""
    # -- Database password for the username used to connect to the existing database.
    password: ""
Example: Anchore
Next details the first way packages connect to a pre-existing database.
- 
Package charts accept values for hostname, username, and/or password. The package chart generates the required Secret and/or ConfigMap.
- 
Add a conditional statement to
bigbang/chart/templates/<package>/valuesthat will check if the database values exist and creates the necessary postgresql values. - 
To disable internal package StatefulSet database: input server, database, username, and port database values. Internal database is disabled by setting
enabled: false. - 
If database values are NOT provided, then the internal package StatefulSet database is enabled by default with default credentials.
 
 - 
 
# External Postgres config
{{- with .Values.<package>.database }}
postgresql:
  {{- if and .host .username .password .database .port }}
  # Use external database
  enabled: false
  postgresqlServer: {{ .host }}
  postgresqlDatabase: {{ .database }}
  postgresqlUsername: {{ .username }}
  service:
    port: {{ .port }}
  {{- else }}
  # Use internal database, defaults are fine
  enabled: true
  {{- end }}
{{- end }}
Example: Anchore
The alternative way packages connect to a pre-existing database is detailed below.
- 
Package chart accepts a secret name where all the DB connection info is defined. In these cases, we make the secret in the BB chart.
- Add conditional statement in 
chart/templates/<package>/values.yamlto add values for database secret, if database values exist. Otherwise, the internal database is deployed. 
 - Add conditional statement in 
 
{{- with .Values.addons.<package>.database }}
{{- if and .username .password .host .port .database }}
database:
  secret: "<package>-database-secret"
{{- else }}
postgresql:
  image:
    pullSecrets:
      - private-registry
  install: true
{{- end }}
{{- end }}
Example: Mattermost
* Create manifest that uses database values to create the database secret referenced above.
{{- if .Values.addons.<package>.enabled }}
{{- with .Values.addons.<package>.database }}
{{- if and .username .password .host .port .database }}
apiVersion: v1
kind: Secret
type: Opaque
metadata:
  name: <package>-database-secret
  namespace: <package>
  labels:
    {{- include "commonLabels" $ | nindent 4}}
stringData:
  DB_CONNECTION_CHECK_URL: "postgres://{{ .username }}:{{ .password }}@{{ .host }}:{{ .port }}/{{ .database }}?connect_timeout=10&sslmode={{ .ssl_mode | default "disable" }}"
  DB_CONNECTION_STRING: "postgres://{{ .username }}:{{ .password }}@{{ .host }}:{{ .port }}/{{ .database }}?connect_timeout=10&sslmode={{ .ssl_mode | default "disable" }}"
{{- end }}
{{- end }}
{{- end }}
Example: Mattermost
Validation📜
For validating connection to the external database in your environment or testing in CI pipeline, you will need to add the database specific values to your overrides file or ./tests/test-values.yaml respectively.
Mattermost Example:
addons:
  mattermost:
    enabled: true
    database:
      host: "mm-postgres.bigbang.dev"
      port: "5432"
      username: "admin"
      password: "Pa55w0rd"
      database: "db1