Eos subnet overlap fix (#43023)

* Detect overlapping subnet & provide better errors

(cherry picked from commit dba975470d)
This commit is contained in:
Nathaniel Case 2018-07-20 11:02:21 -04:00 committed by Matt Clay
parent ae45488ba2
commit f1a0918ad3
3 changed files with 20 additions and 4 deletions

View file

@ -382,7 +382,11 @@ class Eapi:
commands = ['configure session %s' % session, 'abort'] commands = ['configure session %s' % session, 'abort']
self.send_request(commands) self.send_request(commands)
err = response['error'] err = response['error']
self._module.fail_json(msg=err['message'], code=err['code']) error_text = []
for data in err['data']:
error_text.extend(data.get('errors', []))
error_text = '\n'.join(error_text) or err['message']
self._module.fail_json(msg=error_text, code=err['code'])
commands = ['configure session %s' % session, 'show session-config diffs'] commands = ['configure session %s' % session, 'show session-config diffs']
if commit: if commit:

View file

@ -87,7 +87,12 @@ class HttpApi:
else: else:
commands.append(command) commands.append(command)
response = self.send_request(commands) try:
response = self.send_request(commands)
except Exception:
commands = ['configure session %s' % session, 'abort']
response = self.send_request(commands, output='text')
raise
commands = ['configure session %s' % session, 'show session-config diffs'] commands = ['configure session %s' % session, 'show session-config diffs']
if commit: if commit:
@ -153,7 +158,13 @@ class HttpApi:
def handle_response(response): def handle_response(response):
if 'error' in response: if 'error' in response:
error = response['error'] error = response['error']
raise ConnectionError(error['message'], code=error['code'])
error_text = []
for data in error['data']:
error_text.extend(data.get('errors', []))
error_text = '\n'.join(error_text) or error['message']
raise ConnectionError(error_text, code=error['code'])
results = [] results = []
for result in response['result']: for result in response['result']:

View file

@ -45,7 +45,8 @@ class TerminalModule(TerminalBase):
re.compile(br"[^\r\n]+ not found", re.I), re.compile(br"[^\r\n]+ not found", re.I),
re.compile(br"'[^']' +returned error code: ?\d+"), re.compile(br"'[^']' +returned error code: ?\d+"),
re.compile(br"[^\r\n]\/bin\/(?:ba)?sh"), re.compile(br"[^\r\n]\/bin\/(?:ba)?sh"),
re.compile(br"% More than \d+ OSPF instance", re.I) re.compile(br"% More than \d+ OSPF instance", re.I),
re.compile(br"% Subnet [0-9a-f.:/]+ overlaps", re.I),
] ]
def on_open_shell(self): def on_open_shell(self):