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

A First Basic Workflow

Let’s create a job that uses a lolcow image from Docker Hub to run the fortune command and produce a random fortune/quote/joke. We’ll start by showing the steps to create the most basic workflow possible and then we will build on that workflow to create something more complex in later sections.

After logging in to Fuzzball, navigate to “Workflows” by clicking the menu item on the left and then select “New Workflow”.

image of workflow editor starting screen

Workflows are composed of 1 or more jobs. So we should start by adding a job to this workflow. Drag a job from the toolbox at the top of the canvas and drop it into the central grid. The new job appears as a card, and you can give it a name in the “Name” field of the panel on the right.

the new job card and its Name field in the properties panel

After you do so, you will see a menu with several tabs open to the right.

You can start by adding a script in the “Job” tab. As we said above, we will create a job that generates text using the Fortune program. So add the fortune command like so:

new text box allowing addition of the command fortune

Now you can click on the “Environment” tab to configure the environment that this job will run in.

The Environment tab of the job’s Properties panel

The only thing that you absolutely need to provide is a URI to a container image that supports your job. Here we will use the famous lolcow image from Docker Hub because it includes the fortune command. The field also accepts oras://, fb://, and fuzzball:// URIs for images held elsewhere, including SIF images.

Enter the following text to pull the correct container:

docker://wresch/lolcow

dialog box showing the path to the lolcow image on Docker Hub

Now you can click on the “Resources” tab to finish the configuration necessary to run a basic workflow.

The Resources tab of the job’s Properties panel

The bare minimum configuration includes a specification for the number of cores and the amount of memory to use. 1 core and 1GB memory will be sufficient to execute the fortune command.

the resources tab with 1 core and 1GB memory set

If no units are specified in your memory request, Fuzzball defaults to bytes. You should always specify units for memory requests in the web UI. Units such as GiB, MiB, KiB, etc are preferred. The base 10 equivalents (GB, MB, KB) are also acceptable.

At this point you can run the job with the “Start” button at the top right of the editor. After optionally naming your workflow, you can proceed to the workflow status page. When completed, you will see something like the following:

the completed fortune workflow with logs

You can see the Fuzzfile at any time from the Workflow Editor by selecting the “YAML” tab in the panel on the right. On a workflow’s status page, select the Fuzzfile tab in the Workflow Details pane to view the workflow definition as read-only YAML. In the example here, the Fuzzfile that is generated by the Workflow Editor looks like this.

version: v4
jobs:
  fortune:
    image:
      uri: docker://wresch/lolcow
    script: |
      #!/bin/sh
      fortune
    resource:
      cpu:
        cores: 1
      memory:
        size: 1GB
Preview workflow in web UI

If you want to replicate this or any of the workflows in these examples, but you don’t want to manually recreate them using the Workflow Editor, you can always copy and paste this text into a file and open the file in the Workflow Editor. Or you can just press “e” to open the text editor window in the Workflow Editor and paste in this text!

The next section will expand on this basic Fuzzfile to create a workflow that runs multiple jobs (with dependencies) and adds a Storage Volume to share data between jobs.

New workflows created in the Web UI default to version: v4. This guide reflects v4 syntax. If you see version: v4 at the top of your Fuzzfile in the Workflow Editor, you’re using the current recommended syntax. For information on v3-to-v4 differences, see the V4 Breaking Changes guide.
When writing simple shell commands like this, you can omit the shebang line and Fuzzball will assume #!/bin/sh. For scripts requiring bash-specific features or other interpreters, include an explicit shebang like #!/bin/bash or #!/usr/bin/python3.