Fix in confirmed_commit capability in netconf_config modules (#46964)

* Fix in confirmed_commit capability in netconf_config modules

Fixes #46804

*  If confirm value is greater than zero or confirm_commit option is set and confirmed-commit
   capability is not supported but Netconf server only in that case fail the module

* Update confirm-commit flag

* Update changelog

(cherry picked from commit 5394638047)
This commit is contained in:
Ganesh Nalawade 2018-10-15 11:34:35 +05:30 committed by Toshio Kuratomi
parent 977f094741
commit da07b58c3b
2 changed files with 15 additions and 6 deletions

View file

@ -0,0 +1,3 @@
---
bugfixes:
- netconf_config - Fix in confirmed_commit capability in netconf_config modules (https://github.com/ansible/ansible/pull/46778)

View file

@ -123,7 +123,7 @@ options:
commit: commit:
description: description:
- This boolean flag controls if the configuration changes should be committed or not after editing the - This boolean flag controls if the configuration changes should be committed or not after editing the
candidate datastore. This oprion is supported only if remote Netconf server supports :candidate candidate datastore. This option is supported only if remote Netconf server supports :candidate
capability. If the value is set to I(False) commit won't be issued after edit-config operation capability. If the value is set to I(False) commit won't be issued after edit-config operation
and user needs to handle commit or discard-changes explicitly. and user needs to handle commit or discard-changes explicitly.
type: bool type: bool
@ -305,8 +305,8 @@ def main():
if confirm_commit and not operations.get('supports_confirm_commit', False): if confirm_commit and not operations.get('supports_confirm_commit', False):
module.fail_json(msg='confirm commit is not supported by Netconf server') module.fail_json(msg='confirm commit is not supported by Netconf server')
if confirm_commit or (confirm > 0) and not operations.get('supports_confirm_commit', False): if (confirm > 0) and not operations.get('supports_confirm_commit', False):
module.fail_json(msg='confirm commit is not supported by this netconf server') module.fail_json(msg='confirm commit is not supported by this netconf server, given confirm timeout: %d' % confirm)
if validate and not operations.get('supports_validate', False): if validate and not operations.get('supports_validate', False):
module.fail_json(msg='validate is not supported by this netconf server') module.fail_json(msg='validate is not supported by this netconf server')
@ -323,6 +323,7 @@ def main():
result = {'changed': False, 'server_capabilities': capabilities.get('server_capabilities', [])} result = {'changed': False, 'server_capabilities': capabilities.get('server_capabilities', [])}
before = None before = None
after = None
locked = False locked = False
try: try:
if module.params['backup']: if module.params['backup']:
@ -362,15 +363,20 @@ def main():
'error_option': module.params['error_option'], 'error_option': module.params['error_option'],
'format': module.params['format'], 'format': module.params['format'],
} }
conn.edit_config(**kwargs) conn.edit_config(**kwargs)
if supports_commit and module.params['commit']: if supports_commit and module.params['commit']:
after = to_text(conn.get_config(source='candidate'), errors='surrogate_then_replace').strip()
if not module.check_mode: if not module.check_mode:
timeout = confirm if confirm > 0 else None confirm_timeout = confirm if confirm > 0 else None
conn.commit(confirmed=confirm_commit, timeout=timeout) confirmed_commit = True if confirm_timeout else False
conn.commit(confirmed=confirmed_commit, timeout=confirm_timeout)
else: else:
conn.discard_changes() conn.discard_changes()
after = to_text(conn.get_config(source='running'), errors='surrogate_then_replace').strip() if after is None:
after = to_text(conn.get_config(source='running'), errors='surrogate_then_replace').strip()
sanitized_before = sanitize_xml(before) sanitized_before = sanitize_xml(before)
sanitized_after = sanitize_xml(after) sanitized_after = sanitize_xml(after)