netbox: adapt to new Netbox API
Netbox API starting with Netbox 2.8.0 have removed the choices API endpoint. Adapt the handling of the device status accordingly.
Add Python 3.8 support
transports.junos: do not commit check on empty diff:
When performing a commit check, do not actually run the
commit_checkon the device if there is no diff.
In all cases perform a rollback, even on empty diff.
Handle commit abort separately (T244362).
Introduce a new
HomerAbortErrorexception to specifically handle cases in which the user explicitely aborted a write operation.
In the commit callback raise an
HomerAbortErrorexception when the user abort the commit or reach the limit of invalid replies.
transports.junos: retry when a timeout occurs during commits (T244363).
transports.junos: handle timeouts separately (T244363).
RpcTimeoutErrorjunos exception separately to avoid to have a full stacktrace in the logs as it's a normal failure scenario.
TimeoutExpiredErrorncclient exception separately to avoid failures when calling
allow overriding the
ssh_configpath in homer's config.
plugins: initial implementation for Netbox data.
Allow to specify via configuration a Python module to load as a plugin for the Netbox data gathering.
When configured the plugin class is dynamically loaded and exposed to the templates as netbox.device_plugin.
It is basically the same implementation of
NetboxDeviceDatabut allows for any specific selection of data from Netbox that is not generic enough to be included in Homer itself.
commit: do not
commit_checkon initial empty diff.
As a consequence of commit
1edb7c2if a device have an empty diff and a commit is run on it, it will run a
commit_checkanyway. Avoid this situation skipping the whole operation if at the first attempt the diff is empty.
In case of enough timeouts that don't allow Homer to complete the commit operation within the same run, the automatic rollback should be waited before retrying, otherwise the device will just be skipped.
To achieve this, passing the attempt number to all the operation callbacks, also if it's currently only used in the commit one to keep the same interface for all of them.
diff: allow to omit the actual diff.
-o/--omit-diffoption to the
diffsub-command to allow to omit the actual diff for security reasons if the diff results will be used for monitoring/alarming purposes, as the diff might contain sensitive data.
diff: use different exit code if there is a diff (T249224).
To allow to run automatic checks on outstanding diffs between the devices running configuration and the one defined in Homer's config and templates, make the diff command to return a different exit code when successfull but there is any diff.
In case of failure the failure exit code will prevail.
netbox: silently skip devices without platform.
Some devices might not be reachable by default because not managed. Allow to more silently skip those (debug level logging only) if they are missing both the FQDN and the Platform in Netbox.
Sort deviced by FQDN
netbox: skip virtual chassis devices without a domain field set, as they would not be reachable.
examples: add comments to example config
config: complete test coverage
doc: fix example
/pluginsto gitignore to be able to link a plugin directory from other locations in a local checkout.