The flask-framework
Charmcraft extension includes configuration options customised for a Flask application. This document describes all the keys that a user may interact with.
If you’d like to see the full contents contributed by this extension:
See How to manage extensions.
charmcraft.yaml
> config
> options
You can use the predefined options (run charmcraft expand-extensions
for details) but also add your own, as needed.
In the latter case, any option you define will be used to generate environment variables; a user-defined option config-option-name
will generate an environment variable named FLASK_CONFIG_OPTION_NAME
where the option name is converted to upper case and dashes are converted to underscores.
In either case, you will be able to set it in the usual way by running juju config <application> <option>=<value>
. For example, if you define an option called token
, as below, this will generate a FLASK_TOKEN
environment variable, and a user of your charm can set it by running juju config <application> token=<token>
.
config:
options:
token:
description: The token for the service.
type: string
required: true
charmcraft.yaml
> peers
, provides
, requires
Your charm already has some peers
, provides
, and requires
integrations, for internal purposes.
Expand to view pre-loaded integrations
peers:
secret-storage:
interface: secret-storage
provides:
metrics-endpoint:
interface: prometheus_scrape
grafana-dashboard:
interface: grafana_dashboard
requires:
logging:
interface: loki_push_api
ingress:
interface: ingress
limit: 1
In addition to these, in each provides
and requires
block you may specifying further integration endpoints, to integrate with the following charms and bundles:
- Ingress: traefik and nginx ingress integrator
- MySQL: machine and k8s charm
- PostgreSQL: machine and k8s charm
- MongoDB
- Canonical Observability Stack (COS)
- Redis
- SAML
- S3
These endpoint definitions are as below:
requires:
mysql:
interface: mysql_client
optional: True
limit: 1
requires:
postgresql:
interface: postgresql_client
optional: True
limit: 1
requires:
mongodb:
interface: mongodb_client
optional: True
limit: 1
requires:
redis:
interface: redis
optional: True
limit: 1
requires:
saml:
interface: saml
optional: True
limit: 1
requires:
s3:
interface: s3
optional: True
limit: 1
To add one of these integrations, e.g. postgresql, in the charmcraft.yaml
file include the appropriate requires block and integrate with juju integrate <flask charm> postgresql
as usual.
After the integration has been established, the connection string will be
available as an environment variable. Integration with PostgreSQL, MySQL, MongoDB or Redis provides the string as the POSTGRESQL_DB_CONNECT_STRING
, MYSQL_DB_CONNECT_STRING
,
MONGODB_DB_CONNECT_STRING
or REDIS_DB_CONNECT_STRING
environment variables respectively. Furthermore, the following environment variables will be provided to your Flask application for integrations with PostgreSQL, MySQL, MongoDB or Redis:
<integration>_DB_SCHEME
<integration>_DB_NETLOC
<integration>_DB_PATH
<integration>_DB_PARAMS
<integration>_DB_QUERY
<integration>_DB_FRAGMENT
<integration>_DB_USERNAME
<integration>_DB_PASSWORD
<integration>_DB_HOSTNAME
<integration>_DB_PORT
<integration>_DB_NAME
Here, <integration>
is replaced by POSTGRESQL
, MYSQL
MONGODB
or REDIS
for the relevant integration.
The provided SAML environment variables are as follows:
SAML_ENTITY_ID
(required)SAML_METADATA_URL
(required)SAML_SINGLE_SIGN_ON_REDIRECT_URL
(required)SAML_SIGNING_CERTIFICATE
(required)
The S3 integration creates the following environment variables that you may use to configure your Flask application: :
S3_ACCESS_KEY
(required)S3_SECRET_KEY
(required)S3_BUCKET
(required)S3_REGION
S3_STORAGE_CLASS
S3_ENDPOINT
S3_PATH
S3_API_VERSION
S3_URI_STYLE
S3_ADDRESSING_STYLE
S3_ATTRIBUTES
S3_TLS_CA_CHAIN
The environment variable FLASK_BASE_URL
provides the Ingress URL for an Ingress integration or the Kubernetes service URL if there is no Ingress integration.
HTTP Proxy
Proxy settings should be set as model configurations. Charms generated using the flask-framework
extension will make the Juju proxy settings available as the HTTP_PROXY
, HTTPS_PROXY
and NO_PROXY
environment variables. For example, the juju-http-proxy
environment variable will be exposed as HTTP_PROXY
to the Flask service.
See more: Juju | List of model configuration keys
Contributors: @econley, @javierdelapuente, @jdkandersson, @tmihoc