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.