zephyrus2 is a tool that allows to compute the optimal configuration of applications to deploy. It is a completely new implementation of the previous Zephyrus tool developed within the Aeolus project (

Zephyrus2 relies on SMT or CP solvers for the exploration of the search space. Moreover it comes with a completely new declarative specification language to define the desired configuration and now it supports binding preferences.

It is written in python. For more information please have a look at

Docker Installation

zephyrus2 could be installed using the docker container technology ( available for the majority of the operating systems. It can then be used by simply sending a post request to the server deployed by using docker.

The Dockerfile needed to generate the container image is stored in the docker subfolder. To clone the repository run the following command.

git clone --recursive

The Dockerfile needed to generate the container image is stored in the docker subfolder. Assuming Docker is installed and \<PATH> is the path to the repository folder, it is possible to deploy the tool with:

sudo docker build -t zephyrus <PATH>/docker
sudo docker run -d -p <PORT>:9001 --name zephyrus_container zephyrus

where \<PORT> is the port used to use the functionalities of the service.

Assuming \<JSON> is the json input file (please see below for more details about the input format), to obtain the desired configuration it is possible to perform the following post request.

curl -H "Content-Type: application/json" -X POST -d @<JSON> http://localhost:<PORT>/process

To check if the service is responding it is possible to use the following post request.

curl -X POST -d '{}' http://localhost:<PORT>/health

To clean up please lunch the following commands:

sudo docker stop zephyrus_container
sudo docker rm zephyrus_container
sudo docker rmi zephyrus

For more information, please see the Docker documentation at

Some test examples file can be located in the <PATH>/zephyrus2/test subfolder (e.g., wordpress.json or wordpress_with_options.json).

Input Specification

zephyrus2 takes in input a JSON file following the schema defined in /specs/zephyrus_input_schema.json.

It outputs a JSON objects following the schema /specs/binding_optimizer_output_schema.json.

When invoked the tool by defaults runs the zephyrus tool that computes the final configuration abstracting from the concrete bindings and then the bindings optimizer that tries to extablish the bindings between the different components to maximize the user preferences.

To avoid the definition of the bindings, it is possible to invoke the tool to obtain only the abstract final configuration. To do so, following the input schema at /specs/zephyrus_input_schema.json, it is possible to add a property in the JSON input called "options" with the value "--run-only-zephyrus".

The option property can also be used to pass other external parameters such as the possibility to disable the symmetry breaking constraint ("--no-simmetry-breaking") or the selection of the backend solver to use (e.g., "--solver lex-gecode" to use gecode or "--solver smt" to use the Z3 SMT solver). Options can be combined by separating them with a space.