From 75382814f0f35bd26037ec2d43bb416d183c2d2d Mon Sep 17 00:00:00 2001 From: Ganesh Nalawade Date: Thu, 5 Jul 2018 14:57:27 +0530 Subject: [PATCH] Add fetching default filter in ios cliconf plugin (#42339) * Add capability to fetch default filter flag in ios cliconf plugin. --- lib/ansible/module_utils/network/ios/ios.py | 14 ++------------ lib/ansible/plugins/cliconf/ios.py | 21 ++++++++++++++++++++- 2 files changed, 22 insertions(+), 13 deletions(-) diff --git a/lib/ansible/module_utils/network/ios/ios.py b/lib/ansible/module_utils/network/ios/ios.py index f6da25ac81f..fa9c8e27519 100644 --- a/lib/ansible/module_utils/network/ios/ios.py +++ b/lib/ansible/module_utils/network/ios/ios.py @@ -93,18 +93,8 @@ def check_args(module, warnings): def get_defaults_flag(module): connection = get_connection(module) - out = connection.get('show running-config ?') - out = to_text(out, errors='surrogate_then_replace') - - commands = set() - for line in out.splitlines(): - if line.strip(): - commands.add(line.strip().split()[0]) - - if 'all' in commands: - return ['all'] - else: - return ['full'] + out = connection.get_defaults_flag() + return to_text(out, errors='surrogate_then_replace').strip() def get_config(module, flags=None): diff --git a/lib/ansible/plugins/cliconf/ios.py b/lib/ansible/plugins/cliconf/ios.py index 2478617b7fd..d8af8444a29 100644 --- a/lib/ansible/plugins/cliconf/ios.py +++ b/lib/ansible/plugins/cliconf/ios.py @@ -219,7 +219,7 @@ class Cliconf(CliconfBase): def get_capabilities(self): result = dict() - result['rpc'] = self.get_base_rpc() + ['edit_banner', 'get_diff', 'run_commands'] + result['rpc'] = self.get_base_rpc() + ['edit_banner', 'get_diff', 'run_commands', 'get_defaults_flag'] result['network_api'] = 'cliconf' result['device_info'] = self.get_device_info() result['device_operations'] = self.get_device_operations() @@ -279,6 +279,25 @@ class Cliconf(CliconfBase): return responses + def get_defaults_flag(self): + """ + The method identifies the filter that should be used to fetch running-configuration + with defaults. + :return: valid default filter + """ + out = self.get('show running-config ?') + out = to_text(out, errors='surrogate_then_replace') + + commands = set() + for line in out.splitlines(): + if line.strip(): + commands.add(line.strip().split()[0]) + + if 'all' in commands: + return 'all' + else: + return 'full' + def _extract_banners(self, config): banners = {} banner_cmds = re.findall(r'^banner (\w+)', config, re.M)