Fuzzball Documentation
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

Provisioner Definitions

A provisioner definition is a YAML file that describes how a storage provisioner operates: which driver to use, how to connect to the storage backend, and which groups have access. Provisioner definitions are applied with fuzzball volume provisioner add.

Definition format

Provisioner definitions use a name-keyed format where the provisioner name is the top-level key:

my-provisioner:
  description: "Shared NFS storage for development"
  driver:
    type: nfs
    target: "nfs-server:/export/data"
  access: all
  ephemeral: all

The provisioner name (my-provisioner above) is set by the top-level key in the YAML file. It is also passed as the first argument to fuzzball volume provisioner add.

Field reference

Top-level fields

FieldTypeRequiredDescription
descriptionstringNoHuman-readable description of the provisioner
driverobjectYesStorage driver configuration (see below)
annotationsmapNoKey-value pairs for provisioner selection matching
accesspolicyNoGroups allowed to mount existing persistent volumes
createpolicyNoGroups allowed to create persistent volumes
ephemeralpolicyNoGroups allowed to create and use ephemeral volumes
costPerGbHourfloatNoBilling rate for ephemeral volume usage

Driver configuration

The driver section configures the storage backend. All driver types share the type field; remaining fields depend on the driver type.

FieldTypeDriversDescription
typestringAllDriver type: nfs, hostpath, or efs
targetstringNFSNFS server and export in host:/path format
versionintegerNFSNFS protocol version: 3 or 4 (omit for auto-negotiate)
optionsstringNFSAdditional mount options (e.g., hard,intr)
pathstringHostpathAbsolute path to the base directory on the node
localbooleanHostpathSet to true for node-local volumes (default: false)
filesystemIdstringEFSAWS EFS filesystem ID for BYO mode (e.g., fs-12345678)
regionstringEFSAWS region (e.g., us-west-2)
subnetIdslistEFSAWS subnet IDs for self-provisioned mode (mount target placement)
For EFS provisioners, provide either filesystemId (BYO mode — use an existing EFS filesystem) or subnetIds (self-provisioned mode — Fuzzball creates the filesystem and mount targets automatically). Do not provide both at creation time.

Access policy format

Each of the three policy fields (access, create, ephemeral) accepts one of two forms:

Grant to all groups:

access: all

Grant to specific groups:

access:
  - engineering
  - datascience
  - research

Policies that are omitted or empty grant no access (default-deny). See Access Policies for details on the three-tier permission model.

Annotations

Annotations are string key-value pairs used for provisioner selection in workflow volume definitions. When a workflow specifies annotations: on a volume, Fuzzball matches those annotations against provisioner annotations to select the right provisioner.

my-provisioner:
  driver:
    type: nfs
    target: "nfs-server:/export/fast"
  annotations:
    tier: fast
    region: us-west
  access: all

See Annotations and Selection for details on how matching works.

Complete examples

NFS provisioner

An NFS provisioner for a multi-node on-prem cluster with per-group access control:

shared-nfs:
  description: "Shared NFS storage for all teams"
  driver:
    type: nfs
    target: "nfs-server.prod.internal:/vol/shared"
    options: "hard,intr"
  access: all
  create:
    - data-engineers
    - mlops
  ephemeral: all
  annotations:
    tier: shared

Hostpath provisioner

A hostpath provisioner for a single-node deployment or a node with a shared clustered filesystem (Lustre, GPFS):

lustre-storage:
  description: "Lustre shared filesystem"
  driver:
    type: hostpath
    path: /mnt/lustre/fuzzball
  access: all
  create:
    - storage-admins
  ephemeral: all

Node-local hostpath provisioner

A hostpath provisioner for node-local NVMe scratch storage. Volumes created with this provisioner exist only on the node where they were created:

local-nvme:
  description: "Local NVMe scratch storage"
  driver:
    type: hostpath
    path: /mnt/nvme0n1
    local: true
  ephemeral:
    - compute-jobs
    - batch-workers
When local: true is set, volumes are only accessible on the node where they were created. Fuzzball’s scheduler ensures jobs using these volumes are placed on the correct node.

AWS EFS provisioner (BYO mode)

A provisioner for an existing AWS EFS filesystem:

aws-efs:
  description: "AWS EFS shared cloud storage"
  driver:
    type: efs
    filesystemId: fs-12345678
    region: us-west-2
  access: all
  create:
    - engineering
  ephemeral: all

AWS EFS provisioner (self-provisioned mode)

A provisioner where Fuzzball creates the EFS filesystem and mount targets:

aws-efs-auto:
  description: "Auto-provisioned AWS EFS"
  driver:
    type: efs
    region: us-west-2
    subnetIds:
      - subnet-abc123
      - subnet-def456
  access: all
  create:
    - engineering
  ephemeral: all
The EFS driver creates AWS EFS access points for each volume. Volume creation and deletion are control-plane operations that do not require a substrate node.

Editing an existing provisioner

To modify an existing provisioner’s definition, use fuzzball volume provisioner edit:

$ fuzzball volume provisioner edit my-provisioner

This opens the current definition in your $EDITOR. Save and close to apply the changes. You can also export the current definition to a file, modify it, and re-apply:

$ fuzzball volume provisioner info my-provisioner -o yaml > provisioner.yaml

$ vi provisioner.yaml

$ fuzzball volume provisioner edit my-provisioner -f provisioner.yaml