*[pyinfra](https://github.com/Fizzadar/pyinfra): lots of [facts](https://docs.pyinfra.com/en/1.x/facts.html), [operations](https://docs.pyinfra.com/en/1.x/operations.html), [control flow
*[pyinfra](https://github.com/Fizzadar/pyinfra): lots of [facts](https://docs.pyinfra.com/en/1.x/facts.html), [operations](https://docs.pyinfra.com/en/1.x/operations.html), [control flow
can be unclear](https://docs.pyinfra.com/en/1.x/examples/dynamic_execution_deploy.html), [performance close to Fabric](https://docs.pyinfra.com/en/1.x/performance.html), popular, active
can be unclear](https://docs.pyinfra.com/en/1.x/examples/dynamic_execution_deploy.html), [performance close to Fabric](https://docs.pyinfra.com/en/1.x/performance.html), popular, active
### Other discarded alternatives
*[FAI](https://fai-project.org/): might resolve installer scenario (and maybe not in all
cases), but does not resolve ad-hoc tasks or host retirement. we
can still use it for parts of the installer, as we currently do,