Skip to main content

Configuration options

Traitlets

warning

This page is in active development, content may be inaccurate and incomplete.

conda-store is configured via Traitlets. Originally this configuration was done via command line options but as the options grew this seems untenable. conda-store server and worker can be launched via configuration easily.

conda-store-server --config <path-to-conda-store-config.py>
conda-store-worker --config <path-to-conda-store-config.py>

Data directory

The CONDA_STORE_DIR Python variable specifies the conda-store data directory, which is used by some of the configuration options mentioned below, like CondaStore.store_directory and LocalStorage.storage_path. This variable relies on the platformdirs library to select the recommended user data location on each platform. On most systems, this will default to:

  • Linux: /home/<USER>/.local/share/conda-store
  • Windows: C:\Users\<USER>\AppData\Local\conda-store\conda-store
  • macOS: /Users/<USER>/Library/Application Support/conda-store.

The platform user data directory prefix, which is the parent of the conda-store directory above, should correspond to the following environment variables:

  • Linux: $XDG_DATA_HOME
  • Windows: %LOCALAPPDATA%
  • macOS: no dedicated environment variable.

Note that whether these environment variables are actually used by platformdirs is up to the library authors and can be changed at any time. Please use the conda-store configuration options mentioned below instead.

conda_store_server._internal.app.CondaStore

CondaStore.storage_class configures the storage backend to use for storing build artifacts from conda-store. S3 storage is the default. File based storage is also supported but not nearly as well tested.

CondaStore.conda_solve_platforms configures which platforms to solve environments for, via conda-lock. It must include the current platform conda-store is running on. By default, contains only the platform on which conda-store is running.

CondaStore.store_directory is the directory used for conda-store to build the environments.

CondaStore.build_directory template used to form the directory for storing Conda environment builds. Available keys: store_directory, namespace, name. The default will put all built environments in the same namespace within the same directory.

CondaStore.environment_directory template used to form the directory for symlinking Conda environment builds. Available keys: store_directory, namespace, name. The default will put all environments in the same namespace within the same directory.

CondaStore.build_key_version is the build key version to use: 1 (long, legacy), 2 (shorter hash, default), 3 (hash-only, experimental).

CondaStore.validate_specification callable function taking conda_store and specification as input arguments to apply for validating and modifying a given specification. If there are validation issues with the environment ValueError with message will be raised.

CondaStore.validate_action callable function taking conda_store, namespace, and action. If there are issues with performing the given action raise a CondaStoreError should be raised.

CondaStore.conda_command is the command to use for creation of Conda environments. Currently mamba is the default which will usually result in lower peak memory usage and faster builds.

CondaStore.conda_channel_alias is the url to prepend to all shorthand Conda channels that do not specify a url. The default is https://conda.anaconda.org.

CondaStore.conda_platforms are the platforms to download package repodata.json from. By default includes current architecture and noarch.

CondaStore.conda_default_channels is a list of Conda channels that are by default added if channels within the specification is empty.

CondaStore.conda_allowed_channels is a list of Conda channels that are allowed. This also tells conda-store which channels to prefetch the channel repodata and channeldata from. The default is main and conda-forge. If conda_allowed_channels is an empty list all Channels are accepted by users.

CondaStore.conda_indexed_channels tells conda-store which channels to prefetch the channel repodata and channeldata from. The default is main and conda-forge.

CondaStore.conda_default_packages is a list of Conda packages that are included by default if none are specified within the specification dependencies.

CondaStore.conda_required_packages is a list of Conda packages that are required upon validation of the specification dependencies. This will not auto add the packages but instead throw an error that they are missing.

CondaStore.conda_included_packages is a list of Conda packages that if not specified within the specification dependencies will be auto added.

CondaStore.pypi_default_packages is a list of PyPi packages that are included by default if none are specified within the specification dependencies.

CondaStore.pypi_required_packages is a list of PyPi packages that are required upon validation of the specification dependencies. This will not auto add the packages but instead throw an error that they are missing.

CondaStore.pypi_included_packages is a list of PyPi packages that if not specified within the specification dependencies will be auto added.

CondaStore.storage_thresold storage threshold in bytes of minimum available storage required in order to perform builds.

CondaStore.database_url is the url string for connecting to the database. Behind the scenes SQLAlchemy is used for the connection so consult their docs for connecting to your specific database. conda-store will automatically create the tables if they do not already exist.

