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 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)
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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
|
Loading…
Reference in a new issue