fixes candidate var type in junos shared lib (#22551)

* candidate var can now be string, list or element
* fixes minor bug in junos_template for backup argument
* disabled invalid integration test for junos_template
This commit is contained in:
Peter Sprygada 2017-03-13 07:27:45 -04:00 committed by GitHub
parent b3004e19a5
commit 39c38bf30d
3 changed files with 19 additions and 17 deletions

View file

@ -24,7 +24,7 @@ from ansible.module_utils.basic import env_fallback
from ansible.module_utils.netconf import send_request, children
from ansible.module_utils.netconf import discard_changes, validate
from ansible.module_utils.network_common import to_list
from ansible.module_utils.connection import exec_command
from ansible.module_utils.six import string_types
ACTIONS = frozenset(['merge', 'override', 'replace', 'update', 'set'])
JSON_ACTIONS = frozenset(['merge', 'override', 'update'])
@ -88,10 +88,13 @@ def load_configuration(module, candidate=None, action='merge', rollback=None, fo
if action == 'set':
cfg = SubElement(obj, 'configuration-set')
cfg.text = '\n'.join(candidate)
else:
cfg = SubElement(obj, lookup[format])
cfg.text = '\n'.join(candidate)
if isinstance(candidate, string_types):
cfg.text = candidate
else:
cfg.append(candidate)
return send_request(module, obj)
@ -138,6 +141,7 @@ def locked_config(module):
unlock_configuration(module)
def get_diff(module):
reply = get_configuration(module, compare=True, format='text')
output = reply.find('.//configuration-output')
if output is not None:
@ -147,6 +151,9 @@ def load_config(module, candidate, action='merge', commit=False, format='xml',
comment=None, confirm=False, confirm_timeout=None):
with locked_config(module):
if isinstance(candidate, list):
candidate = '\n'.join(candidate)
reply = load_configuration(module, candidate, action=action, format=format)
validate(module)

View file

@ -113,19 +113,12 @@ EXAMPLES = """
from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils.junos import check_args, junos_argument_spec
from ansible.module_utils.junos import get_configuration, load
from ansible.module_utils.junos import get_configuration, load_config
from ansible.module_utils.six import text_type
USE_PERSISTENT_CONNECTION = True
DEFAULT_COMMENT = 'configured by junos_template'
def check_transport(module):
transport = (module.params['provider'] or {}).get('transport')
if transport == 'netconf':
module.fail_json(msg='junos_template module is only supported over cli transport')
def main():
argument_spec = dict(
@ -133,7 +126,7 @@ def main():
confirm=dict(default=0, type='int'),
comment=dict(default=DEFAULT_COMMENT),
action=dict(default='merge', choices=['merge', 'overwrite', 'replace']),
config_format=dict(choices=['text', 'set', 'xml']),
config_format=dict(choices=['text', 'set', 'xml'], default='text'),
backup=dict(default=False, type='bool'),
)
@ -142,8 +135,6 @@ def main():
module = AnsibleModule(argument_spec=argument_spec,
supports_check_mode=True)
check_transport(module)
warnings = list()
check_args(module, warnings)
@ -161,9 +152,13 @@ def main():
"set per junos-pyez documentation")
if module.params['backup']:
result['__backup__'] = text_type(get_configuration(module))
reply = get_configuration(module, format='set')
match = reply.find('.//configuration-set')
if match is None:
module.fail_json(msg='unable to retrieve device configuration')
result['__backup__'] = str(match.text).strip()
diff = load(module, src, action=action, commit=commit, format=fmt)
diff = load_config(module, src, action=action, commit=commit, format=fmt)
if diff:
result['changed'] = True
if module._diff:

View file

@ -22,7 +22,7 @@
- name: check basic config template idempotent
junos_template:
src: basic/config.j2
src: basic/config-update.j2
action: replace
provider: "{{ netconf }}"
register: result