Page MenuHomePhabricator

Homer: catch config load error
Closed, ResolvedPublic

Description

This happen when there for example a typo or a unsuported configuration option is set (during self._device.cu.load()
Instead of failing it should skip the device with an error message, similar to what we do for a CommitError.

INFO:homer:Generating configuration for asw-a-codfw.mgmt.codfw.wmnet
Traceback (most recent call last):
  File "/home/xionox/Documents/Projects/Wikimedia-repos/homer/.tox/py38-tests/lib/python3.8/site-packages/jnpr/junos/device.py", line 797, in execute
    rpc_rsp_e = self._rpc_reply(rpc_cmd_e,
  File "/home/xionox/Documents/Projects/Wikimedia-repos/homer/.tox/py38-tests/lib/python3.8/site-packages/jnpr/junos/decorators.py", line 149, in wrapper
    raise ex
  File "/home/xionox/Documents/Projects/Wikimedia-repos/homer/.tox/py38-tests/lib/python3.8/site-packages/jnpr/junos/decorators.py", line 116, in wrapper
    rsp = function(self, *args, **kwargs)
  File "/home/xionox/Documents/Projects/Wikimedia-repos/homer/.tox/py38-tests/lib/python3.8/site-packages/jnpr/junos/device.py", line 1382, in _rpc_reply
    return self._conn.rpc(rpc_cmd_e, filter_xml)._NCElement__doc
  File "/home/xionox/Documents/Projects/Wikimedia-repos/homer/.tox/py38-tests/lib/python3.8/site-packages/ncclient/manager.py", line 231, in execute
    return cls(self._session,
  File "/home/xionox/Documents/Projects/Wikimedia-repos/homer/.tox/py38-tests/lib/python3.8/site-packages/ncclient/operations/third_party/juniper/rpc.py", line 52, in request
    return self._request(rpc)
  File "/home/xionox/Documents/Projects/Wikimedia-repos/homer/.tox/py38-tests/lib/python3.8/site-packages/ncclient/operations/rpc.py", line 348, in _request
    raise self._reply.error
ncclient.operations.rpc.RPCError: syntax error

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/xionox/Documents/Projects/Wikimedia-repos/homer/.tox/py38-tests/lib/python3.8/site-packages/jnpr/junos/utils/config.py", line 469, in try_load
    got = self.rpc.load_config(rpc_contents,
  File "/home/xionox/Documents/Projects/Wikimedia-repos/homer/.tox/py38-tests/lib/python3.8/site-packages/jnpr/junos/rpcmeta.py", line 279, in load_config
    return self._junos.execute(rpc, ignore_warning=ignore_warning)
  File "/home/xionox/Documents/Projects/Wikimedia-repos/homer/.tox/py38-tests/lib/python3.8/site-packages/jnpr/junos/decorators.py", line 76, in wrapper
    return function(*args, **kwargs)
  File "/home/xionox/Documents/Projects/Wikimedia-repos/homer/.tox/py38-tests/lib/python3.8/site-packages/jnpr/junos/decorators.py", line 31, in wrapper
    return function(*args, **kwargs)
  File "/home/xionox/Documents/Projects/Wikimedia-repos/homer/.tox/py38-tests/lib/python3.8/site-packages/jnpr/junos/device.py", line 818, in execute
    raise EzErrors.RpcError(cmd=rpc_cmd_e,
jnpr.junos.exception.RpcError: RpcError(severity: error, bad_element: ssh-ed25519, message: syntax error)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/xionox/Documents/Projects/Wikimedia-repos/homer/.tox/py38-tests/lib/python3.8/site-packages/homer/transports/junos.py", line 172, in _prepare
    self._device.cu.load(config, format='text', merge=False, ignore_warning=ignore_warning)
  File "/home/xionox/Documents/Projects/Wikimedia-repos/homer/.tox/py38-tests/lib/python3.8/site-packages/jnpr/junos/utils/config.py", line 557, in load
    return try_load(rpc_contents,
  File "/home/xionox/Documents/Projects/Wikimedia-repos/homer/.tox/py38-tests/lib/python3.8/site-packages/jnpr/junos/utils/config.py", line 475, in try_load
    raise ConfigLoadError(cmd=err.cmd, rsp=err.rsp, errs=err.errs)
jnpr.junos.exception.ConfigLoadError: ConfigLoadError(severity: error, bad_element: ssh-ed25519, message: error: syntax error)

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/xionox/Documents/Projects/Wikimedia-repos/homer/.tox/py38-tests/bin/homer", line 11, in <module>
    load_entry_point('homer', 'console_scripts', 'homer')()
  File "/home/xionox/Documents/Projects/Wikimedia-repos/homer/.tox/py38-tests/lib/python3.8/site-packages/homer/cli.py", line 68, in main
    return getattr(runner, args.action)(args.query, **kwargs)
  File "/home/xionox/Documents/Projects/Wikimedia-repos/homer/.tox/py38-tests/lib/python3.8/site-packages/homer/__init__.py", line 118, in diff
    successes, diffs = self._execute(self._device_diff, query)
  File "/home/xionox/Documents/Projects/Wikimedia-repos/homer/.tox/py38-tests/lib/python3.8/site-packages/homer/__init__.py", line 295, in _execute
    device_success, device_diff = callback(device, device_config, attempt, **kwargs)
  File "/home/xionox/Documents/Projects/Wikimedia-repos/homer/.tox/py38-tests/lib/python3.8/site-packages/homer/__init__.py", line 189, in _device_diff
    return connection.commit_check(device_config, self._ignore_warning)
  File "/home/xionox/Documents/Projects/Wikimedia-repos/homer/.tox/py38-tests/lib/python3.8/site-packages/homer/transports/junos.py", line 123, in commit_check
    diff = self._prepare(config, ignore_warning)
  File "/home/xionox/Documents/Projects/Wikimedia-repos/homer/.tox/py38-tests/lib/python3.8/site-packages/homer/transports/junos.py", line 176, in _prepare
    raise JunosPrepareError('Failed to prepare the configuration on {fqdn}'.format(fqdn=self._fqdn)) from e
homer.transports.junos.JunosPrepareError: Failed to prepare the configuration on asw-a-codfw.mgmt.codfw.wmnet

Details

Related Changes in Gerrit:

Event Timeline

ayounsi triaged this task as Low priority.
Volans raised the priority of this task from Low to Medium.

Change 599897 had a related patch set uploaded (by Volans; owner: Volans):
[operations/software/homer@master] transports: catch configuration load errors

https://gerrit.wikimedia.org/r/599897

Change 599897 merged by jenkins-bot:
[operations/software/homer@master] Improve error catching

https://gerrit.wikimedia.org/r/599897

Fix merged in master, will be part of the next release.