An opinionated Cromwell orchestration system
Project description
Oliver
An opinionated Cromwell orchestration manager.
Explore the docs »
Request Feature
·
Report Bug
·
⭐ Consider starring the repo! ⭐
🎨 Features
- Workflow Orchestration. Easily submit, inspect, kill, and retry workflows in a Cromwell environment.
- Better Job Tracking. Jobs can be associated with names and job groups to enable better status reporting.
- Dynamic Argument Parsing. Specify inputs and options on the command line rather than editing JSON files.
- Third-party Cloud Integrations. Use the
aws
andazure
subcommands to explore cloud-specific functionality.
📚 Getting Started
Installation
Conda
Oliver is distributed as a package using the community-curated Anaconda repository, conda-forge. You'll need to install conda, and we recommend that you first follow the instructions included in the conda-forge documentation to get everything set up!
conda install oliver -c conda-forge
Python Package Index
You can also install Oliver using the Python Package Index (PyPI).
pip install stjudecloud-oliver
Configuring
Next, we recommend that you configure oliver so that common arguments can be saved. By default, Oliver will prompt you for the answers interactively.
oliver configure
If you are setting up Oliver programmatically, you can accept a default configuration (oliver configure --defaults
) and edit from there using oliver config
.
🚌 A Quick Tour
At its foundation, Oliver is an opinionated job orchestrator for Cromwell. Commonly, you will want to use it to submit a job, inspect a job's status, kill a job, retry a job (possibly with different parameters), and organize job results.
If you're interested in a complete overview of Oliver's capabilities, please see the documentation pages.
Submit a Job
The simplest possible job submission is one which submits a simple workflow with one or more input JSON file(s) and/or key-value pair(s).
oliver submit workflow.wdl inputs.json input_key=input_value
You can similarly set workflow options and labels by prepending arguments with @
and %
respectively.
# works for files too!
oliver submit workflow.wdl @option=foo %label=bar
Please see the docs for more details on job submission.
Inspect a Job
Once a job is submitted, you can interrogate the Cromwell server about its status.
oliver inspect workflow-id
If you aren't sure what workflow identifier was given to your job, you can easily track it down using the status
subcommand.
# detailed view, which shows individual workflow statuses
oliver status -d
Kill a Job
If, for whatever reason, you'd like to stop a job, you can use Oliver to instruct Cromwell to do so.
oliver kill workflow-id
Retry a Job
Retrying a workflow is similarly easy: even if you need to override previously set parameters (e.g. increase the memory capacity for a task).
# override previous inputs by specifying arguments (the same way as you would for `submit`).
oliver retry workflow-id
🖥️ Development
If you are interested in contributing to the code, please first review our CONTRIBUTING.md document. To bootstrap a development environment, please use the following commands.
# Clone the repository
git clone git@github.com:stjudecloud/oliver.git
cd oliver
# Install the project using poetry
poetry install
# Ensure pre-commit is installed to automatically format
# code using `black`.
brew install pre-commit
pre-commit install
pre-commit install --hook-type commit-msg
🚧️ Tests
Oliver provides a (currently patchy) set of tests — both unit and end-to-end. To get started with testing, you'll need to bootstrap a Docker test environment (one-time operation).
# Start development environment
docker image build --tag oliver .
docker-compose up --build -d
alias docker-run-oliver="docker container run \
-it \
--rm \
--network oliver_default \
--mount type=bind,source=$PWD/seeds,target=/opt/oliver/seeds \
--mount type=bind,source=$PWD/oliver,target=/opt/oliver/oliver \
--mount type=bind,source=$PWD/tests,target=/opt/oliver/tests \
--entrypoint '' \
oliver:latest"
# Seed development environment (make sure Cromwell is live first!)
docker-run-oliver bash seeds/seed.sh http://cromwell:8000 seeds/wdl/hello.wdl
docker-run-oliver pytest --cov=./ --cov-report=xml
To reset your entire docker-compose environment, you can run the following:
docker-compose down
docker image rm oliver:latest
docker image rm oliver_cromwell:latest
docker image rm mysql:5.7
docker volume rm oliver_mysql_data
docker network rm oliver_default
docker image build --tag oliver .
docker-compose up --build -d
🤝 Contributing
Contributions, issues and feature requests are welcome!
Feel free to check issues page. You can also take a look at the contributing guide.
📝 License
Copyright © 2020 St. Jude Cloud Team.
This project is MIT licensed.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file stjudecloud-oliver-1.4.11.tar.gz
.
File metadata
- Download URL: stjudecloud-oliver-1.4.11.tar.gz
- Upload date:
- Size: 40.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.8.0 pkginfo/1.8.3 readme-renderer/37.0 requests/2.28.1 requests-toolbelt/0.9.1 urllib3/1.26.12 tqdm/4.64.0 importlib-metadata/4.12.0 keyring/23.8.2 rfc3986/2.0.0 colorama/0.4.5 CPython/3.10.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | eaa721fb0834eec6456c49d5f93c806cf93cdb12b224838226f17b1395c26e9c |
|
MD5 | 521b5965e6400cc96d68cf88c6ac6e8a |
|
BLAKE2b-256 | 414e2eff8713a3de5994384b7376837e96a7bb0bfd9022882389ef1413a8c710 |
File details
Details for the file stjudecloud_oliver-1.4.11-py3-none-any.whl
.
File metadata
- Download URL: stjudecloud_oliver-1.4.11-py3-none-any.whl
- Upload date:
- Size: 59.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.8.0 pkginfo/1.8.3 readme-renderer/37.0 requests/2.28.1 requests-toolbelt/0.9.1 urllib3/1.26.12 tqdm/4.64.0 importlib-metadata/4.12.0 keyring/23.8.2 rfc3986/2.0.0 colorama/0.4.5 CPython/3.10.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | aa6681db32550fad958a4efb33d9a97947265cdb1007d20d7c2eb6a79ba4dc8e |
|
MD5 | 3e3569087395085d02ce8f9eb56cec11 |
|
BLAKE2b-256 | c193f94bb650937df6261bd9b2e2863ae2282549a7f994051d3bc42cf4b08f79 |