-
Notifications
You must be signed in to change notification settings - Fork 29
Closed
Description
It's common practice to be able to configure services that rely on connection strings/URIs (e.g. DB, OpenSearch, RabbitMQ, Redis) by individually setting parts of the string via env variables. This allows:
- reusing config in sub-charts (e.g. passing
RABBITMQ_USERto both theweb/workerconfig, but also the RabbitMQ sub-chart) - placing only sensitive information of the config in a secret and exposing as an env var
On the application-side building the SQLALCHEMY_DATABASE_URI config would look something like:
import os
# First check if the full value is set
if os.environ.get("SQLALCHEMY_DATABASE_URI"):
SQLALCHEMY_DATABASE_URI = os.environ.get("SQLALCHEMY_DATABASE_URI")
else:
# Check parts of the config
db_host = os.environ.get("DB_HOST")
db_password = os.environ.get("DB_PASSWORD")
db_user = os.environ.get("DB_USER")
db_name = os.environ.get("DB_NAME")
db_port = os.environ.get("DB_PORT")
if all([db_host, db_password, db_user, db_name, db_port]):
SQLALCHEMY_DATABASE_URI = f"postgresql://{db_user}:{db_password}@{db_host}:{db_port}/{db_name}"
else:
SQLALCHEMY_DATABASE_URI = f"postgresql://invenio:password@localhost:5432/invenio"Important
This requires development in the application modules that configure services like the DB, OpenSearch, RabbitMQ, etc. so that they support loading this type of config.
lindhe
Metadata
Metadata
Assignees
Labels
No labels