CondaStore.redis_url is an optional argument to a running Redis instance. This was removed as a dependency as of release 0.4.10 due to the need to have a simple deployment option for conda-store. See documentation for proper specification. This url is used by default for the Celery broker and results backend.

CondaStore.celery_broker_url is the broker use to use for celery. Celery supports a wide range of brokers each with different guarantees. By default the Redis based broker is used if a CondaStore.redis_url if provided otherwise defaults to sqlalchemy. It is production ready and has worked well in practice. The url must be provided in a format that celery understands. The default value is CondaStore.redis_url.

CondaStore.build_artifacts is the list of artifacts for conda-store to build. By default it is all the artifacts that conda-store is capable of building. These are the lockfile, YAML, Conda-Pack, and Docker. Currently the lockfile one is ignored since it is always created upon build.

CondaStore.build_artifacts_kept_on_deletion is a list of artifacts to keep after a given build is deleted. Often an administrator will want to keep around the logs etc. of a build and the Conda solve for the given build.

CondaStore.celery_results_backend is the backend to use for storing all results from celery task execution. conda-store currently does not leverage the backend results but it may be needed for future work using celery. The backend defaults to using the Redis backend if CondaStore.redis_url is specified otherwise uses the CondaStore.database_url. This choice works great in production. Please consult the celery docs on backend.

CondaStore.default_namespace is the default namespace for conda-store to use. All environments are built behind a given namespace.

CondaStore.filesystem_namespace is the namespace to use for environments picked up via CondaStoreWorker.watch_paths on the filesystem.

CondaStore.default_uid is the uid (user id) to assign to all files and directories in a given built environment. This setting is useful if you want to protect environments from modification from certain users and groups. Note: this configuration option is not supported on Windows.

CondaStore.default_gid is the gid (group id) to assign to all files and directories in a given built environment. This setting is useful if you want to protect environments from modification from certain users and groups. Note: this configuration option is not supported on Windows.

CondaStore.default_permissions is the filesystem permissions to assign to all files and directories in a given built environment. This setting is useful if you want to protect environments from modification from certain users and groups. Note: this configuration option is not supported on Windows.

CondaStore.default_docker_base_image default base image used for the Dockerized environments. Make sure to have a proper glibc within image (highly discourage alpine/musl based images). Can also be callable function which takes the orm.Build object as input which has access to all attributes about the build such as installed packages, requested packages, name, namespace, etc. This package at a minimum should have the following packages installed. Often times for non-graphic and non-gpu environments glibc is enough. Hence the default docker image library/debian:sid-slim.

CondaStore.serialize_builds DEPRECATED no longer has any effect

CondaStore.post_update_environment_build_hook is an optional configurable to allow for custom behavior that will run after an environment's current build changes.

conda_store_server.storage.S3Storage

conda-store uses minio-py as a client to connect to S3 "like" object stores.

S3Storage.internal_endpoint is the internal endpoint for conda-store reaching out to s3 bucket. This is the url that conda-store use for get/set s3 blobs. For AWS S3 use the endpoint s3.amazonaws.com.

S3Storage.external_endpoint is the external s3 endpoint for users to reach out to in the presigned url. This is the url that users use for fetching s3 blobs. For AWS S3 use the endpoint s3.amazonaws.com.

S3Storage.access_key is the access key for S3 bucket.

S3Storage.secret_key is the secret key for S3 bucket.

S3Storage.region is the region to use for connecting to the S3 bucket. The default is us-east-1.

S3Storage.bucket_name is the bucket name to use for connecting to the S3 bucket.

S3Storage.internal_secure Boolean to indicate if connecting via http (False) or https (True) internally. The internal connection is the url that will be exclusively used by conda-store and not shared with users.

S3Storage.external_secure Boolean to indicate if connecting via http (False) or https (True) internally. The external connection is the url that will be served to users of conda-store.

S3Storage.credentials provider to use to get credentials for s3 access. see examples https://github.com/minio/minio-py/tree/master/examples and documentation https://github.com/minio/minio-py/blob/master/docs/API.md#1-constructor. An example of this could be to use minio.credentials.IamAwsProvider to get S3 credentials via IAM.

S3Storage.credentials_args arguments to pass for creation of credentials class.

S3Storage.credentials_kwargs keyword arguments to pass for creation of credentials class.

conda_store_server.storage.LocalStorage

