Scoot is a distributed task runner. The core concept of Scoot is the Snapshot, which represents an immutable filesystem state. Scoot allows for execution of commands against input Snapshots to create new output Snapshots.
The Scheduler receives and distributes jobs to workers, and maintains state. It is also responsible for serving the Cloud Scoot API for clients.
The Worker (workerserver) receives information about jobs and runs them, and is responsible for all Snapshot-related functionality.
Scoot work is broken down into independent jobs, which can consist of one or more tasks, which are executed sequentially.
Scoot is intended to work with go modules. If this repository is on your GOPATH, please set GO111MODULE=on when working with go tools in this repository, and preferably use the Go distribution pinned in the .github/workflows/ci.yml file.
Setup a scheduler and worker nodes locally:
go run ./setup-cloud-scoot/main.go --strategy local.local
Run a series of randomly generated tests against the local scheduler and workers:
go run ./scheduler/client/scootcl/main.go smoke_test
Scoot has a few tests that exercise varying levels of common usages and workflows.
Invokes a scoot client directly to run jobs against a local cluster and waits for the scheduled jobs to complete.
Invokes a scoot client directly to run jobs against a local cluster, kills the cluster, attempts to spin up a new one, and waits for the originally scheduled jobs to complete.
Invokes a scoot and scoot-snapshot-db client via CLI to run a job against a local cluster and waits for the job to complete
Invokes a scoot bazel client (bzutil & fs_util) via CLI to run a job against a local cluster using the bazel API grpc endpoints
Thrift Prerequisites Install the Thrift tool and golang thrift repository locally using the following section.
Generating thrift files
See documentation in thrift definition files for specific generation instructions, or
brew install firstname.lastname@example.org
go modules will take care of this
Install binaries to $GOPATH/bin: