From d3225b049466d32c1a46b3858ca16717777b36aa Mon Sep 17 00:00:00 2001 From: Ganesh Nalawade Date: Thu, 6 Sep 2018 23:54:56 +0530 Subject: [PATCH] Fix diff_ignore_lines option issue for candidate configuration (#45201) * Fix diff_ignore_lines option issue for candidate configuration * diff_ignore_lines option is to handle the running config fetch from remote host and ignore the lines that are auto updated eg: commit time and date * This option should not be used while processing candidate (input) configuration * Fix review comment (cherry picked from commit a3c137c1abecaf1b1915e77da2155efea4f3d2c6) --- lib/ansible/plugins/cliconf/eos.py | 2 +- lib/ansible/plugins/cliconf/ios.py | 2 +- lib/ansible/plugins/cliconf/iosxr.py | 2 +- lib/ansible/plugins/cliconf/nxos.py | 2 +- .../ios_config/tests/cli/src_basic.yaml | 30 +++++++++++++++++++ 5 files changed, 34 insertions(+), 4 deletions(-) diff --git a/lib/ansible/plugins/cliconf/eos.py b/lib/ansible/plugins/cliconf/eos.py index f4d837b6da8..30988863f87 100644 --- a/lib/ansible/plugins/cliconf/eos.py +++ b/lib/ansible/plugins/cliconf/eos.py @@ -214,7 +214,7 @@ class Cliconf(CliconfBase): raise ValueError("'replace' value %s in invalid, valid values are %s" % (diff_replace, ', '.join(option_values['diff_replace']))) # prepare candidate configuration - candidate_obj = NetworkConfig(indent=3, ignore_lines=diff_ignore_lines) + candidate_obj = NetworkConfig(indent=3) candidate_obj.load(candidate) if running and diff_match != 'none' and diff_replace != 'config': diff --git a/lib/ansible/plugins/cliconf/ios.py b/lib/ansible/plugins/cliconf/ios.py index 14b4e88de2a..9debea94f6f 100644 --- a/lib/ansible/plugins/cliconf/ios.py +++ b/lib/ansible/plugins/cliconf/ios.py @@ -105,7 +105,7 @@ class Cliconf(CliconfBase): raise ValueError("'replace' value %s in invalid, valid values are %s" % (diff_replace, ', '.join(option_values['diff_replace']))) # prepare candidate configuration - candidate_obj = NetworkConfig(indent=1, ignore_lines=diff_ignore_lines) + candidate_obj = NetworkConfig(indent=1) want_src, want_banners = self._extract_banners(candidate) candidate_obj.load(want_src) diff --git a/lib/ansible/plugins/cliconf/iosxr.py b/lib/ansible/plugins/cliconf/iosxr.py index beb3cfde9b1..8f99a5fc62e 100644 --- a/lib/ansible/plugins/cliconf/iosxr.py +++ b/lib/ansible/plugins/cliconf/iosxr.py @@ -132,7 +132,7 @@ class Cliconf(CliconfBase): # prepare candidate configuration sanitized_candidate = sanitize_config(candidate) - candidate_obj = NetworkConfig(indent=1, ignore_lines=diff_ignore_lines) + candidate_obj = NetworkConfig(indent=1) candidate_obj.load(sanitized_candidate) if running and diff_match != 'none': diff --git a/lib/ansible/plugins/cliconf/nxos.py b/lib/ansible/plugins/cliconf/nxos.py index 50bebe96b20..e7678e438d8 100644 --- a/lib/ansible/plugins/cliconf/nxos.py +++ b/lib/ansible/plugins/cliconf/nxos.py @@ -115,7 +115,7 @@ class Cliconf(CliconfBase): raise ValueError("'replace' value %s in invalid, valid values are %s" % (diff_replace, ', '.join(option_values['diff_replace']))) # prepare candidate configuration - candidate_obj = NetworkConfig(indent=2, ignore_lines=diff_ignore_lines) + candidate_obj = NetworkConfig(indent=2) candidate_obj.load(candidate) if running and diff_match != 'none' and diff_replace != 'config': diff --git a/test/integration/targets/ios_config/tests/cli/src_basic.yaml b/test/integration/targets/ios_config/tests/cli/src_basic.yaml index b203e1a49eb..c9381aca868 100644 --- a/test/integration/targets/ios_config/tests/cli/src_basic.yaml +++ b/test/integration/targets/ios_config/tests/cli/src_basic.yaml @@ -37,4 +37,34 @@ # FIXME Bug https://github.com/ansible/ansible/issues/19382 # - "result.updates is not defined" +- name: check for empty diff + ios_config: + running_config: | + service timestamps debug datetime msec + service timestamps log datetime msec + lines: + - service timestamps debug datetime msec + - service timestamps log datetime msec + check_mode: True + register: result +- assert: + that: + - "result.updates is undefined" + +- name: check for diff with ignore lines for running config + ios_config: + running_config: | + service timestamps debug datetime msec + service timestamps log datetime msec + lines: + - service timestamps debug datetime msec + - service timestamps log datetime msec + diff_ignore_lines: service timestamps log datetime msec + check_mode: True + register: result + +- assert: + that: + - "'service timestamps log datetime msec' in result.updates" + - debug: msg="END cli/src_basic.yaml on connection={{ ansible_connection }}"