LocalStorage.storage_path is the base directory to use for storing build artifacts.

LocalStorage.storage_url is the base url for serving of build artifacts. This url assumes that the base will be a static server serving LocalStorage.storage_path.

conda_store_server.server.auth.AuthenticationBackend

AuthenticationBackend.secret is the symmetric secret to use for encrypting tokens.

AuthenticationBackend.jwt_algorithm is the algorithm for encrypting the JSON Web Tokens.

AuthenticationBackend.predefined_tokens is a set of tokens with predefined permission. This is useful for setting up service accounts in a similar manner to how things are done with jupyterhub. Format for the values is a dictionary with keys being the tokens and values being the schema.AuthenticaitonToken all fields are optional.

conda_store_server.server.auth.AuthorizationBackend

AuthorizationBackend.role_mappings is a dictionary that maps roles to application permissions. There are three default roles at the moment viewer, editor, and admin. Additionally, the role developer is supported, which is a legacy alias of editor. The name editor is preferred.

AuthorizationBackend.unauthenticated_role_bindings are the role bindings that an unauthenticated user assumes.

AuthorizationBackend.authenticated_role_bindings are the base role bindings that an authenticated user assumes.

conda_store_server.server.auth.Authentication

Authentication.cookie_name is the name for the browser cookie used to authenticate users.

Authentication.cookie_domain use when wanting to set a subdomain wide cookie. For example setting this to example.com would allow the cookie to be valid for example.com along with *.example.com.

Authentication.authentication_backend is the class to use for authentication logic. The default is AuthenticationBackend and will likely not need to change.

Authentication.authorization_backend is the class to use for authentication logic. The default is AuthorizationBackend and will likely not need to change.

Authentication.login_html is the HTML to display for a given user as the login form.

conda_store_server.server.auth.DummyAuthentication

Has all the configuration settings of Authetication. This class is modeled after the JupyterHub DummyAuthentication class.

DummyAuthentication.password sets a global password for all users to login with. Effectively a static password. This rarely if ever should be used outside of testing.

conda_store_server.server.auth.GenericOAuthAuthentication

A provider-agnostic OAuth authentication provider. Configure endpoints, secrets and other parameters to enable any OAuth-compatible platform. This class is modeled after the OAuthenticator OAuth2 classes. All configuration settings of Authentication are available.

GenericOAuthAuthentication.access_token_url is the URL used to request an access token once app has been authorized.

GenericOAuthAuthentication.authorizie_url is the URL used to request authorization to OAuth provider.

GenericOAuthAuthentication.client_id is the unique string that identifies the app against the OAuth provider.

GenericOAuthAuthentication.client_secret is the secret string used to authenticate the app against the OAuth provider.

GenericOauthAuthentication.access_scope is the permissions that will be requested to OAuth2 provider. This is space separated list of scopes. Generally only one scope is requested.

GenericOauthAuthentication.user_data_url is the API endpoint for OAuth provider that returns a JSON dict with user data after the user has successfully authenticated.

GenericOauthAuthentication.user_data_key is the key in the payload returned by user_data_url endpoint that provides the username.

GenericOAuthAuthentication.oauth_callback_url custom callback url especially useful when web service is behind a proxy.

GenericOAuthAuthentication.tls_verify to optionally turn of TLS verification useful for custom signed certificates.

conda_store_server.server.auth.GithubOAuthAuthentication

Inherits from Authentication and GenericOAuthAuthentication so should be fully configurable from those options.

GithubOAuthAuthentication.github_url is the url for GitHub. Default is https://github.com.

GithubOAuthAuthentication.github_api is the REST API url for GitHub. Default is https://api.github.com.

conda_store_server.server.auth.JupyterHubOAuthAuthentication

Inherits from Authentication and GenericOAuthAuthentication so should be fully configurable from those options.

GithubOAuthAuthentication.jupyterhub_url is the url for connecting to JupyterHub. The URL should not include the /hub/.

conda_store_server.server.auth.RBACAuthorizationBackend

RBACAuthorizationBackend.role_mappings_version specifies the role mappings version to use: 1 (default, legacy), 2 (new, recommended).

This option can be set via the config as follows:

c.RBACAuthorizationBackend.role_mappings_version = <version>

When an invalid version is specified, an error message will be printed to the terminal when attempting to log in:

