[stable-2.7] ios retry config if section filter fails (#49485) (#51871)

* [stable-2.7] ios retry config if section filter fails (#49485)

* Attempt to work around devices that don't understand | section

* Fix case of no flags
(cherry picked from commit 6caed0c)

Co-authored-by: Nathaniel Case <this.is@nathanielca.se>

* Add changelog
pull/52044/head
Nathaniel Case 6 years ago committed by Toshio Kuratomi
parent aa73f8ea3c
commit df359e036c

@ -0,0 +1,2 @@
bugfixes:
- If an ios module uses a section filter on a device which does not support it, retry the command without the filter.

@ -104,7 +104,13 @@ def get_defaults_flag(module):
def get_config(module, flags=None): def get_config(module, flags=None):
flag_str = ' '.join(to_list(flags)) flags = to_list(flags)
section_filter = False
if flags and 'section' in flags[-1]:
section_filter = True
flag_str = ' '.join(flags)
try: try:
return _DEVICE_CONFIGS[flag_str] return _DEVICE_CONFIGS[flag_str]
@ -113,7 +119,11 @@ def get_config(module, flags=None):
try: try:
out = connection.get_config(flags=flags) out = connection.get_config(flags=flags)
except ConnectionError as exc: except ConnectionError as exc:
module.fail_json(msg=to_text(exc, errors='surrogate_then_replace')) if section_filter:
# Some ios devices don't understand `| section foo`
out = get_config(module, flags=flags[:-1])
else:
module.fail_json(msg=to_text(exc, errors='surrogate_then_replace'))
cfg = to_text(out, errors='surrogate_then_replace').strip() cfg = to_text(out, errors='surrogate_then_replace').strip()
_DEVICE_CONFIGS[flag_str] = cfg _DEVICE_CONFIGS[flag_str] = cfg
return cfg return cfg

Loading…
Cancel
Save