refactor iosxr_config module to remove old diff functions
this replaces the old diff functions with the netcfg lib for handling configuration diffs between running and candidate configurations
This commit is contained in:
parent
c2c8d51ba2
commit
bba38d2cf8
1 changed files with 17 additions and 56 deletions
|
@ -20,7 +20,7 @@ DOCUMENTATION = """
|
|||
---
|
||||
module: iosxr_config
|
||||
version_added: "2.1"
|
||||
author: "Peter sprygada (@privateip)"
|
||||
author: "Peter Sprygada (@privateip)"
|
||||
short_description: Manage Cisco IOS XR configuration sections
|
||||
description:
|
||||
- Cisco IOS XR configurations use a simple block indent file sytanx
|
||||
|
@ -139,8 +139,6 @@ responses:
|
|||
type: list
|
||||
sample: ['...', '...']
|
||||
"""
|
||||
import re
|
||||
import itertools
|
||||
|
||||
def get_config(module):
|
||||
config = module.params['config'] or dict()
|
||||
|
@ -148,35 +146,6 @@ def get_config(module):
|
|||
config = module.config
|
||||
return config
|
||||
|
||||
|
||||
def build_candidate(lines, parents, config, strategy):
|
||||
candidate = list()
|
||||
|
||||
if strategy == 'strict':
|
||||
for index, cmd in enumerate(lines):
|
||||
try:
|
||||
if cmd != config[index]:
|
||||
candidate.append(cmd)
|
||||
except IndexError:
|
||||
candidate.append(cmd)
|
||||
|
||||
elif strategy == 'exact':
|
||||
if len(lines) != len(config):
|
||||
candidate = list(lines)
|
||||
else:
|
||||
for cmd, cfg in itertools.izip(lines, config):
|
||||
if cmd != cfg:
|
||||
candidate = list(lines)
|
||||
break
|
||||
|
||||
else:
|
||||
for cmd in lines:
|
||||
if cmd not in config:
|
||||
candidate.append(cmd)
|
||||
|
||||
return candidate
|
||||
|
||||
|
||||
def main():
|
||||
|
||||
argument_spec = dict(
|
||||
|
@ -205,44 +174,36 @@ def main():
|
|||
contents = get_config(module)
|
||||
config = module.parse_config(contents)
|
||||
|
||||
if parents:
|
||||
for parent in parents:
|
||||
for item in config:
|
||||
if item.text == parent:
|
||||
config = item
|
||||
if not module.params['force']:
|
||||
contents = get_config(module)
|
||||
config = NetworkConfig(contents=contents, indent=1)
|
||||
|
||||
try:
|
||||
children = [c.text for c in config.children]
|
||||
except AttributeError:
|
||||
children = [c.text for c in config]
|
||||
candidate = NetworkConfig(indent=1)
|
||||
candidate.add(lines, parents=parents)
|
||||
|
||||
commands = candidate.difference(config, path=parents, match=match, replace=replace)
|
||||
else:
|
||||
children = [c.text for c in config if not c.parents]
|
||||
commands = parents
|
||||
commands.extend(lines)
|
||||
|
||||
result = dict(changed=False)
|
||||
|
||||
candidate = build_candidate(lines, parents, children, match)
|
||||
|
||||
if candidate:
|
||||
if replace == 'line':
|
||||
candidate[:0] = parents
|
||||
else:
|
||||
candidate = list(parents)
|
||||
candidate.extend(lines)
|
||||
|
||||
if commands:
|
||||
if before:
|
||||
candidate[:0] = before
|
||||
commands[:0] = before
|
||||
|
||||
if after:
|
||||
candidate.extend(after)
|
||||
commands.extend(after)
|
||||
|
||||
if not module.check_mode:
|
||||
response = module.configure(candidate)
|
||||
commands = [str(c).strip() for c in commands]
|
||||
response = module.configure(commands)
|
||||
result['responses'] = response
|
||||
result['changed'] = True
|
||||
|
||||
result['updates'] = candidate
|
||||
return module.exit_json(**result)
|
||||
result['updates'] = commands
|
||||
module.exit_json(**result)
|
||||
|
||||
|
||||
from ansible.module_utils.basic import *
|
||||
from ansible.module_utils.shell import *
|
||||
|
|
Loading…
Reference in a new issue