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.