c.RBACAuthorizationBackend.role_mappings_version: invalid role mappings version: <version>, expected: (1, 2)

The role mappings version determines which database table is used when a call to RBACAuthorizationBackend.authorize is made in one of the HTTP route handlers.

For authorization to work properly, clients must use a set of HTTP APIs matching the selected role mappings version.

Role mappings version 2 is the recommended version to use. It relies on the following HTTP APIs to update namespace metadata and set the roles:

PUT    /api/v1/namespace/{namespace}/metadata
GET /api/v1/namespace/{namespace}/roles
DELETE /api/v1/namespace/{namespace}/roles
GET /api/v1/namespace/{namespace}/role
POST /api/v1/namespace/{namespace}/role
PUT /api/v1/namespace/{namespace}/role
DELETE /api/v1/namespace/{namespace}/role

Role mappings version 1 is a legacy version that exists for compatibility reasons and is not recommended. It uses this API endpoint to update namespace metadata and set the roles:

PUT /api/v1/namespace/{namespace}/

conda_store_server._internal.server.app.CondaStoreServer

CondaStoreServer.log_level is the level for all server logging. Default is INFO. Common options are DEBUG, INFO, WARNING, and ERROR.

CondaStoreServer.enable_ui a Boolean on whether to expose the UI endpoints. Default True.

CondaStoreServer.enable_api a Boolean on whether to expose the API endpoints. Default True.

CondaStoreServer.enable_registry a Boolean on whether to expose the registry endpoints. Default True.

CondaStoreServer.enable_metrics a Boolean on whether to expose the metrics endpoints. Default True.

CondaStoreServer.address is the address for the server to bind to. The default is all IP addresses 0.0.0.0.

CondaStoreServer.port is the port for conda-store server to use. Default is 8080.

CondaStoreServer.registry_external_url is the external hostname and port to access docker registry cannot contain http:// or https://.

CondaStoreServer.url_prefix is the prefix URL (subdirectory) for the entire application. All but the registry routes obey this. This is due to the docker registry API specification not supporting url prefixes.

CondaStoreServer.authentication_class is the authentication class for the web server to use. Default is DummyAuthentication.

CondaStoreServer.secret_key is a secret key needed for some authentication methods, session storage, etc. TODO: remove at some point since also used in AuthenticationBackend.

CondaStoreServer.max_page_size is maximum number of items to return in a single UI page or API response.

CondaStoreServer.behind_proxy indicates if server is behind web reverse proxy such as Nginx, Traefik, Apache. Will use X-Forward-... headers to determine scheme. Do not set to true if not behind proxy since Flask will trust any X-Forward-... header.

CondaStoreServer.template initialized fastapi.templating.Jinja2Templates to use for html templates.

CondaStoreServer.template_vars extra variables to be passed into jinja templates for page rendering.

CondaStoreServer.additional_routes additional routes for conda-store to serve in form [(path, method, function), ...]. path is a string, method is get, post, put, delete etc. and function is a regular python fastapi function.

conda_store_server.._internal.worker.app.CondaStoreWorker

CondaStoreWorker.log_level is the level for all server logging. Default is INFO. Common options are DEBUG, INFO, WARNING, and ERROR.

CondaStoreWorker.watch_paths is a list of paths for conda-store to watch for changes to directories of environment.yaml files or a single filename to watch.

CondaStoreWorker.concurrency by default is not set and defaults to the number of threads on your given machine. If set will limit the number of concurrent celery tasks to the integer.

conda_store_server.registry.ContainerRegistry

ContainerRegistry.container_registries dictionary of registries_url to upload built container images with callable function to configure registry instance with credentials. Example configuration shown bellow. Some registries are more complex to setup such as ECR, GCR, etc. password is often the token generated from the AWS, GCP, Azure, and Digital Ocean clients.

from python_docker.registry import Registry
import os

def _configure_docker_registry(registry_url: str):
return Registry(
"https://registry-1.docker.io",
username=os.environ.get('DOCKER_USERNAME'),
password=os.environ.get('DOCKER_PASSWORD'))

c.ContainerRegistry.container_registries = {
'https://registry-1.docker.io': _configure_docker_registry
}

ContainerRegistry.container_registry_image_name image name to assign to docker image pushed for particular registry via a callable function with arguments of registry and build.

ContainerRegistry.container_registry_image_tag image tag to assign to docker image pushed for particular registry via a callable function with arguments of registry and build.