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:
parent
b3004e19a5
commit
39c38bf30d
3 changed files with 19 additions and 17 deletions
|
@ -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 send_request, children
|
||||||
from ansible.module_utils.netconf import discard_changes, validate
|
from ansible.module_utils.netconf import discard_changes, validate
|
||||||
from ansible.module_utils.network_common import to_list
|
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'])
|
ACTIONS = frozenset(['merge', 'override', 'replace', 'update', 'set'])
|
||||||
JSON_ACTIONS = frozenset(['merge', 'override', 'update'])
|
JSON_ACTIONS = frozenset(['merge', 'override', 'update'])
|
||||||
|
@ -88,10 +88,13 @@ def load_configuration(module, candidate=None, action='merge', rollback=None, fo
|
||||||
|
|
||||||
if action == 'set':
|
if action == 'set':
|
||||||
cfg = SubElement(obj, 'configuration-set')
|
cfg = SubElement(obj, 'configuration-set')
|
||||||
cfg.text = '\n'.join(candidate)
|
|
||||||
else:
|
else:
|
||||||
cfg = SubElement(obj, lookup[format])
|
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)
|
return send_request(module, obj)
|
||||||
|
|
||||||
|
@ -138,6 +141,7 @@ def locked_config(module):
|
||||||
unlock_configuration(module)
|
unlock_configuration(module)
|
||||||
|
|
||||||
def get_diff(module):
|
def get_diff(module):
|
||||||
|
|
||||||
reply = get_configuration(module, compare=True, format='text')
|
reply = get_configuration(module, compare=True, format='text')
|
||||||
output = reply.find('.//configuration-output')
|
output = reply.find('.//configuration-output')
|
||||||
if output is not None:
|
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):
|
comment=None, confirm=False, confirm_timeout=None):
|
||||||
|
|
||||||
with locked_config(module):
|
with locked_config(module):
|
||||||
|
if isinstance(candidate, list):
|
||||||
|
candidate = '\n'.join(candidate)
|
||||||
|
|
||||||
reply = load_configuration(module, candidate, action=action, format=format)
|
reply = load_configuration(module, candidate, action=action, format=format)
|
||||||
|
|
||||||
validate(module)
|
validate(module)
|
||||||
|
|
|
@ -113,19 +113,12 @@ EXAMPLES = """
|
||||||
|
|
||||||
from ansible.module_utils.basic import AnsibleModule
|
from ansible.module_utils.basic import AnsibleModule
|
||||||
from ansible.module_utils.junos import check_args, junos_argument_spec
|
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
|
from ansible.module_utils.six import text_type
|
||||||
|
|
||||||
USE_PERSISTENT_CONNECTION = True
|
USE_PERSISTENT_CONNECTION = True
|
||||||
DEFAULT_COMMENT = 'configured by junos_template'
|
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():
|
def main():
|
||||||
|
|
||||||
argument_spec = dict(
|
argument_spec = dict(
|
||||||
|
@ -133,7 +126,7 @@ def main():
|
||||||
confirm=dict(default=0, type='int'),
|
confirm=dict(default=0, type='int'),
|
||||||
comment=dict(default=DEFAULT_COMMENT),
|
comment=dict(default=DEFAULT_COMMENT),
|
||||||
action=dict(default='merge', choices=['merge', 'overwrite', 'replace']),
|
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'),
|
backup=dict(default=False, type='bool'),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -142,8 +135,6 @@ def main():
|
||||||
module = AnsibleModule(argument_spec=argument_spec,
|
module = AnsibleModule(argument_spec=argument_spec,
|
||||||
supports_check_mode=True)
|
supports_check_mode=True)
|
||||||
|
|
||||||
check_transport(module)
|
|
||||||
|
|
||||||
warnings = list()
|
warnings = list()
|
||||||
check_args(module, warnings)
|
check_args(module, warnings)
|
||||||
|
|
||||||
|
@ -161,9 +152,13 @@ def main():
|
||||||
"set per junos-pyez documentation")
|
"set per junos-pyez documentation")
|
||||||
|
|
||||||
if module.params['backup']:
|
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:
|
if diff:
|
||||||
result['changed'] = True
|
result['changed'] = True
|
||||||
if module._diff:
|
if module._diff:
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
|
|
||||||
- name: check basic config template idempotent
|
- name: check basic config template idempotent
|
||||||
junos_template:
|
junos_template:
|
||||||
src: basic/config.j2
|
src: basic/config-update.j2
|
||||||
action: replace
|
action: replace
|
||||||
provider: "{{ netconf }}"
|
provider: "{{ netconf }}"
|
||||||
register: result
|
register: result
|
Loading…
Reference in a new issue