mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
Fix mandatory statement error for junos modules (#50074)
* Fix mandatory statement error for junos modules Fixes #40267 * Add error regex in junos terminal plugin to error out in case of commit fails * If commit fails add logic to discard changes before existing else next task will result in error * Add integration test * Minor update
This commit is contained in:
parent
97de7c133e
commit
cc8e90395a
3 changed files with 29 additions and 4 deletions
|
@ -25,6 +25,7 @@ import re
|
||||||
from itertools import chain
|
from itertools import chain
|
||||||
from functools import wraps
|
from functools import wraps
|
||||||
|
|
||||||
|
from ansible.errors import AnsibleConnectionFailure
|
||||||
from ansible.module_utils._text import to_text
|
from ansible.module_utils._text import to_text
|
||||||
from ansible.module_utils.common._collections_compat import Mapping
|
from ansible.module_utils.common._collections_compat import Mapping
|
||||||
from ansible.module_utils.network.common.utils import to_list
|
from ansible.module_utils.network.common.utils import to_list
|
||||||
|
@ -103,7 +104,12 @@ class Cliconf(CliconfBase):
|
||||||
if not isinstance(line, Mapping):
|
if not isinstance(line, Mapping):
|
||||||
line = {'command': line}
|
line = {'command': line}
|
||||||
cmd = line['command']
|
cmd = line['command']
|
||||||
results.append(self.send_command(**line))
|
try:
|
||||||
|
results.append(self.send_command(**line))
|
||||||
|
except AnsibleConnectionFailure as exc:
|
||||||
|
if "error: commit failed" in exc.message:
|
||||||
|
self.discard_changes()
|
||||||
|
raise
|
||||||
requests.append(cmd)
|
requests.append(cmd)
|
||||||
|
|
||||||
diff = self.compare_configuration()
|
diff = self.compare_configuration()
|
||||||
|
@ -149,12 +155,19 @@ class Cliconf(CliconfBase):
|
||||||
command += ' peers-synchronize'
|
command += ' peers-synchronize'
|
||||||
|
|
||||||
command += ' and-quit'
|
command += ' and-quit'
|
||||||
return self.send_command(command)
|
|
||||||
|
try:
|
||||||
|
response = self.send_command(command)
|
||||||
|
except AnsibleConnectionFailure:
|
||||||
|
self.discard_changes()
|
||||||
|
raise
|
||||||
|
|
||||||
|
return response
|
||||||
|
|
||||||
@configure
|
@configure
|
||||||
def discard_changes(self):
|
def discard_changes(self):
|
||||||
command = 'rollback 0'
|
command = 'rollback 0'
|
||||||
for cmd in chain(to_list(command), 'exit'):
|
for cmd in chain(to_list(command), ['exit']):
|
||||||
self.send_command(cmd)
|
self.send_command(cmd)
|
||||||
|
|
||||||
@configure
|
@configure
|
||||||
|
|
|
@ -37,7 +37,8 @@ class TerminalModule(TerminalBase):
|
||||||
|
|
||||||
terminal_stderr_re = [
|
terminal_stderr_re = [
|
||||||
re.compile(br"unknown command"),
|
re.compile(br"unknown command"),
|
||||||
re.compile(br"syntax error,")
|
re.compile(br"syntax error"),
|
||||||
|
re.compile(br"error: commit failed")
|
||||||
]
|
]
|
||||||
|
|
||||||
def on_open_shell(self):
|
def on_open_shell(self):
|
||||||
|
|
|
@ -43,6 +43,17 @@
|
||||||
- "result.changed == true"
|
- "result.changed == true"
|
||||||
- "'ge-0/0/2' in result.diff.prepared"
|
- "'ge-0/0/2' in result.diff.prepared"
|
||||||
|
|
||||||
|
- name: remove root-authethication (test error scenario)
|
||||||
|
cli_config:
|
||||||
|
config: "delete system root-authentication"
|
||||||
|
ignore_errors: True
|
||||||
|
register: result
|
||||||
|
|
||||||
|
- assert:
|
||||||
|
that:
|
||||||
|
- "result.failed == true"
|
||||||
|
- "'Missing mandatory statement' in result.msg"
|
||||||
|
|
||||||
- name: teardown
|
- name: teardown
|
||||||
cli_config: *rm1
|
cli_config: *rm1
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue