At design-time, resource assignments can be defined through so-called Recipes. Each recipe specifies the process of how to find the best-fitting allocation for a specific problem. At run-time, as soon as such an allocation is required, the corresponding recipe is executed on the basis of the currently available resources.
Each recipe consists of so-called ingredients, which provide different types of functionality within the allocation process. They can be seen as building blocks plugged together in recipes. Currently, there are four different types of ingredients:
Input. They are used as inputs for an allocation process and define on which resource types the allocation should be done. At run-time, they are replaced by the list of currently known resource instances of the type set in the input ingredient.
Transformer. Transformers are used to modify the list of resource instances. The modification can either be that each instance is altered (map), filtering for e.g. certain attribute values, or reducing the set to a new object.
Algorithm. Docker images can be used to process incoming resource instance lists and to compute the optimized allocation/result based on the input. The output of an algorithm ingredient is again a list of resource instances.
Output. Output ingredients write the input they receive back to the database. They are used to persist the allocation result and can only be used at the end of a recipe, as they do not have any outgoing connectors.