diff --git a/CHANGELOG.md b/CHANGELOG.md index 126175fb2d..30bbf7d81d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -50,6 +50,14 @@ Ansible Changes By Release #### Deprecated Modules: * ec2_facts (removed in 2.7), replaced by ec2_metadata_facts +#### Removed Deprecated Modules: +* eos_template (use eos_config instead) +* ios_template (use ios_config instead) +* iosxr_template (use iosxr_config instead) +* junos_template (use junos_config instead) +* nxos_template (use nxos_config instead) +* ops_template (use ops_template instead) + ### Minor Changes * removed previously deprecated config option `hostfile` and env var `ANSIBLE_HOSTS` * removed unused and deprecated config option `pattern` diff --git a/lib/ansible/modules/network/eos/_eos_template.py b/lib/ansible/modules/network/eos/_eos_template.py deleted file mode 100644 index fd57d18b89..0000000000 --- a/lib/ansible/modules/network/eos/_eos_template.py +++ /dev/null @@ -1,232 +0,0 @@ -#!/usr/bin/python -# -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see . -# -ANSIBLE_METADATA = {'metadata_version': '1.0', - 'status': ['deprecated'], - 'supported_by': 'community'} - - -DOCUMENTATION = """ ---- -module: eos_template -version_added: "2.1" -author: "Peter Sprygada (@privateip)" -short_description: Manage Arista EOS device configurations -description: - - Manages network device configurations over SSH or eos_local. This module - allows implementers to work with the device running-config. It - provides a way to push a set of commands onto a network device - by evaluating the current running-config and only pushing configuration - commands that are not already configured. The config source can - be a set of commands or a template. -extends_documentation_fragment: eos -deprecated: Deprecated in 2.2. Use M(eos_config) instead -options: - src: - description: - - The path to the config source. The source can be either a - file with config or a template that will be merged during - runtime. By default the task will search for the source - file in role or playbook root folder in templates directory. - required: true - force: - description: - - The force argument instructs the module to not consider the - current devices running-config. When set to true, this will - cause the module to push the contents of I(src) into the device - without first checking if already configured. - required: false - default: false - choices: ['yes', 'no'] - include_defaults: - description: - - By default when the M(eos_template) connects to the remote - device to retrieve the configuration it will issue the C(show - running-config) command. If this option is set to True then - the issued command will be C(show running-config all). - required: false - default: false - choices: ['yes', 'no'] - backup: - description: - - When this argument is configured true, the module will backup - the running-config from the node prior to making any changes. - The backup file will be written to backup_{{ hostname }} in - the root of the playbook directory. - required: false - default: false - choices: ['yes', 'no'] - replace: - description: - - This argument will cause the provided configuration to be replaced - on the destination node. The use of the replace argument will - always cause the task to set changed to true and will implies - C(force=true). This argument is only valid with C(transport=eos_local). - required: false - default: false - choices: ['yes', 'no'] - config: - description: - - The module, by default, will connect to the remote device and - retrieve the current running-config to use as a base for comparing - against the contents of source. There are times when it is not - desirable to have the task get the current running-config for - every task in a playbook. The I(config) argument allows the - implementer to pass in the configuration to use as the base - config for comparison. - required: false - default: null -""" - -EXAMPLES = """ -- name: Push a configuration onto the device - eos_template: - src: config.j2 - -- name: Forceable push a configuration onto the device - eos_template: - src: config.j2 - force: yes - -- name: Provide the base configuration for comparison - eos_template: - src: candidate_config.txt - config: current_config.txt -""" - -RETURN = """ -updates: - description: The set of commands that will be pushed to the remote device - returned: always - type: list - sample: ['...', '...'] - -responses: - description: The set of responses from issuing the commands on the device - returned: when not check_mode - type: list - sample: ['...', '...'] -""" -import re - -from ansible.module_utils.basic import AnsibleModule -from ansible.module_utils.eos import load_config, get_config -from ansible.module_utils.eos import eos_argument_spec -from ansible.module_utils.eos import check_args as eos_check_args -from ansible.module_utils.netcfg import NetworkConfig, dumps - -def check_args(module, warnings): - eos_check_args(module, warnings) - - transport = module.params['transport'] - provider_transport = (module.params['provider'] or {}).get('transport') - - if module.params['replace'] and 'eapi' in (transport, provider_transport): - module.fail_json(msg='config replace is only supported over cli') - -def get_current_config(module): - config = module.params.get('config') - if not config and not module.params['force']: - flags = [] - if module.params['include_defaults']: - flags.append('all') - config = get_config(module, flags) - return config - -def filter_exit(commands): - # Filter out configuration mode commands followed immediately by an - # exit command indented by one level only, e.g. - # - route-map map01 permit 10 - # - exit - # - # Build a temporary list as we filter, then copy the temp list - # back onto the commands list. - temp = [] - ind_prev = 999 - count = 0 - for c in commands: - ind_this = c.count(' ') - if re.search(r"^\s*exit$", c) and ind_this == ind_prev + 1: - temp.pop() - count -= 1 - if count != 0: - ind_prev = temp[-1].count(' ') - continue - temp.append(c) - ind_prev = ind_this - count += 1 - return temp - -def main(): - """ main entry point for module execution - """ - - argument_spec = dict( - src=dict(required=True), - force=dict(default=False, type='bool'), - include_defaults=dict(default=False, type='bool'), - backup=dict(default=False, type='bool'), - replace=dict(default=False, type='bool'), - config=dict() - ) - - argument_spec.update(eos_argument_spec) - - mutually_exclusive = [('config', 'backup'), ('config', 'force')] - - module = AnsibleModule(argument_spec=argument_spec, - mutually_exclusive=mutually_exclusive, - supports_check_mode=True) - - warnings = list() - check_args(module, warnings) - - result = {'changed': False} - if warnings: - result['warnings'] = warnings - - src = module.params['src'] - candidate = NetworkConfig(contents=src, indent=3) - - if module.params['backup']: - result['__backup__'] = get_config(module) - - if not module.params['force']: - contents = get_current_config(module) - configobj = NetworkConfig(contents=contents, indent=3) - commands = candidate.difference(configobj) - commands = dumps(commands, 'commands').split('\n') - commands = [str(c).strip() for c in commands if c] - else: - commands = [c.strip() for c in str(candidate).split('\n')] - - #commands = str(candidate).split('\n') - - if commands: - commands = filter_exit(commands) - commit = not module.check_mode - replace = module.params['replace'] or False - load_config(module, commands, commit=commit, replace=replace) - result['changed'] = True - - result['commands'] = commands - result['updates'] = commands - - module.exit_json(**result) - -if __name__ == '__main__': - main() diff --git a/lib/ansible/modules/network/ios/_ios_template.py b/lib/ansible/modules/network/ios/_ios_template.py deleted file mode 100644 index a47574df29..0000000000 --- a/lib/ansible/modules/network/ios/_ios_template.py +++ /dev/null @@ -1,175 +0,0 @@ -#!/usr/bin/python -# -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see . -# -ANSIBLE_METADATA = {'metadata_version': '1.0', - 'status': ['deprecated'], - 'supported_by': 'community'} - - -DOCUMENTATION = """ ---- -module: ios_template -version_added: "2.1" -author: "Peter Sprygada (@privateip)" -short_description: Manage Cisco IOS device configurations over SSH -description: - - Manages Cisco IOS network device configurations over SSH. This module - allows implementers to work with the device running-config. It - provides a way to push a set of commands onto a network device - by evaluating the current running-config and only pushing configuration - commands that are not already configured. The config source can - be a set of commands or a template. -deprecated: Deprecated in 2.2. Use M(ios_config) instead. -extends_documentation_fragment: ios -options: - src: - description: - - The path to the config source. The source can be either a - file with config or a template that will be merged during - runtime. By default the task will first search for the source - file in role or playbook root folder in templates unless a full - path to the file is given. - required: true - force: - description: - - The force argument instructs the module not to consider the - current device running-config. When set to true, this will - cause the module to push the contents of I(src) into the device - without first checking if already configured. - required: false - default: false - choices: [ "true", "false" ] - include_defaults: - description: - - The module, by default, will collect the current device - running-config to use as a base for comparison to the commands - in I(src). Setting this value to true will cause the command - issued to add any necessary flags to collect all defaults as - well as the device configuration. If the destination device - does not support such a flag, this argument is silently ignored. - required: true - choices: [ "true", "false" ] - backup: - description: - - When this argument is configured true, the module will backup - the running-config from the node prior to making any changes. - The backup file will be written to backup_{{ hostname }} in - the root of the playbook directory. - required: false - default: false - choices: [ "true", "false" ] - config: - description: - - The module, by default, will connect to the remote device and - retrieve the current running-config to use as a base for comparing - against the contents of source. There are times when it is not - desirable to have the task get the current running-config for - every task. The I(config) argument allows the implementer to - pass in the configuration to use as the base config for - comparison. - required: false - default: null -""" - -EXAMPLES = """ -- name: push a configuration onto the device - ios_template: - src: config.j2 - -- name: forceable push a configuration onto the device - ios_template: - src: config.j2 - force: yes - -- name: provide the base configuration for comparison - ios_template: - src: candidate_config.txt - config: current_config.txt -""" - -RETURN = """ -updates: - description: The set of commands that will be pushed to the remote device - returned: always - type: list - sample: ['...', '...'] -""" -from ansible.module_utils.ios import load_config, get_config -from ansible.module_utils.ios import ios_argument_spec, check_args -from ansible.module_utils.basic import AnsibleModule -from ansible.module_utils.netcli import Conditional -from ansible.module_utils.netcfg import NetworkConfig, dumps - -def get_current_config(module): - if module.params['config']: - return module.params['config'] - if module.params['include_defaults']: - flags = ['all'] - else: - flags = [] - return get_config(module=module, flags=flags) - -def main(): - """ main entry point for module execution - """ - argument_spec = dict( - src=dict(), - force=dict(default=False, type='bool'), - include_defaults=dict(default=True, type='bool'), - backup=dict(default=False, type='bool'), - config=dict(), - ) - - argument_spec.update(ios_argument_spec) - - mutually_exclusive = [('config', 'backup'), ('config', 'force')] - - module = AnsibleModule(argument_spec=argument_spec, - mutually_exclusive=mutually_exclusive, - supports_check_mode=True) - - candidate = NetworkConfig(contents=module.params['src'], indent=1) - - result = {'changed': False} - warnings = list() - check_args(module, warnings) - result['warnings'] = warnings - - if module.params['backup']: - result['__backup__'] = get_config(module=module) - - if not module.params['force']: - contents = get_current_config(module) - configobj = NetworkConfig(contents=contents, indent=1) - commands = candidate.difference(configobj) - commands = dumps(commands, 'commands').split('\n') - commands = [str(c).strip() for c in commands if c] - else: - commands = [c.strip() for c in str(candidate).split('\n')] - - if commands: - if not module.check_mode: - load_config(module, commands) - result['changed'] = True - - result['updates'] = commands - result['commands'] = commands - - module.exit_json(**result) - -if __name__ == '__main__': - main() diff --git a/lib/ansible/modules/network/iosxr/_iosxr_template.py b/lib/ansible/modules/network/iosxr/_iosxr_template.py deleted file mode 100644 index 667f1debbe..0000000000 --- a/lib/ansible/modules/network/iosxr/_iosxr_template.py +++ /dev/null @@ -1,158 +0,0 @@ -#!/usr/bin/python -# -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see . -# -ANSIBLE_METADATA = {'metadata_version': '1.0', - 'status': ['deprecated'], - 'supported_by': 'community'} - - - -DOCUMENTATION = """ ---- -module: iosxr_template -version_added: "2.1" -author: "Ricardo Carrillo Cruz (@rcarrillocruz)" -short_description: Manage Cisco IOS XR device configurations over SSH -description: - - Manages network device configurations over SSH. This module - allows implementers to work with the device running-config. It - provides a way to push a set of commands onto a network device - by evaluating the current running-config and only pushing configuration - commands that are not already configured. The config source can - be a set of commands or a template. -deprecated: Deprecated in 2.2. Use M(iosxr_config) instead. -extends_documentation_fragment: iosxr -options: - src: - description: - - The path to the config source. The source can be either a - file with config or a template that will be merged during - runtime. By default the task will first search for the source - file in role or playbook root folder in templates unless a full - path to the file is given. - required: false - default: null - force: - description: - - The force argument instructs the module not to consider the - current device running-config. When set to true, this will - cause the module to push the contents of I(src) into the device - without first checking if already configured. - required: false - default: false - choices: [ "true", "false" ] - backup: - description: - - When this argument is configured true, the module will backup - the running-config from the node prior to making any changes. - The backup file will be written to backup_{{ hostname }} in - the root of the playbook directory. - required: false - default: false - choices: [ "true", "false" ] - config: - description: - - The module, by default, will connect to the remote device and - retrieve the current running-config to use as a base for comparing - against the contents of source. There are times when it is not - desirable to have the task get the current running-config for - every task. The I(config) argument allows the implementer to - pass in the configuration to use as the base config for - comparison. - required: false - default: null -""" - -EXAMPLES = """ - -- name: push a configuration onto the device - iosxr_template: - src: config.j2 - -- name: forceable push a configuration onto the device - iosxr_template: - src: config.j2 - force: yes - -- name: provide the base configuration for comparison - iosxr_template: - src: candidate_config.txt - config: current_config.txt -""" - -RETURN = """ -updates: - description: The set of commands that will be pushed to the remote device - returned: always - type: list - sample: ['...', '...'] -""" -from ansible.module_utils.basic import AnsibleModule -from ansible.module_utils.netcfg import NetworkConfig, dumps -from ansible.module_utils.iosxr import get_config, load_config -from ansible.module_utils.iosxr import iosxr_argument_spec, check_args - - -def main(): - """ main entry point for module execution - """ - - argument_spec = dict( - src=dict(), - force=dict(default=False, type='bool'), - backup=dict(default=False, type='bool'), - config=dict(), - ) - - argument_spec.update(iosxr_argument_spec) - - mutually_exclusive = [('config', 'backup'), ('config', 'force')] - - module = AnsibleModule(argument_spec=argument_spec, - mutually_exclusive=mutually_exclusive, - supports_check_mode=True) - - warnings = list() - check_args(module, warnings) - - result = dict(changed=False, warnings=warnings) - - candidate = NetworkConfig(contents=module.params['src'], indent=1) - - if module.params['backup']: - result['__backup__'] = get_config(module) - - if not module.params['force']: - contents = get_config(module) - configobj = NetworkConfig(contents=contents, indent=1) - commands = candidate.difference(configobj) - commands = dumps(commands, 'commands').split('\n') - commands = [str(c).strip() for c in commands if c] - else: - commands = [c.strip() for c in str(candidate).split('\n')] - - if commands: - load_config(module, commands, result['warnings'], not module.check_mode) - result['changed'] = not module.check_mode - - result['updates'] = commands - result['commands'] = commands - module.exit_json(**result) - - -if __name__ == '__main__': - main() diff --git a/lib/ansible/modules/network/junos/_junos_template.py b/lib/ansible/modules/network/junos/_junos_template.py deleted file mode 100644 index 0995e49072..0000000000 --- a/lib/ansible/modules/network/junos/_junos_template.py +++ /dev/null @@ -1,173 +0,0 @@ -#!/usr/bin/python -# -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see . -# - -ANSIBLE_METADATA = {'metadata_version': '1.0', - 'status': ['deprecated'], - 'supported_by': 'community'} - - -DOCUMENTATION = """ ---- -module: junos_template -version_added: "2.1" -author: "Peter Sprygada (@privateip)" -short_description: Manage configuration on remote devices running Juniper JUNOS -description: - - This module will load a candidate configuration - from a template file onto a remote device running Junos. The - module will return the differences in configuration if the diff - option is specified on the Ansible command line -deprecated: Deprecated in 2.2. Use M(junos_config) instead. -extends_documentation_fragment: junos -options: - src: - description: - - The path to the config source. The source can be either a - file with config or a template that will be merged during - runtime. By default the task will search for the source - file in role or playbook root folder in templates directory. - required: true - default: null - backup: - description: - - When this argument is configured true, the module will backup - the configuration from the node prior to making any changes. - The backup file will be written to backup_{{ hostname }} in - the root of the playbook directory. - required: false - default: false - choices: ["true", "false"] - confirm: - description: - - The C(confirm) argument will configure a time out value for - the commit to be confirmed before it is automatically - rolled back. If the C(confirm) argument is set to False, this - argument is silently ignored. If the value for this argument - is set to 0, the commit is confirmed immediately. - required: false - default: 0 - comment: - description: - - The C(comment) argument specifies a text string to be used - when committing the configuration. If the C(confirm) argument - is set to False, this argument is silently ignored. - required: false - default: configured by junos_template - action: - description: - - The C(action) argument specifies how the module will apply changes. - required: false - default: merge - choices: ['merge', 'overwrite', 'replace'] - version_added: "2.2" - config_format: - description: - - The C(format) argument specifies the format of the configuration - template specified in C(src). If the format argument is not - specified, the module will attempt to infer the configuration - format based of file extension. Files that end in I(xml) will set - the format to xml. Files that end in I(set) will set the format - to set and all other files will default the format to text. - required: false - default: null - choices: ['text', 'xml', 'set'] -requirements: - - ncclient (>=v0.5.2) -notes: - - This module requires the netconf system service be enabled on - the remote device being managed -""" - -EXAMPLES = """ -- junos_template: - src: config.j2 - comment: update system config - -- name: replace config hierarchy - junos_template: - src: config.j2 - action: replace - -- name: overwrite the config - junos_template: - src: config.j2 - action: overwrite -""" - -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_config -from ansible.module_utils.junos import commit_configuration, discard_changes, locked_config - -USE_PERSISTENT_CONNECTION = True -DEFAULT_COMMENT = 'configured by junos_template' - - -def main(): - - argument_spec = dict( - src=dict(required=True, type='path'), - 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'], default='text'), - backup=dict(default=False, type='bool'), - ) - - argument_spec.update(junos_argument_spec) - - module = AnsibleModule(argument_spec=argument_spec, - supports_check_mode=True) - - warnings = list() - check_args(module, warnings) - - result = {'changed': False, 'warnings': warnings} - - commit = not module.check_mode - action = module.params['action'] - src = module.params['src'] - fmt = module.params['config_format'] - - if action == 'overwrite' and fmt == 'set': - module.fail_json(msg="overwrite cannot be used when format is set per junos-pyez documentation") - - if module.params['backup']: - 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() - - with locked_config(module): - diff = load_config(module, src, warnings, action=action, format=fmt) - if diff: - if commit: - commit_configuration(module) - else: - discard_changes(module) - result['changed'] = True - - if module._diff: - result['diff'] = {'prepared': diff} - - module.exit_json(**result) - - -if __name__ == '__main__': - main() diff --git a/lib/ansible/modules/network/nxos/_nxos_template.py b/lib/ansible/modules/network/nxos/_nxos_template.py deleted file mode 100644 index fbe5a15079..0000000000 --- a/lib/ansible/modules/network/nxos/_nxos_template.py +++ /dev/null @@ -1,178 +0,0 @@ -#!/usr/bin/python -# -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see . -# - -ANSIBLE_METADATA = {'metadata_version': '1.0', - 'status': ['deprecated'], - 'supported_by': 'community'} - - -DOCUMENTATION = """ ---- -module: nxos_template -version_added: "2.1" -author: "Peter Sprygada (@privateip)" -short_description: Manage Cisco NXOS device configurations -description: - - Manages network device configurations over SSH or NXAPI. This module - allows implementers to work with the device running-config. It - provides a way to push a set of commands onto a network device - by evaluating the current running-config and only pushing configuration - commands that are not already configured. The config source can - be a set of commands or a template. -deprecated: Deprecated in 2.2. Use M(nxos_config) instead. -options: - src: - description: - - The path to the config source. The source can be either a - file with config or a template that will be merged during - runtime. By default the task will search for the source - file in role or playbook root folder in templates directory. - required: false - default: null - force: - description: - - The force argument instructs the module to not consider the - current devices running-config. When set to true, this will - cause the module to push the contents of I(src) into the device - without first checking if already configured. - required: false - default: false - choices: [ "true", "false" ] - include_defaults: - description: - - The module, by default, will collect the current device - running-config to use as a base for comparisons to the commands - in I(src). Setting this value to true will cause the module - to issue the command C(show running-config all) to include all - device settings. - required: false - default: false - choices: [ "true", "false" ] - backup: - description: - - When this argument is configured true, the module will backup - the running-config from the node prior to making any changes. - The backup file will be written to backup_{{ hostname }} in - the root of the playbook directory. - required: false - default: false - choices: [ "true", "false" ] - config: - description: - - The module, by default, will connect to the remote device and - retrieve the current running-config to use as a base for comparing - against the contents of source. There are times when it is not - desirable to have the task get the current running-config for - every task in a playbook. The I(config) argument allows the - implementer to pass in the configuration to use as the base - config for comparison. - required: false - default: null -""" - -EXAMPLES = """ -- name: push a configuration onto the device - nxos_template: - src: config.j2 - -- name: forceable push a configuration onto the device - nxos_template: - src: config.j2 - force: yes - -- name: provide the base configuration for comparison - nxos_template: - src: candidate_config.txt - config: current_config.txt -""" - -RETURN = """ -updates: - description: The set of commands that will be pushed to the remote device - returned: always - type: list - sample: ['...', '...'] - -responses: - description: The set of responses from issuing the commands on the device - returned: when not check_mode - type: list - sample: ['...', '...'] -""" -from ansible.module_utils.nxos import load_config, get_config -from ansible.module_utils.nxos import nxos_argument_spec -from ansible.module_utils.basic import AnsibleModule -from ansible.module_utils.netcfg import NetworkConfig, dumps - -def get_current_config(module): - config = module.params.get('config') - if not config and not module.params['force']: - flags = [] - if module.params['include_defaults']: - flags.append('all') - config = get_config(module, flags) - return config - -def main(): - """ main entry point for module execution - """ - argument_spec = dict( - src=dict(), - force=dict(default=False, type='bool'), - include_defaults=dict(default=True, type='bool'), - backup=dict(default=False, type='bool'), - config=dict(), - ) - - argument_spec.update(nxos_argument_spec) - - mutually_exclusive = [('config', 'backup'), ('config', 'force')] - - module = AnsibleModule(argument_spec=argument_spec, - mutually_exclusive=mutually_exclusive, - supports_check_mode=True) - - result = dict(changed=False) - - candidate = NetworkConfig(contents=module.params['src'], indent=2) - - contents = get_current_config(module) - if contents: - config = NetworkConfig(contents=contents, indent=2) - result['__backup__'] = str(contents) - - if not module.params['force']: - commands = candidate.difference(config) - commands = dumps(commands, 'commands').split('\n') - commands = [str(c) for c in commands if c] - else: - commands = str(candidate).split('\n') - - if commands: - if not module.check_mode: - load_config(module, commands) - result['changed'] = True - - result['updates'] = commands - result['commands'] = commands - - module.exit_json(**result) - - -if __name__ == '__main__': - main() diff --git a/lib/ansible/modules/network/openswitch/_ops_template.py b/lib/ansible/modules/network/openswitch/_ops_template.py deleted file mode 100644 index c74b8a7c09..0000000000 --- a/lib/ansible/modules/network/openswitch/_ops_template.py +++ /dev/null @@ -1,227 +0,0 @@ -#!/usr/bin/python -# -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see . -# -ANSIBLE_METADATA = {'metadata_version': '1.0', - 'status': ['deprecated'], - 'supported_by': 'community'} - - - -DOCUMENTATION = """ ---- -module: ops_template -version_added: "2.1" -author: "Peter Sprygada (@privateip)" -short_description: Push configuration to OpenSwitch -description: - - The OpenSwitch platform provides a library for pushing JSON structured - configuration files into the current running-config. This module - will read the current configuration from OpenSwitch and compare it - against a provided candidate configuration. If there are changes, the - candidate configuration is merged with the current configuration and - pushed into OpenSwitch -deprecated: Deprecated in 2.2. Use M(ops_config) instead. -extends_documentation_fragment: openswitch -options: - src: - description: - - The path to the config source. The source can be either a - file with config or a template that will be merged during - runtime. By default the task will search for the source - file in role or playbook root folder in templates directory. - required: true - force: - description: - - The force argument instructs the module to not consider the - current devices running-config. When set to true, this will - cause the module to push the contents of I(src) into the device - without first checking if already configured. - required: false - default: false - choices: ['yes', 'no'] - backup: - description: - - When this argument is configured true, the module will backup - the running-config from the node prior to making any changes. - The backup file will be written to backups/ in - the root of the playbook directory. - required: false - default: false - choices: ['yes', 'no'] - config: - description: - - The module, by default, will connect to the remote device and - retrieve the current running-config to use as a base for comparing - against the contents of source. There are times when it is not - desirable to have the task get the current running-config for - every task in a playbook. The I(config) argument allows the - implementer to pass in the configuration to use as the base - config for comparison. - required: false - default: null -""" - -EXAMPLES = """ -- name: set hostname with file lookup - ops_template: - src: ./hostname.json - backup: yes - remote_user: admin - become: yes - -- name: set hostname with var - ops_template: - src: "{{ config }}" - remote_user: admin - become: yes -""" - -RETURN = """ -updates: - description: The list of configuration updates to be merged - returned: always - type: dict - sample: {obj, obj} -responses: - description: returns the responses when configuring using cli - returned: when transport == cli - type: list - sample: [...] -""" - -import ansible.module_utils.openswitch -from ansible.module_utils.netcfg import NetworkConfig, dumps -from ansible.module_utils.network import NetworkModule -from ansible.module_utils.openswitch import HAS_OPS - - -def get_config(module): - config = module.params['config'] or dict() - if not config and not module.params['force']: - config = module.config.get_config() - return config - - -def sort(val): - if isinstance(val, (list, set)): - return sorted(val) - return val - - -def diff(this, other, path=None): - updates = list() - path = path or list() - for key, value in this.items(): - if key not in other: - other_value = other.get(key) - updates.append((list(path), key, value, other_value)) - else: - if isinstance(this[key], dict): - path.append(key) - updates.extend(diff(this[key], other[key], list(path))) - path.pop() - else: - other_value = other.get(key) - if sort(this[key]) != sort(other_value): - updates.append((list(path), key, value, other_value)) - return updates - - -def merge(changeset, config=None): - config = config or dict() - for path, key, value, _ in changeset: - current_level = config - for part in path: - if part not in current_level: - current_level[part] = dict() - current_level = current_level[part] - current_level[key] = value - return config - -def main(): - """ main entry point for module execution - """ - - argument_spec = dict( - src=dict(type='str'), - force=dict(default=False, type='bool'), - backup=dict(default=False, type='bool'), - config=dict(type='dict'), - ) - - mutually_exclusive = [('config', 'backup'), ('config', 'force')] - - module = NetworkModule(argument_spec=argument_spec, - mutually_exclusive=mutually_exclusive, - supports_check_mode=True) - - if not module.params['transport'] and not HAS_OPS: - module.fail_json(msg='unable to import ops.dc library') - - result = dict(changed=False) - - contents = get_config(module) - result['_backup'] = contents - - if module.params['transport'] in ['ssh', 'rest']: - config = contents - - try: - src = module.from_json(module.params['src']) - except ValueError: - module.fail_json(msg='unable to load src due to json parsing error') - - changeset = diff(src, config) - candidate = merge(changeset, config) - - updates = dict() - for path, key, new_value, old_value in changeset: - path = '%s.%s' % ('.'.join(path), key) - updates[path] = str(new_value) - result['updates'] = updates - - if changeset: - if not module.check_mode: - module.config(config) - result['changed'] = True - - else: - candidate = NetworkConfig(contents=module.params['src'], indent=4) - - if contents: - config = NetworkConfig(contents=contents, indent=4) - - if not module.params['force']: - commands = candidate.difference(config) - commands = dumps(commands, 'commands').split('\n') - commands = [str(c) for c in commands if c] - else: - commands = str(candidate).split('\n') - - if commands: - if not module.check_mode: - response = module.config(commands) - result['responses'] = response - result['changed'] = True - - result['updates'] = commands - - module.exit_json(**result) - - -if __name__ == '__main__': - main() diff --git a/lib/ansible/plugins/action/eos_template.py b/lib/ansible/plugins/action/eos_template.py deleted file mode 100644 index 9a3640e791..0000000000 --- a/lib/ansible/plugins/action/eos_template.py +++ /dev/null @@ -1,103 +0,0 @@ -# -# Copyright 2015 Peter Sprygada -# -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see . -# -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import time -import glob -import urlparse - -from ansible.module_utils._text import to_text -from ansible.plugins.action.eos import ActionModule as _ActionModule - - -class ActionModule(_ActionModule): - - def run(self, tmp=None, task_vars=None): - - try: - self._handle_template() - except (ValueError, AttributeError) as exc: - return dict(failed=True, msg=exc.message) - - result = super(ActionModule, self).run(tmp, task_vars) - - if self._task.args.get('backup') and result.get('__backup__'): - # User requested backup and no error occurred in module. - # NOTE: If there is a parameter error, __backup__ key may not be in results. - self._write_backup(task_vars['inventory_hostname'], result['__backup__']) - - if '__backup__' in result: - del result['__backup__'] - - return result - - def _get_working_path(self): - cwd = self._loader.get_basedir() - if self._task._role is not None: - cwd = self._task._role._role_path - return cwd - - def _write_backup(self, host, contents): - backup_path = self._get_working_path() + '/backup' - if not os.path.exists(backup_path): - os.mkdir(backup_path) - for fn in glob.glob('%s/%s*' % (backup_path, host)): - os.remove(fn) - tstamp = time.strftime("%Y-%m-%d@%H:%M:%S", time.localtime(time.time())) - filename = '%s/%s_config.%s' % (backup_path, host, tstamp) - open(filename, 'w').write(contents) - - def _handle_template(self): - src = self._task.args.get('src') - if not src: - raise ValueError('missing required arguments: src') - - working_path = self._get_working_path() - - if os.path.isabs(src) or urlparse.urlsplit(src).scheme: - source = src - else: - source = self._loader.path_dwim_relative(working_path, 'templates', src) - if not source: - source = self._loader.path_dwim_relative(working_path, src) - - if not os.path.exists(source): - return - - try: - with open(source, 'r') as f: - template_data = to_text(f.read()) - except IOError: - return dict(failed=True, msg='unable to load src file') - - # Create a template search path in the following order: - # [working_path, self_role_path, dependent_role_paths, dirname(source)] - searchpath = [working_path] - if self._task._role is not None: - searchpath.append(self._task._role._role_path) - if hasattr(self._task, "_block:"): - dep_chain = self._task._block.get_dep_chain() - if dep_chain is not None: - for role in dep_chain: - searchpath.append(role._role_path) - searchpath.append(os.path.dirname(source)) - self._templar.environment.loader.searchpath = searchpath - self._task.args['src'] = self._templar.template(template_data) diff --git a/lib/ansible/plugins/action/ios_template.py b/lib/ansible/plugins/action/ios_template.py deleted file mode 100644 index fd3d1b03fa..0000000000 --- a/lib/ansible/plugins/action/ios_template.py +++ /dev/null @@ -1,103 +0,0 @@ -# -# Copyright 2015 Peter Sprygada -# -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see . -# -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import time -import glob -import urlparse - -from ansible.module_utils._text import to_text -from ansible.plugins.action.ios import ActionModule as _ActionModule - - -class ActionModule(_ActionModule): - - def run(self, tmp=None, task_vars=None): - - try: - self._handle_template() - except (ValueError, AttributeError) as exc: - return dict(failed=True, msg=exc.message) - - result = super(ActionModule, self).run(tmp, task_vars) - - if self._task.args.get('backup') and result.get('__backup__'): - # User requested backup and no error occurred in module. - # NOTE: If there is a parameter error, __backup__ key may not be in results. - self._write_backup(task_vars['inventory_hostname'], result['__backup__']) - - if '__backup__' in result: - del result['__backup__'] - - return result - - def _get_working_path(self): - cwd = self._loader.get_basedir() - if self._task._role is not None: - cwd = self._task._role._role_path - return cwd - - def _write_backup(self, host, contents): - backup_path = self._get_working_path() + '/backup' - if not os.path.exists(backup_path): - os.mkdir(backup_path) - for fn in glob.glob('%s/%s*' % (backup_path, host)): - os.remove(fn) - tstamp = time.strftime("%Y-%m-%d@%H:%M:%S", time.localtime(time.time())) - filename = '%s/%s_config.%s' % (backup_path, host, tstamp) - open(filename, 'w').write(contents) - - def _handle_template(self): - src = self._task.args.get('src') - if not src: - raise ValueError('missing required arguments: src') - - working_path = self._get_working_path() - - if os.path.isabs(src) or urlparse.urlsplit(src).scheme: - source = src - else: - source = self._loader.path_dwim_relative(working_path, 'templates', src) - if not source: - source = self._loader.path_dwim_relative(working_path, src) - - if not os.path.exists(source): - return - - try: - with open(source, 'r') as f: - template_data = to_text(f.read()) - except IOError: - return dict(failed=True, msg='unable to load src file') - - # Create a template search path in the following order: - # [working_path, self_role_path, dependent_role_paths, dirname(source)] - searchpath = [working_path] - if self._task._role is not None: - searchpath.append(self._task._role._role_path) - if hasattr(self._task, "_block:"): - dep_chain = self._task._block.get_dep_chain() - if dep_chain is not None: - for role in dep_chain: - searchpath.append(role._role_path) - searchpath.append(os.path.dirname(source)) - self._templar.environment.loader.searchpath = searchpath - self._task.args['src'] = self._templar.template(template_data) diff --git a/lib/ansible/plugins/action/iosxr_template.py b/lib/ansible/plugins/action/iosxr_template.py deleted file mode 100644 index 0915149ca8..0000000000 --- a/lib/ansible/plugins/action/iosxr_template.py +++ /dev/null @@ -1,103 +0,0 @@ -# -# Copyright 2015 Peter Sprygada -# -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see . -# -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import time -import glob -import urlparse - -from ansible.module_utils._text import to_text -from ansible.plugins.action.iosxr import ActionModule as _ActionModule - - -class ActionModule(_ActionModule): - - def run(self, tmp=None, task_vars=None): - - try: - self._handle_template() - except (ValueError, AttributeError) as exc: - return dict(failed=True, msg=exc.message) - - result = super(ActionModule, self).run(tmp, task_vars) - - if self._task.args.get('backup') and result.get('__backup__'): - # User requested backup and no error occurred in module. - # NOTE: If there is a parameter error, __backup__ key may not be in results. - self._write_backup(task_vars['inventory_hostname'], result['__backup__']) - - if '__backup__' in result: - del result['__backup__'] - - return result - - def _get_working_path(self): - cwd = self._loader.get_basedir() - if self._task._role is not None: - cwd = self._task._role._role_path - return cwd - - def _write_backup(self, host, contents): - backup_path = self._get_working_path() + '/backup' - if not os.path.exists(backup_path): - os.mkdir(backup_path) - for fn in glob.glob('%s/%s*' % (backup_path, host)): - os.remove(fn) - tstamp = time.strftime("%Y-%m-%d@%H:%M:%S", time.localtime(time.time())) - filename = '%s/%s_config.%s' % (backup_path, host, tstamp) - open(filename, 'w').write(contents) - - def _handle_template(self): - src = self._task.args.get('src') - if not src: - raise ValueError('missing required arguments: src') - - working_path = self._get_working_path() - - if os.path.isabs(src) or urlparse.urlsplit(src).scheme: - source = src - else: - source = self._loader.path_dwim_relative(working_path, 'templates', src) - if not source: - source = self._loader.path_dwim_relative(working_path, src) - - if not os.path.exists(source): - return - - try: - with open(source, 'r') as f: - template_data = to_text(f.read()) - except IOError: - return dict(failed=True, msg='unable to load src file') - - # Create a template search path in the following order: - # [working_path, self_role_path, dependent_role_paths, dirname(source)] - searchpath = [working_path] - if self._task._role is not None: - searchpath.append(self._task._role._role_path) - if hasattr(self._task, "_block:"): - dep_chain = self._task._block.get_dep_chain() - if dep_chain is not None: - for role in dep_chain: - searchpath.append(role._role_path) - searchpath.append(os.path.dirname(source)) - self._templar.environment.loader.searchpath = searchpath - self._task.args['src'] = self._templar.template(template_data) diff --git a/lib/ansible/plugins/action/junos_template.py b/lib/ansible/plugins/action/junos_template.py deleted file mode 100644 index 55e785cdb1..0000000000 --- a/lib/ansible/plugins/action/junos_template.py +++ /dev/null @@ -1,118 +0,0 @@ -# -# (c) 2017 Red Hat, Inc. -# -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see . -# -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import time -import glob -import urlparse - -from ansible.module_utils._text import to_text -from ansible.plugins.action.junos import ActionModule as _ActionModule - - -class ActionModule(_ActionModule): - - def run(self, tmp=None, task_vars=None): - - src = self._task.args.get('src') - - if self._task.args.get('config_format') is None: - if src.endswith('.xml'): - fmt = 'xml' - elif src.endswith('.set'): - fmt = 'set' - else: - fmt = 'text' - - self._task.args['config_format'] = fmt - - if self._task.args.get('comment') is None: - self._task.args['comment'] = self._task.name - - try: - self._handle_template() - except (ValueError, AttributeError) as exc: - return dict(failed=True, msg=exc.message) - - result = super(ActionModule, self).run(tmp, task_vars) - - if self._task.args.get('backup') and result.get('__backup__'): - # User requested backup and no error occurred in module. - # NOTE: If there is a parameter error, __backup__ key may not be in results. - self._write_backup(task_vars['inventory_hostname'], result['__backup__']) - - if '__backup__' in result: - del result['__backup__'] - - return result - - def _get_working_path(self): - cwd = self._loader.get_basedir() - if self._task._role is not None: - cwd = self._task._role._role_path - return cwd - - def _write_backup(self, host, contents): - backup_path = self._get_working_path() + '/backup' - if not os.path.exists(backup_path): - os.mkdir(backup_path) - for fn in glob.glob('%s/%s*' % (backup_path, host)): - os.remove(fn) - tstamp = time.strftime("%Y-%m-%d@%H:%M:%S", time.localtime(time.time())) - filename = '%s/%s_config.%s' % (backup_path, host, tstamp) - open(filename, 'w').write(contents) - - def _handle_template(self): - src = self._task.args.get('src') - if not src: - raise ValueError('missing required arguments: src') - - working_path = self._get_working_path() - - if os.path.isabs(src) or urlparse.urlsplit(src).scheme: - source = src - else: - source = self._loader.path_dwim_relative(working_path, 'templates', src) - if not source: - source = self._loader.path_dwim_relative(working_path, src) - - if not os.path.exists(source): - return - - try: - with open(source, 'r') as f: - template_data = to_text(f.read()) - except IOError: - return dict(failed=True, msg='unable to load src file') - - # Create a template search path in the following order: - # [working_path, self_role_path, dependent_role_paths, dirname(source)] - searchpath = [working_path] - if self._task._role is not None: - searchpath.append(self._task._role._role_path) - if hasattr(self._task, "_block:"): - dep_chain = self._task._block.get_dep_chain() - if dep_chain is not None: - for role in dep_chain: - searchpath.append(role._role_path) - searchpath.append(os.path.dirname(source)) - self._templar.environment.loader.searchpath = searchpath - self._task.args['src'] = self._templar.template(template_data) diff --git a/lib/ansible/plugins/action/net_template.py b/lib/ansible/plugins/action/net_template.py deleted file mode 100644 index 6d50135d31..0000000000 --- a/lib/ansible/plugins/action/net_template.py +++ /dev/null @@ -1,103 +0,0 @@ -# -# (c) 2016 Red Hat Inc. -# -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see . -# -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import time -import glob -import urlparse - -from ansible.module_utils._text import to_text -from ansible.plugins.action.normal import ActionModule as _ActionModule - - -class ActionModule(_ActionModule): - - def run(self, tmp=None, task_vars=None): - - try: - self._handle_template() - except (ValueError, AttributeError) as exc: - return dict(failed=True, msg=exc.message) - - result = super(ActionModule, self).run(tmp, task_vars) - - if self._task.args.get('backup') and result.get('__backup__'): - # User requested backup and no error occurred in module. - # NOTE: If there is a parameter error, __backup__ key may not be in results. - self._write_backup(task_vars['inventory_hostname'], result['__backup__']) - - if '__backup__' in result: - del result['__backup__'] - - return result - - def _get_working_path(self): - cwd = self._loader.get_basedir() - if self._task._role is not None: - cwd = self._task._role._role_path - return cwd - - def _write_backup(self, host, contents): - backup_path = self._get_working_path() + '/backup' - if not os.path.exists(backup_path): - os.mkdir(backup_path) - for fn in glob.glob('%s/%s*' % (backup_path, host)): - os.remove(fn) - tstamp = time.strftime("%Y-%m-%d@%H:%M:%S", time.localtime(time.time())) - filename = '%s/%s_config.%s' % (backup_path, host, tstamp) - open(filename, 'w').write(contents) - - def _handle_template(self): - src = self._task.args.get('src') - if not src: - raise ValueError('missing required arguments: src') - - working_path = self._get_working_path() - - if os.path.isabs(src) or urlparse.urlsplit(src).scheme: - source = src - else: - source = self._loader.path_dwim_relative(working_path, 'templates', src) - if not source: - source = self._loader.path_dwim_relative(working_path, src) - - if not os.path.exists(source): - return - - try: - with open(source, 'r') as f: - template_data = to_text(f.read()) - except IOError: - return dict(failed=True, msg='unable to load src file') - - # Create a template search path in the following order: - # [working_path, self_role_path, dependent_role_paths, dirname(source)] - searchpath = [working_path] - if self._task._role is not None: - searchpath.append(self._task._role._role_path) - if hasattr(self._task, "_block:"): - dep_chain = self._task._block.get_dep_chain() - if dep_chain is not None: - for role in dep_chain: - searchpath.append(role._role_path) - searchpath.append(os.path.dirname(source)) - self._templar.environment.loader.searchpath = searchpath - self._task.args['src'] = self._templar.template(template_data) diff --git a/lib/ansible/plugins/action/nxos_template.py b/lib/ansible/plugins/action/nxos_template.py deleted file mode 100644 index da0da20b2e..0000000000 --- a/lib/ansible/plugins/action/nxos_template.py +++ /dev/null @@ -1,103 +0,0 @@ -# -# Copyright 2015 Peter Sprygada -# -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see . -# -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import os -import time -import glob - -from ansible.module_utils._text import to_text -from ansible.module_utils.six.moves.urllib.parse import urlsplit -from ansible.plugins.action.nxos import ActionModule as _ActionModule - - -class ActionModule(_ActionModule): - - def run(self, tmp=None, task_vars=None): - - try: - self._handle_template() - except (ValueError, AttributeError) as exc: - return dict(failed=True, msg=str(exc)) - - result = super(ActionModule, self).run(tmp, task_vars) - - if self._task.args.get('backup') and result.get('__backup__'): - # User requested backup and no error occurred in module. - # NOTE: If there is a parameter error, __backup__ key may not be in results. - self._write_backup(task_vars['inventory_hostname'], result['__backup__']) - - if '__backup__' in result: - del result['__backup__'] - - return result - - def _get_working_path(self): - cwd = self._loader.get_basedir() - if self._task._role is not None: - cwd = self._task._role._role_path - return cwd - - def _write_backup(self, host, contents): - backup_path = self._get_working_path() + '/backup' - if not os.path.exists(backup_path): - os.mkdir(backup_path) - for fn in glob.glob('%s/%s*' % (backup_path, host)): - os.remove(fn) - tstamp = time.strftime("%Y-%m-%d@%H:%M:%S", time.localtime(time.time())) - filename = '%s/%s_config.%s' % (backup_path, host, tstamp) - open(filename, 'w').write(contents) - - def _handle_template(self): - src = self._task.args.get('src') - if not src: - raise ValueError('missing required arguments: src') - - working_path = self._get_working_path() - - if os.path.isabs(src) or urlsplit(src).scheme: - source = src - else: - source = self._loader.path_dwim_relative(working_path, 'templates', src) - if not source: - source = self._loader.path_dwim_relative(working_path, src) - - if not os.path.exists(source): - return - - try: - with open(source, 'r') as f: - template_data = to_text(f.read()) - except IOError: - return dict(failed=True, msg='unable to load src file') - - # Create a template search path in the following order: - # [working_path, self_role_path, dependent_role_paths, dirname(source)] - searchpath = [working_path] - if self._task._role is not None: - searchpath.append(self._task._role._role_path) - if hasattr(self._task, "_block:"): - dep_chain = self._task._block.get_dep_chain() - if dep_chain is not None: - for role in dep_chain: - searchpath.append(role._role_path) - searchpath.append(os.path.dirname(source)) - self._templar.environment.loader.searchpath = searchpath - self._task.args['src'] = self._templar.template(template_data) diff --git a/lib/ansible/plugins/action/ops_template.py b/lib/ansible/plugins/action/ops_template.py deleted file mode 100644 index d235f9f1a3..0000000000 --- a/lib/ansible/plugins/action/ops_template.py +++ /dev/null @@ -1,50 +0,0 @@ -# -# Copyright 2015 Peter Sprygada -# -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see . -# -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import json - -from ansible.module_utils.six import string_types -from ansible.plugins.action import ActionBase -from ansible.plugins.action.net_template import ActionModule as NetActionModule - - -class ActionModule(NetActionModule, ActionBase): - - def run(self, tmp=None, task_vars=None): - if self._connection.transport == 'local': - return super(ActionModule, self).run(tmp, task_vars) - - result = dict(changed=False) - - if isinstance(self._task.args['src'], string_types): - self._handle_template() - - result.update(self._execute_module(module_name=self._task.action, - module_args=self._task.args, task_vars=task_vars)) - - if self._task.args.get('backup') and result.get('_backup'): - contents = json.dumps(result['_backup'], indent=4) - self._write_backup(task_vars['inventory_hostname'], contents) - - if '_backup' in result: - del result['_backup'] - - return result diff --git a/test/integration/eos.yaml b/test/integration/eos.yaml index bab6a456bc..adccf78b64 100644 --- a/test/integration/eos.yaml +++ b/test/integration/eos.yaml @@ -40,15 +40,6 @@ failed_modules: "{{ failed_modules }} + [ 'eos_config' ]" test_failed: true - - block: - - include_role: - name: eos_template - when: "limit_to in ['*', 'eos_template']" - rescue: - - set_fact: - failed_modules: "{{ failed_modules }} + [ 'eos_template' ]" - test_failed: true - - block: - include_role: name: eos_facts diff --git a/test/integration/ios.yaml b/test/integration/ios.yaml index 84be8bd83e..d63499ddd2 100644 --- a/test/integration/ios.yaml +++ b/test/integration/ios.yaml @@ -49,15 +49,6 @@ failed_modules: "{{ failed_modules }} + [ 'ios_facts' ]" test_failed: true - - block: - - include_role: - name: ios_template - when: "limit_to in ['*', 'ios_template']" - rescue: - - set_fact: - failed_modules: "{{ failed_modules }} + [ 'ios_template' ]" - test_failed: true - - block: - include_role: name: ios_system diff --git a/test/integration/iosxr.yaml b/test/integration/iosxr.yaml index 7110e7d518..cba9a89c30 100644 --- a/test/integration/iosxr.yaml +++ b/test/integration/iosxr.yaml @@ -42,15 +42,6 @@ failed_modules: "{{ failed_modules }} + [ 'iosxr_facts' ]" test_failed: true - - block: - - include_role: - name: iosxr_template - when: "limit_to in ['*', 'iosxr_template']" - rescue: - - set_fact: - failed_modules: "{{ failed_modules }} + [ 'iosxr_template' ]" - test_failed: true - - block: - include_role: name: iosxr_system diff --git a/test/integration/junos.yaml b/test/integration/junos.yaml index 1cf8ed000a..a410ff947d 100644 --- a/test/integration/junos.yaml +++ b/test/integration/junos.yaml @@ -61,14 +61,6 @@ failed_modules: "{{ failed_modules }} + [ 'junos_rpc' ]" test_failed: true - - block: - - include_role: - name: junos_template - when: "limit_to in ['*', 'junos_template']" - rescue: - - set_fact: - failed_modules: "{{ failed_modules }} + [ 'junos_template' ]" - test_failed: true - block: - include_role: name: junos_vlan diff --git a/test/integration/nxos.yaml b/test/integration/nxos.yaml index a7c509cdee..b5e353b0cb 100644 --- a/test/integration/nxos.yaml +++ b/test/integration/nxos.yaml @@ -42,15 +42,6 @@ failed_modules: "{{ failed_modules }} + [ 'nxos_facts' ]" test_failed: true - - block: - - include_role: - name: nxos_template - when: "limit_to in ['*', 'nxos_template']" - rescue: - - set_fact: - failed_modules: "{{ failed_modules }} + [ 'nxos_template' ]" - test_failed: true - - block: - include_role: name: nxos_nxapi diff --git a/test/integration/targets/eos_template/defaults/main.yaml b/test/integration/targets/eos_template/defaults/main.yaml deleted file mode 100644 index 5f709c5aac..0000000000 --- a/test/integration/targets/eos_template/defaults/main.yaml +++ /dev/null @@ -1,2 +0,0 @@ ---- -testcase: "*" diff --git a/test/integration/targets/eos_template/meta/main.yml b/test/integration/targets/eos_template/meta/main.yml deleted file mode 100644 index e5c8cd02f0..0000000000 --- a/test/integration/targets/eos_template/meta/main.yml +++ /dev/null @@ -1,2 +0,0 @@ -dependencies: - - prepare_eos_tests diff --git a/test/integration/targets/eos_template/tasks/cli.yaml b/test/integration/targets/eos_template/tasks/cli.yaml deleted file mode 100644 index d675462dd0..0000000000 --- a/test/integration/targets/eos_template/tasks/cli.yaml +++ /dev/null @@ -1,15 +0,0 @@ ---- -- name: collect all cli test cases - find: - paths: "{{ role_path }}/tests/cli" - patterns: "{{ testcase }}.yaml" - register: test_cases - -- name: set test_items - set_fact: test_items="{{ test_cases.files | map(attribute='path') | list }}" - -- name: run test case - include: "{{ test_case_to_run }}" - with_items: "{{ test_items }}" - loop_control: - loop_var: test_case_to_run diff --git a/test/integration/targets/eos_template/tasks/eapi.yaml b/test/integration/targets/eos_template/tasks/eapi.yaml deleted file mode 100644 index 00a159a98e..0000000000 --- a/test/integration/targets/eos_template/tasks/eapi.yaml +++ /dev/null @@ -1,28 +0,0 @@ ---- -- name: collect all eapi test cases - find: - paths: "{{ role_path }}/tests/eapi" - patterns: "{{ testcase }}.yaml" - register: test_cases - -- name: set test_items - set_fact: test_items="{{ test_cases.files | map(attribute='path') | list }}" - -- name: enable eapi - eos_eapi: - http: yes - https: yes - local_http: no - enable_socket: yes - provider: "{{ cli }}" - -- name: run test case - include: "{{ test_case_to_run }}" - with_items: "{{ test_items }}" - loop_control: - loop_var: test_case_to_run - -- name: disable eapi - eos_eapi: - state: stopped - provider: "{{ cli }}" diff --git a/test/integration/targets/eos_template/tasks/main.yaml b/test/integration/targets/eos_template/tasks/main.yaml deleted file mode 100644 index 970e74171e..0000000000 --- a/test/integration/targets/eos_template/tasks/main.yaml +++ /dev/null @@ -1,3 +0,0 @@ ---- -- { include: cli.yaml, tags: ['cli'] } -- { include: eapi.yaml, tags: ['eapi'] } diff --git a/test/integration/targets/eos_template/templates/basic/config.j2 b/test/integration/targets/eos_template/templates/basic/config.j2 deleted file mode 100644 index 82a61b62df..0000000000 --- a/test/integration/targets/eos_template/templates/basic/config.j2 +++ /dev/null @@ -1,4 +0,0 @@ -interface Ethernet2 - description this is a test - shutdown - diff --git a/test/integration/targets/eos_template/templates/config.js b/test/integration/targets/eos_template/templates/config.js deleted file mode 100644 index 865b0545ad..0000000000 --- a/test/integration/targets/eos_template/templates/config.js +++ /dev/null @@ -1,4 +0,0 @@ -interface Ethernet2 - description test description from ansible - shutdown - diff --git a/test/integration/targets/eos_template/templates/defaults/config.j2 b/test/integration/targets/eos_template/templates/defaults/config.j2 deleted file mode 100644 index 8ff8f305c0..0000000000 --- a/test/integration/targets/eos_template/templates/defaults/config.j2 +++ /dev/null @@ -1,3 +0,0 @@ -interface Ethernet2 - description this is a test - no shutdown diff --git a/test/integration/targets/eos_template/templates/defaults/test.j2 b/test/integration/targets/eos_template/templates/defaults/test.j2 deleted file mode 100644 index 82a61b62df..0000000000 --- a/test/integration/targets/eos_template/templates/defaults/test.j2 +++ /dev/null @@ -1,4 +0,0 @@ -interface Ethernet2 - description this is a test - shutdown - diff --git a/test/integration/targets/eos_template/tests/cli/backup.yaml b/test/integration/targets/eos_template/tests/cli/backup.yaml deleted file mode 100644 index 261e5004c6..0000000000 --- a/test/integration/targets/eos_template/tests/cli/backup.yaml +++ /dev/null @@ -1,50 +0,0 @@ ---- -- debug: msg="START cli/backup.yaml" - -- name: setup - eos_config: - commands: - - no description - - no shutdown - parents: - - interface Ethernet2 - match: none - provider: "{{ cli }}" - -- name: collect any backup files - find: - paths: "{{ role_path }}/backup" - pattern: "{{ inventory_hostname_short }}_config*" - register: backup_files - delegate_to: localhost - -- name: delete backup files - file: - path: "{{ item.path }}" - state: absent - with_items: "{{backup_files.files|default([])}}" - -- name: configure device with config - eos_template: - src: basic/config.j2 - backup: yes - provider: "{{ cli }}" - register: result - -- assert: - that: - - "result.changed == true" - - "result.updates is defined" - -- name: collect any backup files - find: - paths: "{{ role_path }}/backup" - pattern: "{{ inventory_hostname_short }}_config*" - register: backup_files - delegate_to: localhost - -- assert: - that: - - "backup_files.files is defined" - -- debug: msg="END cli/backup.yaml" diff --git a/test/integration/targets/eos_template/tests/cli/basic.yaml b/test/integration/targets/eos_template/tests/cli/basic.yaml deleted file mode 100644 index c98dc1414b..0000000000 --- a/test/integration/targets/eos_template/tests/cli/basic.yaml +++ /dev/null @@ -1,36 +0,0 @@ ---- -- debug: msg="START cli/basic.yaml" - -- name: setup - eos_config: - commands: - - no description - - no shutdown - parents: - - interface Ethernet2 - match: none - provider: "{{ cli }}" - -- name: configure device with config - eos_template: - src: basic/config.j2 - provider: "{{ cli }}" - register: result - -- assert: - that: - - "result.changed == true" - - "result.updates is defined" - -- name: check device with config - eos_template: - src: basic/config.j2 - provider: "{{ cli }}" - register: result - -- assert: - that: - - "result.changed == false" - - "result.updates is defined" - -- debug: msg="END cli/basic.yaml" diff --git a/test/integration/targets/eos_template/tests/cli/defaults.yaml b/test/integration/targets/eos_template/tests/cli/defaults.yaml deleted file mode 100644 index d3354b2c32..0000000000 --- a/test/integration/targets/eos_template/tests/cli/defaults.yaml +++ /dev/null @@ -1,42 +0,0 @@ ---- -- debug: msg="START cli/defaults.yaml" - -- name: setup - eos_config: - commands: - - no description - - shutdown - parents: - - interface Ethernet2 - match: none - provider: "{{ cli }}" - -- name: configure device with defaults included - eos_template: - src: defaults/config.j2 - include_defaults: yes - provider: "{{ cli }}" - register: result - -- debug: var=result - -- assert: - that: - - "result.changed == true" - - "result.updates is defined" - -- name: check device with defaults included - eos_template: - src: defaults/config.j2 - include_defaults: yes - provider: "{{ cli }}" - register: result - -- debug: var=result - -- assert: - that: - - "result.changed == false" - - "result.updates is defined" - -- debug: msg="END cli/defaults.yaml" diff --git a/test/integration/targets/eos_template/tests/cli/force.yaml b/test/integration/targets/eos_template/tests/cli/force.yaml deleted file mode 100644 index ad8f660c52..0000000000 --- a/test/integration/targets/eos_template/tests/cli/force.yaml +++ /dev/null @@ -1,38 +0,0 @@ ---- -- debug: msg="START cli/force.yaml" - -- name: setup - eos_config: - commands: - - no description - - no shutdown - parents: - - interface Ethernet2 - match: none - provider: "{{ cli }}" - -- name: configure device with config - eos_template: - src: basic/config.j2 - provider: "{{ cli }}" - force: yes - register: result - -- assert: - that: - - "result.changed == true" - - "result.updates is defined" - -- name: check device with config - eos_template: - src: basic/config.j2 - provider: "{{ cli }}" - force: yes - register: result - -- assert: - that: - - "result.changed == true" - - "result.updates is defined" - -- debug: msg="END cli/force.yaml" diff --git a/test/integration/targets/eos_template/tests/eapi/backup.yaml b/test/integration/targets/eos_template/tests/eapi/backup.yaml deleted file mode 100644 index 576dfe0d92..0000000000 --- a/test/integration/targets/eos_template/tests/eapi/backup.yaml +++ /dev/null @@ -1,50 +0,0 @@ ---- -- debug: msg="START eapi/backup.yaml" - -- name: setup - eos_config: - commands: - - no description - - no shutdown - parents: - - interface Ethernet2 - match: none - provider: "{{ eapi }}" - -- name: collect any backup files - find: - paths: "{{ role_path }}/backup" - pattern: "{{ inventory_hostname_short }}_config*" - register: backup_files - delegate_to: localhost - -- name: delete backup files - file: - path: "{{ item.path }}" - state: absent - with_items: "{{backup_files.files|default([])}}" - -- name: configure device with config - eos_template: - src: basic/config.j2 - backup: yes - provider: "{{ eapi }}" - register: result - -- assert: - that: - - "result.changed == true" - - "result.updates is defined" - -- name: collect any backup files - find: - paths: "{{ role_path }}/backup" - pattern: "{{ inventory_hostname_short }}_config*" - register: backup_files - delegate_to: localhost - -- assert: - that: - - "backup_files.files is defined" - -- debug: msg="END eapi/backup.yaml" diff --git a/test/integration/targets/eos_template/tests/eapi/basic.yaml b/test/integration/targets/eos_template/tests/eapi/basic.yaml deleted file mode 100644 index 139e7ce2ee..0000000000 --- a/test/integration/targets/eos_template/tests/eapi/basic.yaml +++ /dev/null @@ -1,36 +0,0 @@ ---- -- debug: msg="START eapi/basic.yaml" - -- name: setup - eos_config: - commands: - - no description - - no shutdown - parents: - - interface Ethernet2 - match: none - provider: "{{ eapi }}" - -- name: configure device with config - eos_template: - src: basic/config.j2 - provider: "{{ eapi }}" - register: result - -- assert: - that: - - "result.changed == true" - - "result.updates is defined" - -- name: check device with config - eos_template: - src: basic/config.j2 - provider: "{{ eapi }}" - register: result - -- assert: - that: - - "result.changed == false" - - "result.updates is defined" - -- debug: msg="END eapi/basic.yaml" diff --git a/test/integration/targets/eos_template/tests/eapi/defaults.yaml b/test/integration/targets/eos_template/tests/eapi/defaults.yaml deleted file mode 100644 index 43bf6b8c95..0000000000 --- a/test/integration/targets/eos_template/tests/eapi/defaults.yaml +++ /dev/null @@ -1,42 +0,0 @@ ---- -- debug: msg="START eapi/defaults.yaml" - -- name: setup - eos_config: - commands: - - no description - - shutdown - parents: - - interface Ethernet2 - match: none - provider: "{{ eapi }}" - -- name: configure device with defaults included - eos_template: - src: defaults/config.j2 - include_defaults: yes - provider: "{{ eapi }}" - register: result - -#- debug: var=result - -- assert: - that: - - "result.changed == true" - - "result.updates is defined" - -- name: check device with defaults included - eos_template: - src: defaults/config.j2 - include_defaults: yes - provider: "{{ eapi }}" - register: result - -#- debug: var=result - -- assert: - that: - - "result.changed == false" - - "result.updates is defined" - -- debug: msg="END eapi/defaults.yaml" diff --git a/test/integration/targets/eos_template/tests/eapi/force.yaml b/test/integration/targets/eos_template/tests/eapi/force.yaml deleted file mode 100644 index b97eb938a0..0000000000 --- a/test/integration/targets/eos_template/tests/eapi/force.yaml +++ /dev/null @@ -1,38 +0,0 @@ ---- -- debug: msg="START eapi/force.yaml" - -- name: setup - eos_config: - commands: - - no description - - no shutdown - parents: - - interface Ethernet2 - match: none - provider: "{{ eapi }}" - -- name: configure device with config - eos_template: - src: basic/config.j2 - provider: "{{ eapi }}" - force: yes - register: result - -- assert: - that: - - "result.changed == true" - - "result.updates is defined" - -- name: check device with config - eos_template: - src: basic/config.j2 - provider: "{{ eapi }}" - force: yes - register: result - -- assert: - that: - - "result.changed == true" - - "result.updates is defined" - -- debug: msg="END eapi/force.yaml" diff --git a/test/integration/targets/ios_template/defaults/main.yaml b/test/integration/targets/ios_template/defaults/main.yaml deleted file mode 100644 index 9ef5ba5165..0000000000 --- a/test/integration/targets/ios_template/defaults/main.yaml +++ /dev/null @@ -1,3 +0,0 @@ ---- -testcase: "*" -test_items: [] diff --git a/test/integration/targets/ios_template/meta/main.yml b/test/integration/targets/ios_template/meta/main.yml deleted file mode 100644 index 159cea8d38..0000000000 --- a/test/integration/targets/ios_template/meta/main.yml +++ /dev/null @@ -1,2 +0,0 @@ -dependencies: - - prepare_ios_tests diff --git a/test/integration/targets/ios_template/tasks/cli.yaml b/test/integration/targets/ios_template/tasks/cli.yaml deleted file mode 100644 index 46d86dd698..0000000000 --- a/test/integration/targets/ios_template/tasks/cli.yaml +++ /dev/null @@ -1,16 +0,0 @@ ---- -- name: collect all cli test cases - find: - paths: "{{ role_path }}/tests/cli" - patterns: "{{ testcase }}.yaml" - register: test_cases - delegate_to: localhost - -- name: set test_items - set_fact: test_items="{{ test_cases.files | map(attribute='path') | list }}" - -- name: run test case - include: "{{ test_case_to_run }}" - with_items: "{{ test_items }}" - loop_control: - loop_var: test_case_to_run diff --git a/test/integration/targets/ios_template/tasks/main.yaml b/test/integration/targets/ios_template/tasks/main.yaml deleted file mode 100644 index 415c99d8b1..0000000000 --- a/test/integration/targets/ios_template/tasks/main.yaml +++ /dev/null @@ -1,2 +0,0 @@ ---- -- { include: cli.yaml, tags: ['cli'] } diff --git a/test/integration/targets/ios_template/templates/basic/config.j2 b/test/integration/targets/ios_template/templates/basic/config.j2 deleted file mode 100644 index 06f9848883..0000000000 --- a/test/integration/targets/ios_template/templates/basic/config.j2 +++ /dev/null @@ -1,4 +0,0 @@ -interface Loopback999 - description this is a test - shutdown - diff --git a/test/integration/targets/ios_template/templates/defaults/config.j2 b/test/integration/targets/ios_template/templates/defaults/config.j2 deleted file mode 100644 index 1d4d9da8d4..0000000000 --- a/test/integration/targets/ios_template/templates/defaults/config.j2 +++ /dev/null @@ -1,4 +0,0 @@ -interface Loopback999 - description this is a test - no shutdown - diff --git a/test/integration/targets/ios_template/tests/cli/backup.yaml b/test/integration/targets/ios_template/tests/cli/backup.yaml deleted file mode 100644 index 795d8bf4c0..0000000000 --- a/test/integration/targets/ios_template/tests/cli/backup.yaml +++ /dev/null @@ -1,52 +0,0 @@ ---- -- debug: msg="START cli/backup.yaml" - -- name: setup - ios_config: - commands: - - no interface Loopback999 - match: none - ignore_errors: yes - -- name: collect any backup files - find: - paths: "{{ role_path }}/backup" - pattern: "{{ inventory_hostname_short }}_config*" - register: backup_files - delegate_to: localhost - -- name: delete backup files - file: - path: "{{ item.path }}" - state: absent - with_items: "{{backup_files.files|default([])}}" - -- name: configure device with config - ios_template: - src: basic/config.j2 - backup: yes - register: result - -- assert: - that: - - "result.changed == true" - - "result.updates is defined" - -- name: collect any backup files - find: - paths: "{{ role_path }}/backup" - pattern: "{{ inventory_hostname_short }}_config*" - register: backup_files - delegate_to: localhost - -- assert: - that: - - "backup_files.files is defined" - -- name: teardown - ios_config: - commands: - - no interface Loopback999 - match: none - -- debug: msg="END cli/backup.yaml" diff --git a/test/integration/targets/ios_template/tests/cli/basic.yaml b/test/integration/targets/ios_template/tests/cli/basic.yaml deleted file mode 100644 index 4f70933847..0000000000 --- a/test/integration/targets/ios_template/tests/cli/basic.yaml +++ /dev/null @@ -1,37 +0,0 @@ ---- -- debug: msg="START cli/basic.yaml" - -- name: setup - ios_config: - commands: - - no interface Loopback999 - match: none - ignore_errors: yes - -- name: configure device with config - ios_template: - src: basic/config.j2 - register: result - -- assert: - that: - - "result.changed == true" - - "result.updates is defined" - -- name: check device with config - ios_template: - src: basic/config.j2 - register: result - -- assert: - that: - - "result.changed == false" - - "result.updates is defined" - -- name: teardown - ios_config: - commands: - - no interface Loopback999 - match: none - -- debug: msg="END cli/basic.yaml" diff --git a/test/integration/targets/ios_template/tests/cli/defaults.yaml b/test/integration/targets/ios_template/tests/cli/defaults.yaml deleted file mode 100644 index bb3c61552c..0000000000 --- a/test/integration/targets/ios_template/tests/cli/defaults.yaml +++ /dev/null @@ -1,37 +0,0 @@ ---- -- debug: msg="START cli/defaults.yaml" - -- name: setup - ios_config: - commands: no interface Loopback999 - match: none - ignore_errors: yes - -- name: configure device with defaults included - ios_template: - src: defaults/config.j2 - include_defaults: yes - register: result - -- assert: - that: - - "result.changed == true" - - "result.updates is defined" - -- name: check device with defaults included - ios_template: - src: defaults/config.j2 - include_defaults: yes - register: result - -- assert: - that: - - "result.changed == false" - - "result.updates is defined" - -- name: teardown - ios_config: - commands: no interface Loopback999 - match: none - -- debug: msg="END cli/defaults.yaml" diff --git a/test/integration/targets/ios_template/tests/cli/force.yaml b/test/integration/targets/ios_template/tests/cli/force.yaml deleted file mode 100644 index c5b4f6ca04..0000000000 --- a/test/integration/targets/ios_template/tests/cli/force.yaml +++ /dev/null @@ -1,39 +0,0 @@ ---- -- debug: msg="START cli/force.yaml" - -- name: setup - ios_config: - commands: - - no interface Loopback999 - match: none - ignore_errors: yes - -- name: configure device with config - ios_template: - src: basic/config.j2 - force: yes - register: result - -- assert: - that: - - "result.changed == true" - - "result.updates is defined" - -- name: check device with config - ios_template: - src: basic/config.j2 - force: yes - register: result - -- assert: - that: - - "result.changed == true" - - "result.updates is defined" - -- name: teardown - ios_config: - commands: - - no interface Loopback999 - match: none - -- debug: msg="END cli/force.yaml" diff --git a/test/integration/targets/iosxr_template/defaults/main.yaml b/test/integration/targets/iosxr_template/defaults/main.yaml deleted file mode 100644 index 9ef5ba5165..0000000000 --- a/test/integration/targets/iosxr_template/defaults/main.yaml +++ /dev/null @@ -1,3 +0,0 @@ ---- -testcase: "*" -test_items: [] diff --git a/test/integration/targets/iosxr_template/meta/main.yml b/test/integration/targets/iosxr_template/meta/main.yml deleted file mode 100644 index d4da833dd5..0000000000 --- a/test/integration/targets/iosxr_template/meta/main.yml +++ /dev/null @@ -1,2 +0,0 @@ -dependencies: - - prepare_iosxr_tests diff --git a/test/integration/targets/iosxr_template/tasks/cli.yaml b/test/integration/targets/iosxr_template/tasks/cli.yaml deleted file mode 100644 index 46d86dd698..0000000000 --- a/test/integration/targets/iosxr_template/tasks/cli.yaml +++ /dev/null @@ -1,16 +0,0 @@ ---- -- name: collect all cli test cases - find: - paths: "{{ role_path }}/tests/cli" - patterns: "{{ testcase }}.yaml" - register: test_cases - delegate_to: localhost - -- name: set test_items - set_fact: test_items="{{ test_cases.files | map(attribute='path') | list }}" - -- name: run test case - include: "{{ test_case_to_run }}" - with_items: "{{ test_items }}" - loop_control: - loop_var: test_case_to_run diff --git a/test/integration/targets/iosxr_template/tasks/main.yaml b/test/integration/targets/iosxr_template/tasks/main.yaml deleted file mode 100644 index 415c99d8b1..0000000000 --- a/test/integration/targets/iosxr_template/tasks/main.yaml +++ /dev/null @@ -1,2 +0,0 @@ ---- -- { include: cli.yaml, tags: ['cli'] } diff --git a/test/integration/targets/iosxr_template/templates/basic/config.j2 b/test/integration/targets/iosxr_template/templates/basic/config.j2 deleted file mode 100644 index ed807f1baa..0000000000 --- a/test/integration/targets/iosxr_template/templates/basic/config.j2 +++ /dev/null @@ -1,5 +0,0 @@ -hostname {{ inventory_hostname_short }} -! -interface Loopback999 - description this is a test - shutdown diff --git a/test/integration/targets/iosxr_template/tests/cli/backup.yaml b/test/integration/targets/iosxr_template/tests/cli/backup.yaml deleted file mode 100644 index 370d321e6a..0000000000 --- a/test/integration/targets/iosxr_template/tests/cli/backup.yaml +++ /dev/null @@ -1,52 +0,0 @@ ---- -- debug: msg="START cli/backup.yaml" - -- name: setup - iosxr_config: - commands: - - no interface Loopback999 - match: none - ignore_errors: yes - -- name: collect any backup files - find: - paths: "{{ role_path }}/backup" - pattern: "{{ inventory_hostname_short }}_config*" - register: backup_files - delegate_to: localhost - -- name: delete backup files - file: - path: "{{ item.path }}" - state: absent - with_items: "{{backup_files.files|default([])}}" - -- name: configure device with config - iosxr_template: - src: basic/config.j2 - backup: yes - register: result - -- assert: - that: - - "result.changed == true" - - "result.updates is defined" - -- name: collect any backup files - find: - paths: "{{ role_path }}/backup" - pattern: "{{ inventory_hostname_short }}_config*" - register: backup_files - delegate_to: localhost - -- assert: - that: - - "backup_files.files is defined" - -- name: teardown - iosxr_config: - commands: - - no interface Loopback999 - match: none - -- debug: msg="END cli/backup.yaml" diff --git a/test/integration/targets/iosxr_template/tests/cli/basic.yaml b/test/integration/targets/iosxr_template/tests/cli/basic.yaml deleted file mode 100644 index 1591685de7..0000000000 --- a/test/integration/targets/iosxr_template/tests/cli/basic.yaml +++ /dev/null @@ -1,36 +0,0 @@ ---- -- debug: msg="START cli/basic.yaml" - -- name: setup - iosxr_config: - commands: - - no interface Loopback999 - match: none - -- name: configure device with config - iosxr_template: - src: basic/config.j2 - register: result - -- assert: - that: - - "result.changed == true" - - "result.updates is defined" - -- name: check device with config - iosxr_template: - src: basic/config.j2 - register: result - -- assert: - that: - - "result.changed == false" - - "result.updates is defined" - -- name: teardown - iosxr_config: - commands: - - no interface Loopback999 - match: none - -- debug: msg="END cli/basic.yaml" diff --git a/test/integration/targets/iosxr_template/tests/cli/force.yaml b/test/integration/targets/iosxr_template/tests/cli/force.yaml deleted file mode 100644 index b4184213b8..0000000000 --- a/test/integration/targets/iosxr_template/tests/cli/force.yaml +++ /dev/null @@ -1,38 +0,0 @@ ---- -- debug: msg="START cli/force.yaml" - -- name: setup - iosxr_config: - commands: - - no interface Loopback999 - match: none - -- name: configure device with config - iosxr_template: - src: basic/config.j2 - force: yes - register: result - -- assert: - that: - - "result.changed == true" - - "result.updates is defined" - -- name: check device with config - iosxr_template: - src: basic/config.j2 - force: yes - register: result - -- assert: - that: - - "result.changed == true" - - "result.updates is defined" - -- name: teardown - iosxr_config: - commands: - - no interface Loopback999 - match: none - -- debug: msg="END cli/force.yaml" diff --git a/test/integration/targets/junos_template/defaults/main.yaml b/test/integration/targets/junos_template/defaults/main.yaml deleted file mode 100644 index 822f2213a4..0000000000 --- a/test/integration/targets/junos_template/defaults/main.yaml +++ /dev/null @@ -1,3 +0,0 @@ ---- -testcase: "*" -test_cases: [] diff --git a/test/integration/targets/junos_template/tasks/main.yaml b/test/integration/targets/junos_template/tasks/main.yaml deleted file mode 100644 index cc27f174fd..0000000000 --- a/test/integration/targets/junos_template/tasks/main.yaml +++ /dev/null @@ -1,2 +0,0 @@ ---- -- { include: netconf.yaml, tags: ['netconf'] } diff --git a/test/integration/targets/junos_template/tasks/netconf.yaml b/test/integration/targets/junos_template/tasks/netconf.yaml deleted file mode 100644 index bd91bd88ce..0000000000 --- a/test/integration/targets/junos_template/tasks/netconf.yaml +++ /dev/null @@ -1,15 +0,0 @@ ---- -- name: collect netconf test cases - find: - paths: "{{ role_path }}/tests/netconf" - patterns: "{{ testcase }}.yaml" - register: test_cases - -- name: set test_items - set_fact: test_items="{{ test_cases.files | map(attribute='path') | list }}" - -- name: run test case - include: "{{ test_case_to_run }}" - with_items: "{{ test_items }}" - loop_control: - loop_var: test_case_to_run diff --git a/test/integration/targets/junos_template/templates/basic/config.j2 b/test/integration/targets/junos_template/templates/basic/config.j2 deleted file mode 100644 index baa2d83833..0000000000 --- a/test/integration/targets/junos_template/templates/basic/config.j2 +++ /dev/null @@ -1,10 +0,0 @@ -interfaces { - lo0 { - unit 0 { - family inet { - address 1.1.1.1/32; - } - } - } -} - diff --git a/test/integration/targets/junos_template/tests/netconf/backup.yaml b/test/integration/targets/junos_template/tests/netconf/backup.yaml deleted file mode 100644 index 8773d0f686..0000000000 --- a/test/integration/targets/junos_template/tests/netconf/backup.yaml +++ /dev/null @@ -1,54 +0,0 @@ ---- -- debug: msg="START netconf/backup.yaml" - -- name: setup - junos_config: - lines: - - set system host-name {{ inventory_hostname_short }} - - delete interfaces lo0 - provider: "{{ netconf }}" - -- name: collect any backup files - find: - paths: "{{ role_path }}/backup" - pattern: "{{ inventory_hostname_short }}_config*" - register: backup_files - delegate_to: localhost - -- name: delete backup files - file: - path: "{{ item.path }}" - state: absent - with_items: "{{backup_files.files|default([])}}" - -- name: configure using template with backup - junos_template: - src: basic/config.j2 - backup: yes - provider: "{{ netconf }}" - register: result - -- assert: - that: - - "result.changed == true" - - "'1.1.1.1/32' in result.diff.prepared" - -- name: collect any backup files - find: - paths: "{{ role_path }}/backup" - pattern: "{{ inventory_hostname_short }}_config*" - register: backup_files - delegate_to: localhost - -- assert: - that: - - "backup_files.files is defined" - -- name: teardown - junos_config: - lines: - - set system host-name {{ inventory_hostname_short }} - - delete interfaces lo0 - provider: "{{ netconf }}" - -- debug: msg="END netconf/backup.yaml" diff --git a/test/integration/targets/junos_template/tests/netconf/basic.yaml b/test/integration/targets/junos_template/tests/netconf/basic.yaml deleted file mode 100644 index 74a84f791d..0000000000 --- a/test/integration/targets/junos_template/tests/netconf/basic.yaml +++ /dev/null @@ -1,39 +0,0 @@ ---- -- debug: msg="START netconf/basic.yaml" - -- name: setup - junos_config: - lines: - - set system host-name {{ inventory_hostname_short }} - - delete interfaces lo0 - provider: "{{ netconf }}" - -- name: configure basic config template - junos_template: - src: basic/config.j2 - provider: "{{ netconf }}" - register: result - -- assert: - that: - - "result.changed == true" - - "'1.1.1.1/32' in result.diff.prepared" - -- name: check basic config template idempotent - junos_template: - src: basic/config.j2 - provider: "{{ netconf }}" - register: result - -- assert: - that: - - "result.changed == false" - -- name: teardown - junos_config: - lines: - - set system host-name {{ inventory_hostname_short }} - - delete interfaces lo0 - provider: "{{ netconf }}" - -- debug: msg="END netconf/basic.yaml" diff --git a/test/integration/targets/junos_template/tests/netconf/force.disabled b/test/integration/targets/junos_template/tests/netconf/force.disabled deleted file mode 100644 index 106eab3f17..0000000000 --- a/test/integration/targets/junos_template/tests/netconf/force.disabled +++ /dev/null @@ -1,43 +0,0 @@ ---- -- debug: msg="START netconf/force.yaml" - -- name: setup - junos_config: - lines: - - set system host-name {{ inventory_hostname_short }} - - delete interfaces lo0 - provider: "{{ netconf }}" - -- name: configure basic config template - junos_template: - src: basic/config.j2 - provider: "{{ netconf }}" - action: replace - register: result - -- assert: - that: - - "result.changed == true" - - "'1.1.1.1/32' in result.diff.prepared" - -- name: check basic config template idempotent - junos_template: - src: basic/config-update.j2 - action: replace - provider: "{{ netconf }}" - register: result - -- assert: - that: - - "result.changed == true" - - "'1.1.1.1/32' in result.diff.prepared" - -- name: teardown - junos_config: - lines: - - set system host-name {{ inventory_hostname_short }} - - delete interfaces lo0 - action: replace - provider: "{{ netconf }}" - -- debug: msg="END netconf/force.yaml" diff --git a/test/integration/targets/nxos_template/defaults/main.yaml b/test/integration/targets/nxos_template/defaults/main.yaml deleted file mode 100644 index 9ef5ba5165..0000000000 --- a/test/integration/targets/nxos_template/defaults/main.yaml +++ /dev/null @@ -1,3 +0,0 @@ ---- -testcase: "*" -test_items: [] diff --git a/test/integration/targets/nxos_template/meta/main.yml b/test/integration/targets/nxos_template/meta/main.yml deleted file mode 100644 index ae741cbdc7..0000000000 --- a/test/integration/targets/nxos_template/meta/main.yml +++ /dev/null @@ -1,2 +0,0 @@ -dependencies: - - prepare_nxos_tests diff --git a/test/integration/targets/nxos_template/tasks/cli.yaml b/test/integration/targets/nxos_template/tasks/cli.yaml deleted file mode 100644 index d675462dd0..0000000000 --- a/test/integration/targets/nxos_template/tasks/cli.yaml +++ /dev/null @@ -1,15 +0,0 @@ ---- -- name: collect all cli test cases - find: - paths: "{{ role_path }}/tests/cli" - patterns: "{{ testcase }}.yaml" - register: test_cases - -- name: set test_items - set_fact: test_items="{{ test_cases.files | map(attribute='path') | list }}" - -- name: run test case - include: "{{ test_case_to_run }}" - with_items: "{{ test_items }}" - loop_control: - loop_var: test_case_to_run diff --git a/test/integration/targets/nxos_template/tasks/main.yaml b/test/integration/targets/nxos_template/tasks/main.yaml deleted file mode 100644 index 4b0f8c64d9..0000000000 --- a/test/integration/targets/nxos_template/tasks/main.yaml +++ /dev/null @@ -1,3 +0,0 @@ ---- -- { include: cli.yaml, tags: ['cli'] } -- { include: nxapi.yaml, tags: ['nxapi'] } diff --git a/test/integration/targets/nxos_template/tasks/nxapi.yaml b/test/integration/targets/nxos_template/tasks/nxapi.yaml deleted file mode 100644 index ea525379f7..0000000000 --- a/test/integration/targets/nxos_template/tasks/nxapi.yaml +++ /dev/null @@ -1,28 +0,0 @@ ---- -- name: collect all nxapi test cases - find: - paths: "{{ role_path }}/tests/nxapi" - patterns: "{{ testcase }}.yaml" - register: test_cases - -- name: set test_items - set_fact: test_items="{{ test_cases.files | map(attribute='path') | list }}" - -- name: enable nxapi - nxos_config: - lines: - - feature nxapi - - nxapi http port 80 - provider: "{{ cli }}" - -- name: run test case - include: "{{ test_case_to_run }}" - with_items: "{{ test_items }}" - loop_control: - loop_var: test_case_to_run - -- name: disable nxapi - nxos_config: - lines: - - no feature nxapi - provider: "{{ cli }}" diff --git a/test/integration/targets/nxos_template/templates/basic/config.j2 b/test/integration/targets/nxos_template/templates/basic/config.j2 deleted file mode 100644 index 9705ee1494..0000000000 --- a/test/integration/targets/nxos_template/templates/basic/config.j2 +++ /dev/null @@ -1,4 +0,0 @@ -interface Ethernet2/5 - description this is a test - shutdown - diff --git a/test/integration/targets/nxos_template/templates/config.js b/test/integration/targets/nxos_template/templates/config.js deleted file mode 100644 index d2ec0c0c71..0000000000 --- a/test/integration/targets/nxos_template/templates/config.js +++ /dev/null @@ -1,4 +0,0 @@ -interface Ethernet2/5 - description test description from ansible - shutdown - diff --git a/test/integration/targets/nxos_template/templates/defaults/config.j2 b/test/integration/targets/nxos_template/templates/defaults/config.j2 deleted file mode 100644 index df0cac701c..0000000000 --- a/test/integration/targets/nxos_template/templates/defaults/config.j2 +++ /dev/null @@ -1,4 +0,0 @@ -interface Ethernet2/5 - description this is a test - no shutdown - diff --git a/test/integration/targets/nxos_template/templates/defaults/test.j2 b/test/integration/targets/nxos_template/templates/defaults/test.j2 deleted file mode 100644 index 9705ee1494..0000000000 --- a/test/integration/targets/nxos_template/templates/defaults/test.j2 +++ /dev/null @@ -1,4 +0,0 @@ -interface Ethernet2/5 - description this is a test - shutdown - diff --git a/test/integration/targets/nxos_template/tests/cli/backup.yaml b/test/integration/targets/nxos_template/tests/cli/backup.yaml deleted file mode 100644 index cefabe5d3d..0000000000 --- a/test/integration/targets/nxos_template/tests/cli/backup.yaml +++ /dev/null @@ -1,50 +0,0 @@ ---- -- debug: msg="START cli/backup.yaml" - -- name: setup - nxos_config: - commands: - - no description - - no shutdown - parents: - - interface Ethernet2/5 - match: none - provider: "{{ cli }}" - -- name: collect any backup files - find: - paths: "{{ role_path }}/backup" - pattern: "{{ inventory_hostname_short }}_config*" - register: backup_files - delegate_to: localhost - -- name: delete backup files - file: - path: "{{ item.path }}" - state: absent - with_items: "{{backup_files.files|default([])}}" - -- name: configure device with config - nxos_template: - src: basic/config.j2 - backup: yes - provider: "{{ cli }}" - register: result - -- assert: - that: - - "result.changed == true" - - "result.updates is defined" - -- name: collect any backup files - find: - paths: "{{ role_path }}/backup" - pattern: "{{ inventory_hostname_short }}_config*" - register: backup_files - delegate_to: localhost - -- assert: - that: - - "backup_files.files is defined" - -- debug: msg="END cli/backup.yaml" diff --git a/test/integration/targets/nxos_template/tests/cli/basic.yaml b/test/integration/targets/nxos_template/tests/cli/basic.yaml deleted file mode 100644 index 17625e4173..0000000000 --- a/test/integration/targets/nxos_template/tests/cli/basic.yaml +++ /dev/null @@ -1,36 +0,0 @@ ---- -- debug: msg="START cli/basic.yaml" - -- name: setup - nxos_config: - commands: - - no description - - no shutdown - parents: - - interface Ethernet2/5 - match: none - provider: "{{ cli }}" - -- name: configure device with config - nxos_template: - src: basic/config.j2 - provider: "{{ cli }}" - register: result - -- assert: - that: - - "result.changed == true" - - "result.updates is defined" - -- name: check device with config - nxos_template: - src: basic/config.j2 - provider: "{{ cli }}" - register: result - -- assert: - that: - - "result.changed == false" - - "result.updates is defined" - -- debug: msg="END cli/basic.yaml" diff --git a/test/integration/targets/nxos_template/tests/cli/defaults.yaml b/test/integration/targets/nxos_template/tests/cli/defaults.yaml deleted file mode 100644 index a98b958258..0000000000 --- a/test/integration/targets/nxos_template/tests/cli/defaults.yaml +++ /dev/null @@ -1,42 +0,0 @@ ---- -- debug: msg="START cli/defaults.yaml" - -- name: setup - nxos_config: - commands: - - no description - - shutdown - parents: - - interface Ethernet2/5 - match: none - provider: "{{ cli }}" - -- name: configure device with defaults included - nxos_template: - src: defaults/config.j2 - include_defaults: yes - provider: "{{ cli }}" - register: result - -- debug: var=result - -- assert: - that: - - "result.changed == true" - - "result.updates is defined" - -- name: check device with defaults included - nxos_template: - src: defaults/config.j2 - include_defaults: yes - provider: "{{ cli }}" - register: result - -- debug: var=result - -- assert: - that: - - "result.changed == false" - - "result.updates is defined" - -- debug: msg="END cli/defaults.yaml" diff --git a/test/integration/targets/nxos_template/tests/cli/force.yaml b/test/integration/targets/nxos_template/tests/cli/force.yaml deleted file mode 100644 index 8bfc398fdb..0000000000 --- a/test/integration/targets/nxos_template/tests/cli/force.yaml +++ /dev/null @@ -1,38 +0,0 @@ ---- -- debug: msg="START cli/force.yaml" - -- name: setup - nxos_config: - commands: - - no description - - no shutdown - parents: - - interface Ethernet2/5 - match: none - provider: "{{ cli }}" - -- name: configure device with config - nxos_template: - src: basic/config.j2 - provider: "{{ cli }}" - force: yes - register: result - -- assert: - that: - - "result.changed == true" - - "result.updates is defined" - -- name: check device with config - nxos_template: - src: basic/config.j2 - provider: "{{ cli }}" - force: yes - register: result - -- assert: - that: - - "result.changed == true" - - "result.updates is defined" - -- debug: msg="END cli/force.yaml" diff --git a/test/integration/targets/nxos_template/tests/nxapi/backup.yaml b/test/integration/targets/nxos_template/tests/nxapi/backup.yaml deleted file mode 100644 index 4f62b180fd..0000000000 --- a/test/integration/targets/nxos_template/tests/nxapi/backup.yaml +++ /dev/null @@ -1,50 +0,0 @@ ---- -- debug: msg="START nxapi/backup.yaml" - -- name: setup - nxos_config: - commands: - - no description - - no shutdown - parents: - - interface Ethernet2/5 - match: none - provider: "{{ nxapi }}" - -- name: collect any backup files - find: - paths: "{{ role_path }}/backup" - pattern: "{{ inventory_hostname_short }}_config*" - register: backup_files - delegate_to: localhost - -- name: delete backup files - file: - path: "{{ item.path }}" - state: absent - with_items: "{{backup_files.files|default([])}}" - -- name: configure device with config - nxos_template: - src: basic/config.j2 - backup: yes - provider: "{{ nxapi }}" - register: result - -- assert: - that: - - "result.changed == true" - - "result.updates is defined" - -- name: collect any backup files - find: - paths: "{{ role_path }}/backup" - pattern: "{{ inventory_hostname_short }}_config*" - register: backup_files - delegate_to: localhost - -- assert: - that: - - "backup_files.files is defined" - -- debug: msg="END nxapi/backup.yaml" diff --git a/test/integration/targets/nxos_template/tests/nxapi/basic.yaml b/test/integration/targets/nxos_template/tests/nxapi/basic.yaml deleted file mode 100644 index 481447719a..0000000000 --- a/test/integration/targets/nxos_template/tests/nxapi/basic.yaml +++ /dev/null @@ -1,36 +0,0 @@ ---- -- debug: msg="START nxapi/basic.yaml" - -- name: setup - nxos_config: - commands: - - no description - - no shutdown - parents: - - interface Ethernet2/5 - match: none - provider: "{{ nxapi }}" - -- name: configure device with config - nxos_template: - src: basic/config.j2 - provider: "{{ nxapi }}" - register: result - -- assert: - that: - - "result.changed == true" - - "result.updates is defined" - -- name: check device with config - nxos_template: - src: basic/config.j2 - provider: "{{ nxapi }}" - register: result - -- assert: - that: - - "result.changed == false" - - "result.updates is defined" - -- debug: msg="END nxapi/basic.yaml" diff --git a/test/integration/targets/nxos_template/tests/nxapi/defaults.yaml b/test/integration/targets/nxos_template/tests/nxapi/defaults.yaml deleted file mode 100644 index 83cdf3bb37..0000000000 --- a/test/integration/targets/nxos_template/tests/nxapi/defaults.yaml +++ /dev/null @@ -1,42 +0,0 @@ ---- -- debug: msg="START nxapi/defaults.yaml" - -- name: setup - nxos_config: - commands: - - no description - - shutdown - parents: - - interface Ethernet2/5 - match: none - provider: "{{ nxapi }}" - -- name: configure device with defaults included - nxos_template: - src: defaults/config.j2 - include_defaults: yes - provider: "{{ nxapi }}" - register: result - -- debug: var=result - -- assert: - that: - - "result.changed == true" - - "result.updates is defined" - -- name: check device with defaults included - nxos_template: - src: defaults/config.j2 - include_defaults: yes - provider: "{{ nxapi }}" - register: result - -- debug: var=result - -- assert: - that: - - "result.changed == false" - - "result.updates is defined" - -- debug: msg="END nxapi/defaults.yaml" diff --git a/test/integration/targets/nxos_template/tests/nxapi/force.yaml b/test/integration/targets/nxos_template/tests/nxapi/force.yaml deleted file mode 100644 index 9a7704dda0..0000000000 --- a/test/integration/targets/nxos_template/tests/nxapi/force.yaml +++ /dev/null @@ -1,38 +0,0 @@ ---- -- debug: msg="START nxapi/force.yaml" - -- name: setup - nxos_config: - commands: - - no description - - no shutdown - parents: - - interface Ethernet2/5 - match: none - provider: "{{ nxapi }}" - -- name: configure device with config - nxos_template: - src: basic/config.j2 - provider: "{{ nxapi }}" - force: yes - register: result - -- assert: - that: - - "result.changed == true" - - "result.updates is defined" - -- name: check device with config - nxos_template: - src: basic/config.j2 - provider: "{{ nxapi }}" - force: yes - register: result - -- assert: - that: - - "result.changed == true" - - "result.updates is defined" - -- debug: msg="END nxapi/force.yaml" diff --git a/test/sanity/pep8/legacy-files.txt b/test/sanity/pep8/legacy-files.txt index 29608f040e..6261e069a8 100644 --- a/test/sanity/pep8/legacy-files.txt +++ b/test/sanity/pep8/legacy-files.txt @@ -298,7 +298,6 @@ lib/ansible/modules/network/cumulus/_cl_ports.py lib/ansible/modules/network/cumulus/nclu.py lib/ansible/modules/net_tools/dnsimple.py lib/ansible/modules/net_tools/dnsmadeeasy.py -lib/ansible/modules/network/eos/_eos_template.py lib/ansible/modules/network/eos/eos_banner.py lib/ansible/modules/network/eos/eos_command.py lib/ansible/modules/network/eos/eos_config.py @@ -312,13 +311,11 @@ lib/ansible/modules/network/fortios/fortios_config.py lib/ansible/modules/network/fortios/fortios_ipv4_policy.py lib/ansible/modules/network/illumos/dladm_iptun.py lib/ansible/modules/network/illumos/dladm_linkprop.py -lib/ansible/modules/network/ios/_ios_template.py lib/ansible/modules/network/ios/ios_banner.py lib/ansible/modules/network/ios/ios_command.py lib/ansible/modules/network/ios/ios_facts.py lib/ansible/modules/network/ios/ios_system.py lib/ansible/modules/network/ios/ios_vrf.py -lib/ansible/modules/network/iosxr/_iosxr_template.py lib/ansible/modules/network/iosxr/iosxr_command.py lib/ansible/modules/network/iosxr/iosxr_config.py lib/ansible/modules/network/iosxr/iosxr_facts.py @@ -337,7 +334,6 @@ lib/ansible/modules/network/netvisor/pn_vrouterif.py lib/ansible/modules/network/netvisor/pn_vrouterlbif.py lib/ansible/modules/net_tools/nmcli.py lib/ansible/modules/network/nxos/_nxos_mtu.py -lib/ansible/modules/network/nxos/_nxos_template.py lib/ansible/modules/network/nxos/nxos_aaa_server.py lib/ansible/modules/network/nxos/nxos_aaa_server_host.py lib/ansible/modules/network/nxos/nxos_command.py @@ -374,7 +370,6 @@ lib/ansible/modules/network/nxos/nxos_vtp_domain.py lib/ansible/modules/network/nxos/nxos_vtp_password.py lib/ansible/modules/network/nxos/nxos_vtp_version.py lib/ansible/modules/net_tools/omapi_host.py -lib/ansible/modules/network/openswitch/_ops_template.py lib/ansible/modules/network/openswitch/ops_command.py lib/ansible/modules/network/openswitch/ops_config.py lib/ansible/modules/network/openswitch/ops_facts.py diff --git a/test/units/modules/network/ios/fixtures/ios_template_config.cfg b/test/units/modules/network/ios/fixtures/ios_template_config.cfg deleted file mode 100644 index afad9d08aa..0000000000 --- a/test/units/modules/network/ios/fixtures/ios_template_config.cfg +++ /dev/null @@ -1,12 +0,0 @@ -! -hostname router -! -interface GigabitEthernet0/0 - ip address 1.2.3.4 255.255.255.0 - description test string -! -interface GigabitEthernet0/1 - ip address 6.7.8.9 255.255.255.0 - description test string - shutdown -! diff --git a/test/units/modules/network/ios/fixtures/ios_template_defaults.cfg b/test/units/modules/network/ios/fixtures/ios_template_defaults.cfg deleted file mode 100644 index e54645ab14..0000000000 --- a/test/units/modules/network/ios/fixtures/ios_template_defaults.cfg +++ /dev/null @@ -1,13 +0,0 @@ -! -hostname router -! -interface GigabitEthernet0/0 - ip address 1.2.3.4 255.255.255.0 - description test string - no shutdown -! -interface GigabitEthernet0/1 - ip address 6.7.8.9 255.255.255.0 - description test string - shutdown -! diff --git a/test/units/modules/network/ios/fixtures/ios_template_src.cfg b/test/units/modules/network/ios/fixtures/ios_template_src.cfg deleted file mode 100644 index b3d8961a99..0000000000 --- a/test/units/modules/network/ios/fixtures/ios_template_src.cfg +++ /dev/null @@ -1,11 +0,0 @@ -! -hostname foo -! -interface GigabitEthernet0/0 - no ip address -! -interface GigabitEthernet0/1 - ip address 6.7.8.9 255.255.255.0 - description test string - shutdown -! diff --git a/test/units/modules/network/ios/test_ios_template.py b/test/units/modules/network/ios/test_ios_template.py deleted file mode 100644 index afa76b3468..0000000000 --- a/test/units/modules/network/ios/test_ios_template.py +++ /dev/null @@ -1,87 +0,0 @@ -# -# (c) 2016 Red Hat Inc. -# -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see . - -# Make coding more python3-ish -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import json - -from ansible.compat.tests.mock import patch -from ansible.modules.network.ios import _ios_template -from .ios_module import TestIosModule, load_fixture, set_module_args - - -class TestIosTemplateModule(TestIosModule): - - module = _ios_template - - def setUp(self): - self.mock_get_config = patch('ansible.modules.network.ios._ios_template.get_config') - self.get_config = self.mock_get_config.start() - - self.mock_load_config = patch('ansible.modules.network.ios._ios_template.load_config') - self.load_config = self.mock_load_config.start() - - def tearDown(self): - self.mock_get_config.stop() - self.mock_load_config.stop() - - def load_fixtures(self, commands=None): - config_file = 'ios_template_config.cfg' - self.get_config.return_value = load_fixture(config_file) - self.load_config.return_value = None - - def test_ios_template_unchanged(self): - src = load_fixture('ios_template_config.cfg') - set_module_args(dict(src=src)) - self.execute_module() - - def test_ios_template_simple(self): - src = load_fixture('ios_template_src.cfg') - set_module_args(dict(src=src)) - commands = ['hostname foo', - 'interface GigabitEthernet0/0', - 'no ip address'] - self.execute_module(changed=True, commands=commands) - - def test_ios_template_force(self): - src = load_fixture('ios_template_config.cfg') - set_module_args(dict(src=src, force=True)) - commands = [str(s).strip() for s in src.split('\n') if s and s != '!'] - self.execute_module(changed=True, commands=commands) - self.assertFalse(self.get_config.called) - - def test_ios_template_backup(self): - set_module_args(dict(backup=True)) - result = self.execute_module() - self.assertIn('__backup__', result) - - def test_ios_template_config(self): - src = load_fixture('ios_template_config.cfg') - config = 'hostname router' - set_module_args(dict(src=src, config=config)) - commands = ['interface GigabitEthernet0/0', - 'ip address 1.2.3.4 255.255.255.0', - 'description test string', - 'interface GigabitEthernet0/1', - 'ip address 6.7.8.9 255.255.255.0', - 'description test string', - 'shutdown'] - self.execute_module(changed=True, commands=commands) - self.assertFalse(self.get_config.called) diff --git a/test/units/modules/network/iosxr/fixtures/iosxr_template_config.cfg b/test/units/modules/network/iosxr/fixtures/iosxr_template_config.cfg deleted file mode 100644 index afad9d08aa..0000000000 --- a/test/units/modules/network/iosxr/fixtures/iosxr_template_config.cfg +++ /dev/null @@ -1,12 +0,0 @@ -! -hostname router -! -interface GigabitEthernet0/0 - ip address 1.2.3.4 255.255.255.0 - description test string -! -interface GigabitEthernet0/1 - ip address 6.7.8.9 255.255.255.0 - description test string - shutdown -! diff --git a/test/units/modules/network/iosxr/fixtures/iosxr_template_src.cfg b/test/units/modules/network/iosxr/fixtures/iosxr_template_src.cfg deleted file mode 100644 index b3d8961a99..0000000000 --- a/test/units/modules/network/iosxr/fixtures/iosxr_template_src.cfg +++ /dev/null @@ -1,11 +0,0 @@ -! -hostname foo -! -interface GigabitEthernet0/0 - no ip address -! -interface GigabitEthernet0/1 - ip address 6.7.8.9 255.255.255.0 - description test string - shutdown -! diff --git a/test/units/modules/network/iosxr/test_iosxr_template.py b/test/units/modules/network/iosxr/test_iosxr_template.py deleted file mode 100644 index 9108d53b27..0000000000 --- a/test/units/modules/network/iosxr/test_iosxr_template.py +++ /dev/null @@ -1,87 +0,0 @@ -# -# (c) 2016 Red Hat Inc. -# -# This file is part of Ansible -# -# Ansible is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Ansible is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Ansible. If not, see . - -# Make coding more python3-ish -from __future__ import (absolute_import, division, print_function) -__metaclass__ = type - -import json - -from ansible.compat.tests.mock import patch -from .iosxr_module import TestIosxrModule, load_fixture, set_module_args -from ansible.modules.network.iosxr import _iosxr_template - - -class TestIosxrTemplateModule(TestIosxrModule): - - module = _iosxr_template - - def setUp(self): - self.mock_get_config = patch('ansible.modules.network.iosxr._iosxr_template.get_config') - self.get_config = self.mock_get_config.start() - - self.mock_load_config = patch('ansible.modules.network.iosxr._iosxr_template.load_config') - self.load_config = self.mock_load_config.start() - - def tearDown(self): - self.mock_get_config.stop() - self.mock_load_config.stop() - - def load_fixtures(self, commands=None): - config_file = 'iosxr_template_config.cfg' - self.get_config.return_value = load_fixture(config_file) - self.load_config.return_value = None - - def test_iosxr_template_unchanged(self): - src = load_fixture('iosxr_template_config.cfg') - set_module_args(dict(src=src)) - self.execute_module() - - def test_iosxr_template_simple(self): - src = load_fixture('iosxr_template_src.cfg') - set_module_args(dict(src=src)) - commands = ['hostname foo', - 'interface GigabitEthernet0/0', - 'no ip address'] - self.execute_module(changed=True, commands=commands) - - def test_iosxr_template_force(self): - src = load_fixture('iosxr_template_config.cfg') - set_module_args(dict(src=src, force=True)) - commands = [str(s).strip() for s in src.split('\n') if s and s != '!'] - self.execute_module(changed=True, commands=commands) - self.assertFalse(self.get_config.called) - - def test_iosxr_template_backup(self): - set_module_args(dict(backup=True)) - result = self.execute_module() - self.assertIn('__backup__', result) - - def test_iosxr_template_config(self): - src = load_fixture('iosxr_template_config.cfg') - config = 'hostname router' - set_module_args(dict(src=src, config=config)) - commands = ['interface GigabitEthernet0/0', - 'ip address 1.2.3.4 255.255.255.0', - 'description test string', - 'interface GigabitEthernet0/1', - 'ip address 6.7.8.9 255.255.255.0', - 'description test string', - 'shutdown'] - self.execute_module(changed=False) - self.assertTrue(self.get_config.called)