Remote Execution has been around for a while now and has served SSH-based and Ansible execution very well. In many environments these are not options due to either security or networking concerns.
Katello-agent has provided an alternative for a long time that worked in an environment where SSH was not available or the Foreman/Katello server or smart proxies did not have the ability to connect to a client. However katello-agent only supported a small set of actions around updating packages. There has been a long desire to create a ‘pull’ based provider that has the features of REX but with a deployment model similar to katello-agent. A few of us have been discussing this for a while and even though its pretty early in design, we felt it was ready for public feedback. This will not replace REX over SSH, but will be another provider option for REX.
The solution uses MQTT as its messaging protocol and includes an MQTT client running on each Host. Here’s a Flow:
- A broker has not been selected yet
- If a client picks up their message and fails to fetch the job or return the results within some amount of time, a timeout will ensue and the job will be marked as failed
- Fetching the job and Submitting the results via HTTP allows us to scale via the HTTP layer and use similar mechanisms to the existing REX ssh provider.
As part of the discussion, we wanted to vet a pure messaging approach, that does not use HTTP for fetching the task for submitting results:
For this option, the job to execute is fetched from the message bus and the results are sent back as well.
This is a very high level view, but we are interested in getting user and developer feedback!