Fix IndexError when junos_config contains multiple delete lines (#25139)

* Prevent IndexError when deleting multiple lines

The old code will raise `IndexError: list assignment index out of range` when deleting multiple lines because the indexes of the original and the copy get out of sync. Solved by deleting from the high indexes first so the lower ones remain stable.

* Don't load configuration if nothing to load

Instead of sending an empty candidate config (for example because the candidate only consisted of `delete` lines, and all of them were filtered out by `filter_delete_statements`) just return. JunOS seems to get confused by empty changes, and if the candidate config is empty then it's a no-op anyway.
This commit is contained in:
Sander Steffann 2017-05-30 08:25:25 +02:00 committed by Ganesh Nalawade
parent 6dd8a4cf78
commit 06f76a2741
2 changed files with 4 additions and 1 deletions

View file

@ -169,6 +169,9 @@ def get_diff(module):
def load_config(module, candidate, warnings, action='merge', commit=False, format='xml',
comment=None, confirm=False, confirm_timeout=None):
if not candidate:
return
with locked_config(module):
if isinstance(candidate, list):
candidate = '\n'.join(candidate)

View file

@ -242,7 +242,7 @@ def filter_delete_statements(module, candidate):
config = to_native(match.text, encoding='latin1')
modified_candidate = candidate[:]
for index, line in enumerate(candidate):
for index, line in reversed(list(enumerate(candidate))):
if line.startswith('delete'):
newline = re.sub('^delete', 'set', line)
if newline not in config: