Skip to content

Commit

Permalink
Handling of configurations blocks with end-* at the end of the block (#…
Browse files Browse the repository at this point in the history
…39673)

* handle end-policy issue

* revert changes in iosxr cliconf

* fix trailing parents not included in difference

* Moving fix to platform specific fix

* pep 8 issues
  • Loading branch information
gdpak committed May 8, 2018
1 parent 09e3b5c commit ef577b7
Show file tree
Hide file tree
Showing 4 changed files with 69 additions and 0 deletions.
32 changes: 32 additions & 0 deletions lib/ansible/modules/network/iosxr/iosxr_config.py
Expand Up @@ -176,13 +176,19 @@
type: string
sample: /playbooks/ansible/backup/iosxr01.2016-07-16@22:28:34
"""
import re

from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils.network.iosxr.iosxr import load_config, get_config
from ansible.module_utils.network.iosxr.iosxr import iosxr_argument_spec, copy_file
from ansible.module_utils.network.common.config import NetworkConfig, dumps

DEFAULT_COMMIT_COMMENT = 'configured by iosxr_config'

CONFIG_MISPLACED_CHILDREN = [
re.compile(r'end-\s*(.+)$')
]


def copy_file_to_node(module):
""" Copy config file to IOS-XR node. We use SFTP because older IOS-XR versions don't handle SCP very well.
Expand Down Expand Up @@ -225,6 +231,29 @@ def get_candidate(module):
return candidate


def sanitize_candidate_config(config):
last_parents = None
for regex in CONFIG_MISPLACED_CHILDREN:
for index, line in enumerate(config):
if line._parents:
last_parents = line._parents
m = regex.search(line.text)
if m and m.group(0):
config[index]._parents = last_parents


def sanitize_running_config(config):
last_parents = None
for regex in CONFIG_MISPLACED_CHILDREN:
for index, line in enumerate(config):
if line._parents:
last_parents = line._parents
m = regex.search(line.text)
if m and m.group(0):
config[index].text = ' ' + m.group(0)
config[index]._parents = last_parents


def run(module, result):
match = module.params['match']
replace = module.params['replace']
Expand All @@ -237,6 +266,9 @@ def run(module, result):
candidate_config = get_candidate(module)
running_config = get_running_config(module)

sanitize_candidate_config(candidate_config.items)
sanitize_running_config(running_config.items)

commands = None
if match != 'none' and replace != 'config':
commands = candidate_config.difference(running_config, path=path, match=match, replace=replace)
Expand Down
@@ -0,0 +1,7 @@
prefix-set ebpg_filter
192.168.0.0/16 ge 15 le 30
end-set

interface Loopback999
description this is a test interface for prefix-set

@@ -0,0 +1,3 @@
prefix-set ebpg_filter
192.168.0.0/16 ge 17 le 30
end-set
@@ -0,0 +1,27 @@
---
- debug: msg="START cli/misplaced_sublevel.yaml on connection={{ ansible_connection }}"

- name: setup
iosxr_config:
src: basic/init_prefix_set.j2
ignore_errors: yes

- name: Change prefix-set and new command after prefix-set
iosxr_config:
src: basic/change_prefix_set.j2
register: result

- assert:
that:
- "result.changed == true"

- name: Play same config again to verify no diff in prefix-set also works
iosxr_config:
src: basic/change_prefix_set.j2
register: result

- assert:
that:
- "result.changed == true"

- debug: msg="END cli/misplaced_sublevel.yaml on connection={{ ansible_connection }}"

0 comments on commit ef577b7

Please sign in to comment.