arazzo: 1.0.1
info:
title: Daytona Build and Activate a Snapshot
summary: Register a snapshot from a container image, poll until it builds, and activate it if it lands inactive.
description: >-
Snapshots are the reusable images that back Daytona sandboxes. This workflow
registers a new snapshot from a container image, polls the snapshot until its
asynchronous build settles (looping while it is building, pending, or
pulling, and ending if the build fails), and then branches: when the built
snapshot is inactive it activates it, and when it is already active it
finishes. Every step spells out its request inline so the flow can be read
and executed without opening the underlying OpenAPI description.
version: 1.0.0
sourceDescriptions:
- name: snapshotsApi
url: ../openapi/daytona-io-snapshots-api-openapi.yml
type: openapi
workflows:
- workflowId: build-and-activate-snapshot
summary: Create a snapshot from an image, wait for it to build, and activate it.
description: >-
Registers a snapshot from a container image, polls until the build
completes, then activates the snapshot when it is inactive.
inputs:
type: object
required:
- apiToken
- name
- imageName
properties:
apiToken:
type: string
description: Daytona API key used as a bearer token.
name:
type: string
description: The name of the snapshot to create.
imageName:
type: string
description: The container image name to build the snapshot from (e.g. ubuntu:22.04).
cpu:
type: integer
description: CPU cores to allocate to sandboxes created from this snapshot.
memory:
type: integer
description: Memory in GB to allocate to sandboxes created from this snapshot.
disk:
type: integer
description: Disk space in GB to allocate to sandboxes created from this snapshot.
steps:
- stepId: createSnapshot
description: Register a new snapshot from the supplied container image.
operationId: createSnapshot
parameters:
- name: Authorization
in: header
value: "Bearer $inputs.apiToken"
requestBody:
contentType: application/json
payload:
name: $inputs.name
imageName: $inputs.imageName
cpu: $inputs.cpu
memory: $inputs.memory
disk: $inputs.disk
successCriteria:
- condition: $statusCode == 200
outputs:
snapshotId: $response.body#/id
state: $response.body#/state
- stepId: pollBuild
description: >-
Poll the snapshot until the build completes, looping while it is building,
pending, or pulling, and ending if the build fails.
operationId: getSnapshot
parameters:
- name: Authorization
in: header
value: "Bearer $inputs.apiToken"
- name: id
in: path
value: $steps.createSnapshot.outputs.snapshotId
successCriteria:
- condition: $statusCode == 200
outputs:
state: $response.body#/state
onSuccess:
- name: inactive
type: goto
stepId: activateSnapshot
criteria:
- context: $response.body
condition: $.state == "inactive"
type: jsonpath
- name: alreadyActive
type: end
criteria:
- context: $response.body
condition: $.state == "active"
type: jsonpath
- name: buildFailed
type: end
criteria:
- context: $response.body
condition: $.state == "error" || $.state == "build_failed"
type: jsonpath
- name: stillBuilding
type: goto
stepId: pollBuild
criteria:
- context: $response.body
condition: $.state != "active" && $.state != "inactive" && $.state != "error" && $.state != "build_failed"
type: jsonpath
- stepId: activateSnapshot
description: Activate the built snapshot so sandboxes can be created from it.
operationId: activateSnapshot
parameters:
- name: Authorization
in: header
value: "Bearer $inputs.apiToken"
- name: id
in: path
value: $steps.createSnapshot.outputs.snapshotId
successCriteria:
- condition: $statusCode == 200
outputs:
snapshotId: $response.body#/id
state: $response.body#/state
outputs:
snapshotId: $steps.createSnapshot.outputs.snapshotId
state: $steps.activateSnapshot.outputs.state
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.