diff options
Diffstat (limited to 'lib/ansible/modules/network/openswitch/ops_config.py')
-rw-r--r-- | lib/ansible/modules/network/openswitch/ops_config.py | 306 |
1 files changed, 0 insertions, 306 deletions
diff --git a/lib/ansible/modules/network/openswitch/ops_config.py b/lib/ansible/modules/network/openswitch/ops_config.py deleted file mode 100644 index 00073ac67d..0000000000 --- a/lib/ansible/modules/network/openswitch/ops_config.py +++ /dev/null @@ -1,306 +0,0 @@ -#!/usr/bin/python -# -# Copyright: Ansible Project -# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import absolute_import, division, print_function -__metaclass__ = type - - -ANSIBLE_METADATA = {'metadata_version': '1.1', - 'status': ['preview'], - 'supported_by': 'community'} - - -DOCUMENTATION = """ ---- -module: ops_config -version_added: "2.1" -author: "Peter Sprygada (@privateip)" -short_description: Manage OpenSwitch configuration using CLI -description: - - OpenSwitch configurations use a simple block indent file syntax - for segmenting configuration into sections. This module provides - an implementation for working with ops configuration sections in - a deterministic way. -extends_documentation_fragment: openswitch -options: - lines: - description: - - The ordered set of commands that should be configured in the - section. The commands must be the exact same commands as found - in the device running-config. Be sure to note the configuration - command syntax as some commands are automatically modified by the - device config parser. - required: false - default: null - parents: - description: - - The ordered set of parents that uniquely identify the section - the commands should be checked against. If the parents argument - is omitted, the commands are checked against the set of top - level or global commands. - required: false - default: null - src: - description: - - The I(src) argument provides a path to the configuration file - to load into the remote system. The path can either be a full - system path to the configuration file if the value starts with / - or relative to the root of the implemented role or playbook. - This argument is mutually exclusive with the I(lines) and - I(parents) arguments. - required: false - default: null - version_added: "2.2" - before: - description: - - The ordered set of commands to push on to the command stack if - a change needs to be made. This allows the playbook designer - the opportunity to perform configuration commands prior to pushing - any changes without affecting how the set of commands are matched - against the system. - required: false - default: null - after: - description: - - The ordered set of commands to append to the end of the command - stack if a change needs to be made. Just like with I(before) this - allows the playbook designer to append a set of commands to be - executed after the command set. - required: false - default: null - match: - description: - - Instructs the module on the way to perform the matching of - the set of commands against the current device config. If - match is set to I(line), commands are matched line by line. If - match is set to I(strict), command lines are matched with respect - to position. If match is set to I(exact), command lines - must be an equal match. Finally, if match is set to I(none), the - module will not attempt to compare the source configuration with - the running configuration on the remote device. - required: false - default: line - choices: ['line', 'strict', 'exact', 'none'] - replace: - description: - - Instructs the module on the way to perform the configuration - on the device. If the replace argument is set to I(line) then - the modified lines are pushed to the device in configuration - mode. If the replace argument is set to I(block) then the entire - command block is pushed to the device in configuration mode if any - line is not correct. - required: false - default: line - choices: ['line', 'block'] - 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. - - Note this argument should be considered deprecated. To achieve - the equivalent, set the C(match=none) which is idempotent. This argument - will be removed in a future release. - 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 - save: - description: - - The C(save) argument instructs the module to save the running- - config to the startup-config at the conclusion of the module - running. If check mode is specified, this argument is ignored. - required: false - default: no - choices: ['yes', 'no'] - version_added: "2.2" -""" - -EXAMPLES = """ -# Note: examples below use the following provider dict to handle -# transport and authentication to the node. ---- -vars: - cli: - host: "{{ inventory_hostname }}" - username: netop - password: netop - ---- -- name: configure hostname over cli - ops_config: - lines: - - "hostname {{ inventory_hostname }}" - provider: "{{ cli }}" - - -- name: configure vlan 10 over cli - ops_config: - lines: - - no shutdown - parents: - - vlan 10 - provider: "{{ cli }}" - -- name: load config from file - ops_config: - src: ops01.cfg - backup: yes - provider: "{{ cli }}" -""" - -RETURN = """ -updates: - description: The set of commands that will be pushed to the remote device - returned: always - type: list - sample: ['...', '...'] -backup_path: - description: The full path to the backup file - returned: when backup is yes - type: string - sample: /playbooks/ansible/backup/ops_config.2016-07-16@22:28:34 -""" -import traceback - -from ansible.module_utils.openswitch import NetworkModule, NetworkError -from ansible.module_utils.netcfg import NetworkConfig, dumps -from ansible.module_utils._text import to_native - - -def check_args(module, warnings): - if module.params['force']: - warnings.append('The force argument is deprecated, please use ' - 'match=none instead. This argument will be ' - 'removed in the future') - -def get_config(module, result): - contents = module.params['config'] - if not contents: - contents = module.config.get_config() - return NetworkConfig(indent=4, contents=contents) - -def get_candidate(module): - candidate = NetworkConfig(indent=4) - if module.params['src']: - candidate.load(module.params['src']) - elif module.params['lines']: - parents = module.params['parents'] or list() - candidate.add(module.params['lines'], parents=parents) - return candidate - -def load_config(module, commands, result): - if not module.check_mode: - module.config(commands) - result['changed'] = True - -def run(module, result): - match = module.params['match'] - replace = module.params['replace'] - path = module.params['parents'] - - candidate = get_candidate(module) - - if match != 'none': - config = get_config(module, result) - configobjs = candidate.difference(config, path=path, match=match, - replace=replace) - else: - configobjs = candidate.items - - if configobjs: - commands = dumps(configobjs, 'commands').split('\n') - - if module.params['lines']: - if module.params['before']: - commands[:0] = module.params['before'] - - if module.params['after']: - commands.extend(module.params['after']) - - result['updates'] = commands - - # send the configuration commands to the device and merge - # them with the current running config - if not module.check_mode: - module.config.load_config(commands) - result['changed'] = True - - if module.params['save']: - if not module.check_mode: - module.config.save_config() - result['changed'] = True - -def main(): - - argument_spec = dict( - src=dict(type='path'), - - lines=dict(aliases=['commands'], type='list'), - parents=dict(type='list'), - - before=dict(type='list'), - after=dict(type='list'), - - match=dict(default='line', choices=['line', 'strict', 'exact', 'none']), - replace=dict(default='line', choices=['line', 'block']), - - # this argument is deprecated in favor of setting match: none - # it will be removed in a future version - force=dict(default=False, type='bool'), - - config=dict(), - - save=dict(type='bool', default=False), - backup=dict(type='bool', default=False), - - # ops_config is only supported over Cli transport so force - # the value of transport to be cli - transport=dict(default='cli', choices=['cli']) - ) - - mutually_exclusive = [('lines', 'src')] - - required_if = [('match', 'strict', ['lines']), - ('match', 'exact', ['lines']), - ('replace', 'block', ['lines'])] - - module = NetworkModule(argument_spec=argument_spec, - connect_on_load=False, - mutually_exclusive=mutually_exclusive, - required_if=required_if, - supports_check_mode=True) - - if module.params['force'] is True: - module.params['match'] = 'none' - - warnings = list() - check_args(module, warnings) - - result = dict(changed=False, warnings=warnings) - - if module.params['backup']: - result['__backup__'] = module.config.get_config() - - try: - run(module, result) - except NetworkError as e: - module.fail_json(msg=to_native(e), exception=traceback.format_exc()) - - module.exit_json(**result) - - -if __name__ == '__main__': - main() |