App Specification#
Overview#
The bfabric-app-runner allows you to define and execute applications in various environments, by configuring the application steps in a YAML configuration files, the so-called app specification.
App Specification Structure#
The specification can be provided in a YAML file with the following structure:
versions:
- version: "1.0.0"
commands:
dispatch: ...
process: ...
collect: ... # Optional
Commands#
Each app defines these core commands:
dispatch
: Prepares input data. Called with:$workunit_ref
$work_dir
process
: Executes main logic. Called with:$chunk_dir
collect
: (Optional) Organizes results. Called with:$workunit_ref
$chunk_dir
Commands are discriminated by their type
field.
- pydantic model bfabric_app_runner.specs.app.commands_spec.CommandsSpec#
Defines the commands that are required to execute an app.
Show JSON schema
{ "title": "CommandsSpec", "description": "Defines the commands that are required to execute an app.", "type": "object", "properties": { "dispatch": { "discriminator": { "mapping": { "docker": "#/$defs/CommandDocker", "shell": "#/$defs/CommandShell" }, "propertyName": "type" }, "oneOf": [ { "$ref": "#/$defs/CommandShell" }, { "$ref": "#/$defs/CommandDocker" } ], "title": "Dispatch" }, "process": { "discriminator": { "mapping": { "docker": "#/$defs/CommandDocker", "shell": "#/$defs/CommandShell" }, "propertyName": "type" }, "oneOf": [ { "$ref": "#/$defs/CommandShell" }, { "$ref": "#/$defs/CommandDocker" } ], "title": "Process" }, "collect": { "anyOf": [ { "discriminator": { "mapping": { "docker": "#/$defs/CommandDocker", "shell": "#/$defs/CommandShell" }, "propertyName": "type" }, "oneOf": [ { "$ref": "#/$defs/CommandShell" }, { "$ref": "#/$defs/CommandDocker" } ] }, { "type": "null" } ], "default": null, "title": "Collect" } }, "$defs": { "CommandDocker": { "additionalProperties": false, "properties": { "type": { "const": "docker", "default": "docker", "title": "Type", "type": "string" }, "image": { "title": "Image", "type": "string" }, "command": { "title": "Command", "type": "string" }, "entrypoint": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Entrypoint" }, "engine": { "default": "docker", "enum": [ "docker", "podman" ], "title": "Engine", "type": "string" }, "env": { "additionalProperties": { "type": "string" }, "default": {}, "title": "Env", "type": "object" }, "mac_address": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Mac Address" }, "mounts": { "$ref": "#/$defs/MountOptions", "default": { "work_dir_target": null, "read_only": [], "writeable": [], "share_bfabric_config": true } }, "hostname": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Hostname" }, "custom_args": { "default": [], "items": { "type": "string" }, "title": "Custom Args", "type": "array" } }, "required": [ "image", "command" ], "title": "CommandDocker", "type": "object" }, "CommandShell": { "additionalProperties": false, "properties": { "type": { "const": "shell", "default": "shell", "title": "Type", "type": "string" }, "command": { "title": "Command", "type": "string" } }, "required": [ "command" ], "title": "CommandShell", "type": "object" }, "MountOptions": { "additionalProperties": false, "properties": { "work_dir_target": { "anyOf": [ { "format": "path", "type": "string" }, { "type": "null" } ], "default": null, "title": "Work Dir Target" }, "read_only": { "default": [], "items": { "maxItems": 2, "minItems": 2, "prefixItems": [ { "format": "path", "type": "string" }, { "format": "path", "type": "string" } ], "type": "array" }, "title": "Read Only", "type": "array" }, "writeable": { "default": [], "items": { "maxItems": 2, "minItems": 2, "prefixItems": [ { "format": "path", "type": "string" }, { "format": "path", "type": "string" } ], "type": "array" }, "title": "Writeable", "type": "array" }, "share_bfabric_config": { "default": true, "title": "Share Bfabric Config", "type": "boolean" } }, "title": "MountOptions", "type": "object" } }, "additionalProperties": false, "required": [ "dispatch", "process" ] }
- Config:
extra: str = forbid
populate_by_name: bool = True
validate_by_alias: bool = True
validate_by_name: bool = True
- Fields:
- field collect: Annotated[CommandShell | CommandDocker, Discriminator(discriminator=type, custom_error_type=None, custom_error_message=None, custom_error_context=None)] | None = None#
The app collect command, can be omitted if your process command already creates an outputs.yml file.
It will be called with arguments: $workunit_ref $chunk_dir.
- field dispatch: Annotated[CommandShell | CommandDocker, Discriminator(discriminator=type, custom_error_type=None, custom_error_message=None, custom_error_context=None)] [Required]#
The app dispatch command.
It will be called with arguments: $workunit_ref $work_dir.
- Constraints:
discriminator = type
- field process: Annotated[CommandShell | CommandDocker, Discriminator(discriminator=type, custom_error_type=None, custom_error_message=None, custom_error_context=None)] [Required]#
The app process command.
It will be called with arguments: $chunk_dir.
- Constraints:
discriminator = type
Shell Commands#
commands:
dispatch:
type: "shell"
command: "python prepare_data.py"
The command string is split by spaces using shlex.split()
.
- pydantic model bfabric_app_runner.specs.app.commands_spec.CommandShell#
Show JSON schema
{ "title": "CommandShell", "type": "object", "properties": { "type": { "const": "shell", "default": "shell", "title": "Type", "type": "string" }, "command": { "title": "Command", "type": "string" } }, "additionalProperties": false, "required": [ "command" ] }
- Config:
extra: str = forbid
- Fields:
- field command: str [Required]#
The command to run, will be split by spaces and is not an actual shell script.
- field type: Literal['shell'] = 'shell'#
Identifies the command type.
- to_shell() list[str] #
Returns a shell command that can be used to run the specified command.
Docker Commands#
commands:
process:
type: "docker"
image: "myapp:1.0.0"
command: "/app/run.sh"
env:
APP_VERSION: "${app.version}"
mounts:
read_only:
- ["/data/reference", "/app/reference"]
writeable:
- ["/data/results", "/app/results"]
- pydantic model bfabric_app_runner.specs.app.commands_spec.CommandDocker#
Show JSON schema
{ "title": "CommandDocker", "type": "object", "properties": { "type": { "const": "docker", "default": "docker", "title": "Type", "type": "string" }, "image": { "title": "Image", "type": "string" }, "command": { "title": "Command", "type": "string" }, "entrypoint": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Entrypoint" }, "engine": { "default": "docker", "enum": [ "docker", "podman" ], "title": "Engine", "type": "string" }, "env": { "additionalProperties": { "type": "string" }, "default": {}, "title": "Env", "type": "object" }, "mac_address": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Mac Address" }, "mounts": { "$ref": "#/$defs/MountOptions", "default": { "work_dir_target": null, "read_only": [], "writeable": [], "share_bfabric_config": true } }, "hostname": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Hostname" }, "custom_args": { "default": [], "items": { "type": "string" }, "title": "Custom Args", "type": "array" } }, "$defs": { "MountOptions": { "additionalProperties": false, "properties": { "work_dir_target": { "anyOf": [ { "format": "path", "type": "string" }, { "type": "null" } ], "default": null, "title": "Work Dir Target" }, "read_only": { "default": [], "items": { "maxItems": 2, "minItems": 2, "prefixItems": [ { "format": "path", "type": "string" }, { "format": "path", "type": "string" } ], "type": "array" }, "title": "Read Only", "type": "array" }, "writeable": { "default": [], "items": { "maxItems": 2, "minItems": 2, "prefixItems": [ { "format": "path", "type": "string" }, { "format": "path", "type": "string" } ], "type": "array" }, "title": "Writeable", "type": "array" }, "share_bfabric_config": { "default": true, "title": "Share Bfabric Config", "type": "boolean" } }, "title": "MountOptions", "type": "object" } }, "additionalProperties": false, "required": [ "image", "command" ] }
- Config:
extra: str = forbid
- Fields:
- field command: str [Required]#
The command to execute in the container.
- field custom_args: list[str] = []#
Any custom CLI arguments to pass to the container engine.
- field engine: Literal['docker', 'podman'] = 'docker'#
The container engine to use.
- field entrypoint: str | None = None#
The entrypoint to use for the container (instead of the image’s default).
- field env: dict[str, str] = {}#
Environment variables to set in the container.
- field hostname: str | None = None#
The hostname to use for the container (instead of Docker’s default assignment).
- field image: str [Required]#
The container image to run.
- field mac_address: str | None = None#
The MAC address to use for the container (instead of Docker’s default assignment).
- field mounts: MountOptions = MountOptions(work_dir_target=None, read_only=[], writeable=[], share_bfabric_config=True)#
Mount options for the container.
- field type: Literal['docker'] = 'docker'#
Identifies the command type.
- to_shell(work_dir: Path | None = None) list[str] #
Returns a shell command that can be used to run the specified command.
- pydantic model bfabric_app_runner.specs.app.commands_spec.MountOptions#
Show JSON schema
{ "title": "MountOptions", "type": "object", "properties": { "work_dir_target": { "anyOf": [ { "format": "path", "type": "string" }, { "type": "null" } ], "default": null, "title": "Work Dir Target" }, "read_only": { "default": [], "items": { "maxItems": 2, "minItems": 2, "prefixItems": [ { "format": "path", "type": "string" }, { "format": "path", "type": "string" } ], "type": "array" }, "title": "Read Only", "type": "array" }, "writeable": { "default": [], "items": { "maxItems": 2, "minItems": 2, "prefixItems": [ { "format": "path", "type": "string" }, { "format": "path", "type": "string" } ], "type": "array" }, "title": "Writeable", "type": "array" }, "share_bfabric_config": { "default": true, "title": "Share Bfabric Config", "type": "boolean" } }, "additionalProperties": false }
- Config:
extra: str = forbid
- Fields:
- field read_only: list[tuple[Path, Path]] = []#
- field work_dir_target: Path | None = None#
- field writeable: list[tuple[Path, Path]] = []#
- collect(work_dir: Path) list[tuple[Path, Path, bool]] #
Collects all mounts that are required to run the command.
These are returned as triplets of (source, target, read_only).
App Versions#
The AppVersionMultiTemplate
class defines app versions in two ways:
Single string:
version: "1.0.0"
List of strings:
version: ["1.0.0", "1.0.1"]
Variables and Templating#
Available variables for Mako templates:
${app.id}
: Application ID (integer)${app.name}
: Application name (alphanumeric, underscores, hyphens)${app.version}
: Version string
Example:
image: "registry.example.com/${app.name}:${app.version}"
command: "/app/run.sh --app-id ${app.id}"
The interpolate_config_strings
function processes all string values in the configuration after YAML loading.
Loading and Using App Specifications#
from pathlib import Path
from bfabric_app_runner.specs.app.app_spec import AppSpec
# Load from YAML
app_spec = AppSpec.load_yaml(Path("./app_spec.yaml"), app_id="123", app_name="MyApp")
# Check version
if "1.0.0" in app_spec:
app_version = app_spec["1.0.0"]
Reference#
- pydantic model bfabric_app_runner.specs.app.app_spec.AppSpec#
Bases:
BaseModel
Parsed app versions from the app spec file.
Show JSON schema
{ "title": "AppSpec", "description": "Parsed app versions from the app spec file.", "type": "object", "properties": { "bfabric": { "$ref": "#/$defs/BfabricAppSpec" }, "versions": { "items": { "$ref": "#/$defs/AppVersion" }, "title": "Versions", "type": "array" } }, "$defs": { "AppVersion": { "description": "A concrete app version specification.\n\nFor a better separation of concerns, the submitter will not be resolved automatically.", "properties": { "version": { "title": "Version", "type": "string" }, "commands": { "$ref": "#/$defs/CommandsSpec" }, "submitter": { "$ref": "#/$defs/SubmitterRef" }, "reuse_default_resource": { "default": true, "title": "Reuse Default Resource", "type": "boolean" } }, "required": [ "version", "commands", "submitter" ], "title": "AppVersion", "type": "object" }, "BfabricAppSpec": { "description": "Contains the app specification information that is relevant to bfabric, and not exactly the app itself.", "properties": { "app_runner": { "title": "App Runner", "type": "string" } }, "required": [ "app_runner" ], "title": "BfabricAppSpec", "type": "object" }, "CommandDocker": { "additionalProperties": false, "properties": { "type": { "const": "docker", "default": "docker", "title": "Type", "type": "string" }, "image": { "title": "Image", "type": "string" }, "command": { "title": "Command", "type": "string" }, "entrypoint": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Entrypoint" }, "engine": { "default": "docker", "enum": [ "docker", "podman" ], "title": "Engine", "type": "string" }, "env": { "additionalProperties": { "type": "string" }, "default": {}, "title": "Env", "type": "object" }, "mac_address": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Mac Address" }, "mounts": { "$ref": "#/$defs/MountOptions", "default": { "work_dir_target": null, "read_only": [], "writeable": [], "share_bfabric_config": true } }, "hostname": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Hostname" }, "custom_args": { "default": [], "items": { "type": "string" }, "title": "Custom Args", "type": "array" } }, "required": [ "image", "command" ], "title": "CommandDocker", "type": "object" }, "CommandShell": { "additionalProperties": false, "properties": { "type": { "const": "shell", "default": "shell", "title": "Type", "type": "string" }, "command": { "title": "Command", "type": "string" } }, "required": [ "command" ], "title": "CommandShell", "type": "object" }, "CommandsSpec": { "additionalProperties": false, "description": "Defines the commands that are required to execute an app.", "properties": { "dispatch": { "discriminator": { "mapping": { "docker": "#/$defs/CommandDocker", "shell": "#/$defs/CommandShell" }, "propertyName": "type" }, "oneOf": [ { "$ref": "#/$defs/CommandShell" }, { "$ref": "#/$defs/CommandDocker" } ], "title": "Dispatch" }, "process": { "discriminator": { "mapping": { "docker": "#/$defs/CommandDocker", "shell": "#/$defs/CommandShell" }, "propertyName": "type" }, "oneOf": [ { "$ref": "#/$defs/CommandShell" }, { "$ref": "#/$defs/CommandDocker" } ], "title": "Process" }, "collect": { "anyOf": [ { "discriminator": { "mapping": { "docker": "#/$defs/CommandDocker", "shell": "#/$defs/CommandShell" }, "propertyName": "type" }, "oneOf": [ { "$ref": "#/$defs/CommandShell" }, { "$ref": "#/$defs/CommandDocker" } ] }, { "type": "null" } ], "default": null, "title": "Collect" } }, "required": [ "dispatch", "process" ], "title": "CommandsSpec", "type": "object" }, "MountOptions": { "additionalProperties": false, "properties": { "work_dir_target": { "anyOf": [ { "format": "path", "type": "string" }, { "type": "null" } ], "default": null, "title": "Work Dir Target" }, "read_only": { "default": [], "items": { "maxItems": 2, "minItems": 2, "prefixItems": [ { "format": "path", "type": "string" }, { "format": "path", "type": "string" } ], "type": "array" }, "title": "Read Only", "type": "array" }, "writeable": { "default": [], "items": { "maxItems": 2, "minItems": 2, "prefixItems": [ { "format": "path", "type": "string" }, { "format": "path", "type": "string" } ], "type": "array" }, "title": "Writeable", "type": "array" }, "share_bfabric_config": { "default": true, "title": "Share Bfabric Config", "type": "boolean" } }, "title": "MountOptions", "type": "object" }, "SubmitterRef": { "description": "Reference of a submitter and potential configuration overrides.", "properties": { "name": { "title": "Name", "type": "string" }, "params": { "default": {}, "patternProperties": { "^--.*": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "title": "Params", "type": "object" } }, "required": [ "name" ], "title": "SubmitterRef", "type": "object" } }, "required": [ "bfabric", "versions" ] }
- Fields:
- field bfabric: BfabricAppSpec [Required]#
- field versions: list[AppVersion] [Required]#
- classmethod load_yaml(app_yaml: Path, app_id: int | str, app_name: str) AppSpec #
Loads the app versions from the provided YAML file and evaluates the templates.
- property available_versions: set[str]#
The available versions of the app.
- pydantic model bfabric_app_runner.specs.app.app_spec.AppSpecTemplate#
Bases:
BaseModel
This model defines the app_spec definition in a file.
As the name suggests, this is a template that can be expanded to a concrete
AppSpec
instance. The main difference is that this may contain usages of Variables. TODOShow JSON schema
{ "title": "AppSpecTemplate", "description": "This model defines the app_spec definition in a file.\n\nAs the name suggests, this is a template that can be expanded to a concrete ``AppSpec`` instance.\nThe main difference is that this may contain usages of `Variables`. TODO", "type": "object", "properties": { "bfabric": { "$ref": "#/$defs/BfabricAppSpec" }, "versions": { "items": { "$ref": "#/$defs/AppVersionMultiTemplate" }, "title": "Versions", "type": "array" } }, "$defs": { "AppVersionMultiTemplate": { "properties": { "version": { "items": { "type": "string" }, "title": "Version", "type": "array" }, "commands": { "$ref": "#/$defs/CommandsSpec" }, "submitter": { "$ref": "#/$defs/SubmitterRef" }, "reuse_default_resource": { "default": true, "title": "Reuse Default Resource", "type": "boolean" } }, "required": [ "version", "commands", "submitter" ], "title": "AppVersionMultiTemplate", "type": "object" }, "BfabricAppSpec": { "description": "Contains the app specification information that is relevant to bfabric, and not exactly the app itself.", "properties": { "app_runner": { "title": "App Runner", "type": "string" } }, "required": [ "app_runner" ], "title": "BfabricAppSpec", "type": "object" }, "CommandDocker": { "additionalProperties": false, "properties": { "type": { "const": "docker", "default": "docker", "title": "Type", "type": "string" }, "image": { "title": "Image", "type": "string" }, "command": { "title": "Command", "type": "string" }, "entrypoint": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Entrypoint" }, "engine": { "default": "docker", "enum": [ "docker", "podman" ], "title": "Engine", "type": "string" }, "env": { "additionalProperties": { "type": "string" }, "default": {}, "title": "Env", "type": "object" }, "mac_address": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Mac Address" }, "mounts": { "$ref": "#/$defs/MountOptions", "default": { "work_dir_target": null, "read_only": [], "writeable": [], "share_bfabric_config": true } }, "hostname": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Hostname" }, "custom_args": { "default": [], "items": { "type": "string" }, "title": "Custom Args", "type": "array" } }, "required": [ "image", "command" ], "title": "CommandDocker", "type": "object" }, "CommandShell": { "additionalProperties": false, "properties": { "type": { "const": "shell", "default": "shell", "title": "Type", "type": "string" }, "command": { "title": "Command", "type": "string" } }, "required": [ "command" ], "title": "CommandShell", "type": "object" }, "CommandsSpec": { "additionalProperties": false, "description": "Defines the commands that are required to execute an app.", "properties": { "dispatch": { "discriminator": { "mapping": { "docker": "#/$defs/CommandDocker", "shell": "#/$defs/CommandShell" }, "propertyName": "type" }, "oneOf": [ { "$ref": "#/$defs/CommandShell" }, { "$ref": "#/$defs/CommandDocker" } ], "title": "Dispatch" }, "process": { "discriminator": { "mapping": { "docker": "#/$defs/CommandDocker", "shell": "#/$defs/CommandShell" }, "propertyName": "type" }, "oneOf": [ { "$ref": "#/$defs/CommandShell" }, { "$ref": "#/$defs/CommandDocker" } ], "title": "Process" }, "collect": { "anyOf": [ { "discriminator": { "mapping": { "docker": "#/$defs/CommandDocker", "shell": "#/$defs/CommandShell" }, "propertyName": "type" }, "oneOf": [ { "$ref": "#/$defs/CommandShell" }, { "$ref": "#/$defs/CommandDocker" } ] }, { "type": "null" } ], "default": null, "title": "Collect" } }, "required": [ "dispatch", "process" ], "title": "CommandsSpec", "type": "object" }, "MountOptions": { "additionalProperties": false, "properties": { "work_dir_target": { "anyOf": [ { "format": "path", "type": "string" }, { "type": "null" } ], "default": null, "title": "Work Dir Target" }, "read_only": { "default": [], "items": { "maxItems": 2, "minItems": 2, "prefixItems": [ { "format": "path", "type": "string" }, { "format": "path", "type": "string" } ], "type": "array" }, "title": "Read Only", "type": "array" }, "writeable": { "default": [], "items": { "maxItems": 2, "minItems": 2, "prefixItems": [ { "format": "path", "type": "string" }, { "format": "path", "type": "string" } ], "type": "array" }, "title": "Writeable", "type": "array" }, "share_bfabric_config": { "default": true, "title": "Share Bfabric Config", "type": "boolean" } }, "title": "MountOptions", "type": "object" }, "SubmitterRef": { "description": "Reference of a submitter and potential configuration overrides.", "properties": { "name": { "title": "Name", "type": "string" }, "params": { "default": {}, "patternProperties": { "^--.*": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "title": "Params", "type": "object" } }, "required": [ "name" ], "title": "SubmitterRef", "type": "object" } }, "required": [ "bfabric", "versions" ] }
- Fields:
- field bfabric: BfabricAppSpec [Required]#
- field versions: list[AppVersionMultiTemplate] [Required]#
- pydantic model bfabric_app_runner.specs.app.app_spec.BfabricAppSpec#
Bases:
BaseModel
Contains the app specification information that is relevant to bfabric, and not exactly the app itself.
Show JSON schema
{ "title": "BfabricAppSpec", "description": "Contains the app specification information that is relevant to bfabric, and not exactly the app itself.", "type": "object", "properties": { "app_runner": { "title": "App Runner", "type": "string" } }, "required": [ "app_runner" ] }
- Fields:
- field app_runner: str [Required]#
Specifies the app runner version to use for the app.
We support both a PyPI version (e.g. 0.0.17) as well as a git reference, which is a string in the format git+https://github.com/fgcz/bfabricPy@main#subdirectory=bfabric_app_runner where you can specify any git reference instead of main as needed.
- pydantic model bfabric_app_runner.specs.app.app_version.AppVersion#
Bases:
BaseModel
A concrete app version specification.
For a better separation of concerns, the submitter will not be resolved automatically.
Show JSON schema
{ "title": "AppVersion", "description": "A concrete app version specification.\n\nFor a better separation of concerns, the submitter will not be resolved automatically.", "type": "object", "properties": { "version": { "title": "Version", "type": "string" }, "commands": { "$ref": "#/$defs/CommandsSpec" }, "submitter": { "$ref": "#/$defs/SubmitterRef" }, "reuse_default_resource": { "default": true, "title": "Reuse Default Resource", "type": "boolean" } }, "$defs": { "CommandDocker": { "additionalProperties": false, "properties": { "type": { "const": "docker", "default": "docker", "title": "Type", "type": "string" }, "image": { "title": "Image", "type": "string" }, "command": { "title": "Command", "type": "string" }, "entrypoint": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Entrypoint" }, "engine": { "default": "docker", "enum": [ "docker", "podman" ], "title": "Engine", "type": "string" }, "env": { "additionalProperties": { "type": "string" }, "default": {}, "title": "Env", "type": "object" }, "mac_address": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Mac Address" }, "mounts": { "$ref": "#/$defs/MountOptions", "default": { "work_dir_target": null, "read_only": [], "writeable": [], "share_bfabric_config": true } }, "hostname": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Hostname" }, "custom_args": { "default": [], "items": { "type": "string" }, "title": "Custom Args", "type": "array" } }, "required": [ "image", "command" ], "title": "CommandDocker", "type": "object" }, "CommandShell": { "additionalProperties": false, "properties": { "type": { "const": "shell", "default": "shell", "title": "Type", "type": "string" }, "command": { "title": "Command", "type": "string" } }, "required": [ "command" ], "title": "CommandShell", "type": "object" }, "CommandsSpec": { "additionalProperties": false, "description": "Defines the commands that are required to execute an app.", "properties": { "dispatch": { "discriminator": { "mapping": { "docker": "#/$defs/CommandDocker", "shell": "#/$defs/CommandShell" }, "propertyName": "type" }, "oneOf": [ { "$ref": "#/$defs/CommandShell" }, { "$ref": "#/$defs/CommandDocker" } ], "title": "Dispatch" }, "process": { "discriminator": { "mapping": { "docker": "#/$defs/CommandDocker", "shell": "#/$defs/CommandShell" }, "propertyName": "type" }, "oneOf": [ { "$ref": "#/$defs/CommandShell" }, { "$ref": "#/$defs/CommandDocker" } ], "title": "Process" }, "collect": { "anyOf": [ { "discriminator": { "mapping": { "docker": "#/$defs/CommandDocker", "shell": "#/$defs/CommandShell" }, "propertyName": "type" }, "oneOf": [ { "$ref": "#/$defs/CommandShell" }, { "$ref": "#/$defs/CommandDocker" } ] }, { "type": "null" } ], "default": null, "title": "Collect" } }, "required": [ "dispatch", "process" ], "title": "CommandsSpec", "type": "object" }, "MountOptions": { "additionalProperties": false, "properties": { "work_dir_target": { "anyOf": [ { "format": "path", "type": "string" }, { "type": "null" } ], "default": null, "title": "Work Dir Target" }, "read_only": { "default": [], "items": { "maxItems": 2, "minItems": 2, "prefixItems": [ { "format": "path", "type": "string" }, { "format": "path", "type": "string" } ], "type": "array" }, "title": "Read Only", "type": "array" }, "writeable": { "default": [], "items": { "maxItems": 2, "minItems": 2, "prefixItems": [ { "format": "path", "type": "string" }, { "format": "path", "type": "string" } ], "type": "array" }, "title": "Writeable", "type": "array" }, "share_bfabric_config": { "default": true, "title": "Share Bfabric Config", "type": "boolean" } }, "title": "MountOptions", "type": "object" }, "SubmitterRef": { "description": "Reference of a submitter and potential configuration overrides.", "properties": { "name": { "title": "Name", "type": "string" }, "params": { "default": {}, "patternProperties": { "^--.*": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "title": "Params", "type": "object" } }, "required": [ "name" ], "title": "SubmitterRef", "type": "object" } }, "required": [ "version", "commands", "submitter" ] }
- Fields:
- field commands: CommandsSpec [Required]#
- field reuse_default_resource: bool = True#
- field submitter: SubmitterRef [Required]#
- field version: str [Required]#
- pydantic model bfabric_app_runner.specs.app.app_version.AppVersionMultiTemplate#
Bases:
BaseModel
Show JSON schema
{ "title": "AppVersionMultiTemplate", "type": "object", "properties": { "version": { "items": { "type": "string" }, "title": "Version", "type": "array" }, "commands": { "$ref": "#/$defs/CommandsSpec" }, "submitter": { "$ref": "#/$defs/SubmitterRef" }, "reuse_default_resource": { "default": true, "title": "Reuse Default Resource", "type": "boolean" } }, "$defs": { "CommandDocker": { "additionalProperties": false, "properties": { "type": { "const": "docker", "default": "docker", "title": "Type", "type": "string" }, "image": { "title": "Image", "type": "string" }, "command": { "title": "Command", "type": "string" }, "entrypoint": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Entrypoint" }, "engine": { "default": "docker", "enum": [ "docker", "podman" ], "title": "Engine", "type": "string" }, "env": { "additionalProperties": { "type": "string" }, "default": {}, "title": "Env", "type": "object" }, "mac_address": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Mac Address" }, "mounts": { "$ref": "#/$defs/MountOptions", "default": { "work_dir_target": null, "read_only": [], "writeable": [], "share_bfabric_config": true } }, "hostname": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Hostname" }, "custom_args": { "default": [], "items": { "type": "string" }, "title": "Custom Args", "type": "array" } }, "required": [ "image", "command" ], "title": "CommandDocker", "type": "object" }, "CommandShell": { "additionalProperties": false, "properties": { "type": { "const": "shell", "default": "shell", "title": "Type", "type": "string" }, "command": { "title": "Command", "type": "string" } }, "required": [ "command" ], "title": "CommandShell", "type": "object" }, "CommandsSpec": { "additionalProperties": false, "description": "Defines the commands that are required to execute an app.", "properties": { "dispatch": { "discriminator": { "mapping": { "docker": "#/$defs/CommandDocker", "shell": "#/$defs/CommandShell" }, "propertyName": "type" }, "oneOf": [ { "$ref": "#/$defs/CommandShell" }, { "$ref": "#/$defs/CommandDocker" } ], "title": "Dispatch" }, "process": { "discriminator": { "mapping": { "docker": "#/$defs/CommandDocker", "shell": "#/$defs/CommandShell" }, "propertyName": "type" }, "oneOf": [ { "$ref": "#/$defs/CommandShell" }, { "$ref": "#/$defs/CommandDocker" } ], "title": "Process" }, "collect": { "anyOf": [ { "discriminator": { "mapping": { "docker": "#/$defs/CommandDocker", "shell": "#/$defs/CommandShell" }, "propertyName": "type" }, "oneOf": [ { "$ref": "#/$defs/CommandShell" }, { "$ref": "#/$defs/CommandDocker" } ] }, { "type": "null" } ], "default": null, "title": "Collect" } }, "required": [ "dispatch", "process" ], "title": "CommandsSpec", "type": "object" }, "MountOptions": { "additionalProperties": false, "properties": { "work_dir_target": { "anyOf": [ { "format": "path", "type": "string" }, { "type": "null" } ], "default": null, "title": "Work Dir Target" }, "read_only": { "default": [], "items": { "maxItems": 2, "minItems": 2, "prefixItems": [ { "format": "path", "type": "string" }, { "format": "path", "type": "string" } ], "type": "array" }, "title": "Read Only", "type": "array" }, "writeable": { "default": [], "items": { "maxItems": 2, "minItems": 2, "prefixItems": [ { "format": "path", "type": "string" }, { "format": "path", "type": "string" } ], "type": "array" }, "title": "Writeable", "type": "array" }, "share_bfabric_config": { "default": true, "title": "Share Bfabric Config", "type": "boolean" } }, "title": "MountOptions", "type": "object" }, "SubmitterRef": { "description": "Reference of a submitter and potential configuration overrides.", "properties": { "name": { "title": "Name", "type": "string" }, "params": { "default": {}, "patternProperties": { "^--.*": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "title": "Params", "type": "object" } }, "required": [ "name" ], "title": "SubmitterRef", "type": "object" } }, "required": [ "version", "commands", "submitter" ] }
- Fields:
- Validators:
_version_ensure_list
»version
- field commands: CommandsSpec [Required]#
- field reuse_default_resource: bool = True#
- field submitter: SubmitterRef [Required]#
- field version: list[str] [Required]#
- Validated by:
_version_ensure_list
- expand_versions() list[AppVersionTemplate] #
Returns a list of individual
AppVersionTemplate
instances, expanding each template of multiple versions. If substitutions are used they will not be expanded yet but rather when converting the template to a concrete AppVersion.
- pydantic model bfabric_app_runner.specs.app.app_version.AppVersionTemplate#
Bases:
BaseModel
Show JSON schema
{ "title": "AppVersionTemplate", "type": "object", "properties": { "version": { "title": "Version", "type": "string" }, "commands": { "$ref": "#/$defs/CommandsSpec" }, "submitter": { "$ref": "#/$defs/SubmitterRef" }, "reuse_default_resource": { "default": true, "title": "Reuse Default Resource", "type": "boolean" } }, "$defs": { "CommandDocker": { "additionalProperties": false, "properties": { "type": { "const": "docker", "default": "docker", "title": "Type", "type": "string" }, "image": { "title": "Image", "type": "string" }, "command": { "title": "Command", "type": "string" }, "entrypoint": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Entrypoint" }, "engine": { "default": "docker", "enum": [ "docker", "podman" ], "title": "Engine", "type": "string" }, "env": { "additionalProperties": { "type": "string" }, "default": {}, "title": "Env", "type": "object" }, "mac_address": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Mac Address" }, "mounts": { "$ref": "#/$defs/MountOptions", "default": { "work_dir_target": null, "read_only": [], "writeable": [], "share_bfabric_config": true } }, "hostname": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Hostname" }, "custom_args": { "default": [], "items": { "type": "string" }, "title": "Custom Args", "type": "array" } }, "required": [ "image", "command" ], "title": "CommandDocker", "type": "object" }, "CommandShell": { "additionalProperties": false, "properties": { "type": { "const": "shell", "default": "shell", "title": "Type", "type": "string" }, "command": { "title": "Command", "type": "string" } }, "required": [ "command" ], "title": "CommandShell", "type": "object" }, "CommandsSpec": { "additionalProperties": false, "description": "Defines the commands that are required to execute an app.", "properties": { "dispatch": { "discriminator": { "mapping": { "docker": "#/$defs/CommandDocker", "shell": "#/$defs/CommandShell" }, "propertyName": "type" }, "oneOf": [ { "$ref": "#/$defs/CommandShell" }, { "$ref": "#/$defs/CommandDocker" } ], "title": "Dispatch" }, "process": { "discriminator": { "mapping": { "docker": "#/$defs/CommandDocker", "shell": "#/$defs/CommandShell" }, "propertyName": "type" }, "oneOf": [ { "$ref": "#/$defs/CommandShell" }, { "$ref": "#/$defs/CommandDocker" } ], "title": "Process" }, "collect": { "anyOf": [ { "discriminator": { "mapping": { "docker": "#/$defs/CommandDocker", "shell": "#/$defs/CommandShell" }, "propertyName": "type" }, "oneOf": [ { "$ref": "#/$defs/CommandShell" }, { "$ref": "#/$defs/CommandDocker" } ] }, { "type": "null" } ], "default": null, "title": "Collect" } }, "required": [ "dispatch", "process" ], "title": "CommandsSpec", "type": "object" }, "MountOptions": { "additionalProperties": false, "properties": { "work_dir_target": { "anyOf": [ { "format": "path", "type": "string" }, { "type": "null" } ], "default": null, "title": "Work Dir Target" }, "read_only": { "default": [], "items": { "maxItems": 2, "minItems": 2, "prefixItems": [ { "format": "path", "type": "string" }, { "format": "path", "type": "string" } ], "type": "array" }, "title": "Read Only", "type": "array" }, "writeable": { "default": [], "items": { "maxItems": 2, "minItems": 2, "prefixItems": [ { "format": "path", "type": "string" }, { "format": "path", "type": "string" } ], "type": "array" }, "title": "Writeable", "type": "array" }, "share_bfabric_config": { "default": true, "title": "Share Bfabric Config", "type": "boolean" } }, "title": "MountOptions", "type": "object" }, "SubmitterRef": { "description": "Reference of a submitter and potential configuration overrides.", "properties": { "name": { "title": "Name", "type": "string" }, "params": { "default": {}, "patternProperties": { "^--.*": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "title": "Params", "type": "object" } }, "required": [ "name" ], "title": "SubmitterRef", "type": "object" } }, "required": [ "version", "commands", "submitter" ] }
- Fields:
- field commands: CommandsSpec [Required]#
- field reuse_default_resource: bool = True#
- field submitter: SubmitterRef [Required]#
- field version: str [Required]#
- evaluate(variables_app: VariablesApp) AppVersion #
Evaluates the template to a concrete
AppVersion
instance.