# WorkflowTemplate

The `WorkflowTemplate` model has (at least) the following fields:

- `name`: a unique name given to the workflow within the workspace

- `workspace`: a foreign key to the workspace containing the workflow

- `task_name`: a name that refers back to the `Workflow` class to use to manage the execution of the workflow

- `static_parameters`: JSON dict field representing the default values for workflows created from this template.

- `runtime_parameters`: JSON field representing the range of configurable parameters for workflows created from this template.

## `runtime_parameters` values

By default (`{}`) no parameters can be configured when starting a workflow.

Parameters that should be configured can be listed in a JSON object, with a list of permitted values, or the special value `any`. For example, this would allow any source artifact to be used for a build in `sid`, `forky`, or `trixie`:

    suite: ['sid', 'forky', 'trixie']
    source_artifact: 'any'

Only string parameters at the root level can have permitted values specified. More complex objects can either be left out (not configurable) or have their root level option listed as `any` (fully configurable).

The special `runtime_parameters` value of `'any'` (a string, not a dict) allows all parameters to be configured.

## Workflow Creation

The root `WorkRequest` of the workflow copies the following fields from `WorkflowTemplate`:

- `workspace`

- `task_name`

- `task_data`, combining the user-supplied data and the `static_parameters`. The user-supplied data must comply with `runtime_parameters`.