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:

$ charmcraft list-extensions
Extension name    Supported bases    Experimental bases
----------------  -----------------  --------------------
flask-framework                      ubuntu@22.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
user@host:~$
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
ls -R
user@host:~$
.: > charmcraft.yaml  requirements.txt  src
./src:
charm.py
cat charmcraft.yaml
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
CHARMCRAFT_ENABLE_EXPERIMENTAL_EXTENSIONS=1 charmcraft expand-extensions
user@host:~$
*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.