Manage extensions¶
This guide shows how to view available extensions and view details about extensions in use.
View all the available extensions¶
To view all the available Rockcraft or Charmcraft extensions, run the rockcraft list-extensions or charmcraft list-extensions command. For example:
user@host:~$ charmcraft list-extensions
Extension name Supported bases Experimental bases
--------------------- -------------------------- --------------------
django-framework ubuntu@22.04, ubuntu@24.04 ubuntu@26.04
expressjs-framework ubuntu@24.04 ubuntu@26.04
fastapi-framework ubuntu@24.04 ubuntu@26.04
flask-framework ubuntu@22.04, ubuntu@24.04 ubuntu@26.04
go-framework ubuntu@24.04 ubuntu@26.04
spring-boot-framework ubuntu@24.04 ubuntu@26.04
View details about the extension in use¶
Suppose you’ve initialised a rock / charm with a profile that comes with
an extension (currently, flask-framework), and your
rockcraft.yaml / charmcraft.yaml > extensions lists this
extension.
Example
mkdir my-flask-app-k8s
cd my-flask-app-k8s/
charmcraft init --profile flask-framework
Charmed operator package file and directory tree initialised.
Now edit the following package files to provide fundamental charm metadata
and other information:
charmcraft.yaml
src/charm.py
README.md
user@host:~$ ls -R
.:
charmcraft.yaml requirements.txt src
./src:
charm.py
name: my-flask-app-k8s
type: charm
bases:
- build-on:
- name: ubuntu
channel: "22.04"
run-on:
- name: ubuntu
channel: "22.04"
# (Required)
summary: A very short one-line summary of the flask application.
# (Required)
description: |
A comprehensive overview of your Flask application.
extensions:
- flask-framework
# Uncomment the integrations used by your application
# requires:
# mysql:
# interface: mysql_client
# limit: 1
# postgresql:
# interface: postgresql_client
# limit: 1
To view details about what that extension is adding to your charm, set the
CHARMCRAFT_ENABLE_EXPERIMENTAL_EXTENSIONS environment variable to 1,
then run charmcraft expand-extensions. For example:
Expanding an extension
user@host:~$ CHARMCRAFT_ENABLE_EXPERIMENTAL_EXTENSIONS=1 charmcraft expand-extensions
*EXPERIMENTAL* extension 'flask-framework' enabled
name: my-flask-app-k8s
summary: A very short one-line summary of the flask application.
description: |
A comprehensive overview of your Flask application.
parts:
charm:
source: .
charm-entrypoint: src/charm.py
charm-binary-python-packages: []
charm-python-packages: []
charm-requirements:
- requirements.txt
charm-strict-dependencies: false
plugin: charm
type: charm
bases:
- build-on:
- name: ubuntu
channel: '22.04'
run-on:
- name: ubuntu
channel: '22.04'
actions:
rotate-secret-key:
description: Rotate the flask secret key. Users will be forced to log in again.
This might be useful if a security breach occurs.
assumes:
- k8s-api
containers:
flask-app:
resource: flask-app-image
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
resources:
flask-app-image:
type: oci-image
description: flask application image.
config:
options:
webserver-keepalive:
type: int
description: Time in seconds for webserver to wait for requests on a Keep-Alive
connection.
webserver-threads:
type: int
description: Run each webserver worker with the specified number of threads.
webserver-timeout:
type: int
description: Time in seconds to kill and restart silent webserver workers.
webserver-workers:
type: int
description: The number of webserver worker processes for handling requests.
flask-application-root:
type: string
description: Path in which the application / web server is mounted. This configuration
will set the FLASK_APPLICATION_ROOT environment variable. Run app.config.from_prefixed_env()
in your Flask application in order to receive this configuration.
flask-debug:
type: boolean
description: Whether Flask debug mode is enabled.
flask-env:
type: string
description: What environment the Flask app is running in, by default it's 'production'.
flask-permanent-session-lifetime:
type: int
description: Time in seconds for the cookie to expire in the Flask application
permanent sessions. This configuration will set the FLASK_PERMANENT_SESSION_LIFETIME
environment variable. Run app.config.from_prefixed_env() in your Flask application
in order to receive this configuration.
flask-preferred-url-scheme:
type: string
default: HTTPS
description: Scheme for generating external URLs when not in a request context
in the Flask application. By default, it's "HTTPS". This configuration will
set the FLASK_PREFERRED_URL_SCHEME environment variable. Run app.config.from_prefixed_env()
in your Flask application in order to receive this configuration.
flask-secret-key:
type: string
description: The secret key used for securely signing the session cookie and
for any other security related needs by your Flask application. This configuration
will set the FLASK_SECRET_KEY environment variable. Run app.config.from_prefixed_env()
in your Flask application in order to receive this configuration.
flask-session-cookie-secure:
type: boolean
description: Set the secure attribute in the Flask application cookies. This
configuration will set the FLASK_SESSION_COOKIE_SECURE environment variable.
Run app.config.from_prefixed_env() in your Flask application in order to
receive this configuration.
To expand charmcraft.yaml using the extensions specified in the file
and output the resulting configuration to the terminal, run
expand-extensions. To expand the
extensions listed in rockcraft.yaml, run expand-extensions.