[Avocado-devel] RFC: Plugin execution order
Cleber Rosa
crosa at redhat.com
Thu Sep 29 16:24:22 UTC 2016
As detailed in the following card:
https://trello.com/c/oWzrV48E/837-execution-order-support-in-plugins
It should be possible to specify a custom order for plugins to be
executed by setting specific configuration.
The first observed approach would be to create a section
called `[plugins.<type>]` where the `<type>` conforms to the
description on fully qualified plugin names given here:
https://github.com/avocado-framework/avocado/pull/1495/commits/193a10ce98cb5747395eefcb485dd452696b4b11#diff-0f4f89ace79fa15278d9b283c2d9d9b2R84
Then, by creating a key named `order`, containing the short names as a
list. Enabled plugins not listed will be executed *after* plugins
listed, but in non-determined order.
For instance, consider the following entry points::
'avocado.plugins.result' : [
'xunit = avocado.plugins.xunit:XUnitResult',
'json = avocado.plugins.jsonresult:JSONResult',
'archive = avocado.plugins.archive:Archive',
'mail = avocado.plugins.mail:Mail',
'html = avocado_result_html:HTMLResult'
]
We can say that:
* The plugin type, according to the fully qualified plugin name
definition here is `result`.
* The plugin fully qualified names are:
- result.xunit
- result.json
- result.archive
- result.mail
- result.html
* The short names for plugins of type "result" are:
- xunit
- json
- archive
- mail
- html
To make sure that the mail plugin is run after (and thus includes)
the HTML result, the following configuration entry can be set::
[plugins.result]
order = html, archive
The other result plugins, namely xunit, json and mail, will still
be run. It's guaranteed they'll be run *after* the other result
plugins. The order in which they'll run after the explicitly
ordered plugins is undefined.
Other possible approach
-----------------------
The other approach possible, would require a default order value
for plugins. This would still preferably be done in configuration
rather than in code. Then, the fully qualified name for a plugin could
be used as part of the configuration section. Example::
[plugin.result.archive]
order = 50
[plugin.result.html]
order = 30
This would make the `html` plugin run before the `archive` plugin.
While more verbose, it would allow for external plugins to ship with
stock configuration files that would set, by default, its ordering.
Feedback is highly appreciated!
--
Cleber Rosa
[ Sr Software Engineer - Virtualization Team - Red Hat ]
[ Avocado Test Framework - avocado-framework.github.io ]
More information about the Avocado-devel
mailing list