Eos subnet overlap fix (#43023)
* Detect overlapping subnet & provide better errors
(cherry picked from commit dba975470d
)
This commit is contained in:
parent
ae45488ba2
commit
f1a0918ad3
3 changed files with 20 additions and 4 deletions
|
@ -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:
|
||||||
|
|
|
@ -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']:
|
||||||
|
|
|
@ -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):
|
||||||
|
|
Loading…
Reference in a new issue