Zuul contains Ansible modules and plugins to control the execution of Ansible Job content.
Build Log Support
Zuul provides realtime build log streaming to end users so that users can watch long-running jobs in progress. As jobs may be written that execute a shell script that could run for a long time, additional effort is expended to stream stdout and stderr of shell tasks as they happen rather than waiting for the command to finish.
Zuul contains a modified version of the Ansible command module that starts a log streaming daemon on the build node.
All jobs run with the
plugin enabled, which writes the build log to a file so that the
zuul.lib.log_streamer.LogStreamer can provide the data on demand
over the finger protocol. Finally,
exposes that log stream over a websocket connection as part of
- class zuul.ansible.base.callback.zuul_stream.CallbackModule
This is the Zuul streaming callback. It’s based on the default callback plugin, but streams results from shell commands.
- class zuul.lib.log_streamer.LogStreamer(host, port, jobdir_root)
Class implementing log streaming over the finger daemon port.
- class zuul.web.LogStreamHandler(*args, **kw)
- class zuul.web.ZuulWeb(config, connections, authenticators, info=None)
In addition to real-time streaming, Zuul also installs another callback module,
zuul.ansible.base.callback.zuul_json.CallbackModule that collects all
of the information about a given run into a json file which is written to the
work dir so that it can be published along with build logs. Since the streaming
log is by necessity a single text stream, choices have to be made for
readability about what data is shown and what is not shown. The json log file
is intended to allow for a richer more interactive set of data to be displayed
to the user.
- class zuul.ansible.base.callback.zuul_json.CallbackModule(display=None)