#!/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 . # from __future__ import absolute_import, division, print_function __metaclass__ = type DOCUMENTATION = """ module: nxos_rollback extends_documentation_fragment: - cisco.nxos.nxos short_description: Set a checkpoint or rollback to a checkpoint. description: - This module offers the ability to set a configuration checkpoint file or rollback to a configuration checkpoint file on Cisco NXOS switches. version_added: 1.0.0 author: - Jason Edelman (@jedelman8) - Gabriele Gerbino (@GGabriele) notes: - Tested against NXOSv 7.3.(0)D1(1) on VIRL - Unsupported for Cisco MDS - Sometimes C(transport=nxapi) may cause a timeout error. options: checkpoint_file: description: - Name of checkpoint file to create. Mutually exclusive with rollback_to. type: str rollback_to: description: - Name of checkpoint file to rollback to. Mutually exclusive with checkpoint_file. type: str """ EXAMPLES = """ - cisco.nxos.nxos_rollback: checkpoint_file: backup.cfg username: '{{ un }}' password: '{{ pwd }}' host: '{{ inventory_hostname }}' - cisco.nxos.nxos_rollback: rollback_to: backup.cfg username: '{{ un }}' password: '{{ pwd }}' host: '{{ inventory_hostname }}' """ RETURN = """ filename: description: The filename of the checkpoint/rollback file. returned: success type: str sample: 'backup.cfg' status: description: Which operation took place and whether it was successful. returned: success type: str sample: 'rollback executed' """ from ansible_collections.cisco.nxos.plugins.module_utils.network.nxos.nxos import ( nxos_argument_spec, run_commands, ) from ansible.module_utils.basic import AnsibleModule def checkpoint(filename, module): commands = [ {"command": "terminal dont-ask", "output": "text"}, {"command": "checkpoint file %s" % filename, "output": "text"}, ] run_commands(module, commands) def rollback(filename, module): commands = [ { "command": "rollback running-config file %s" % filename, "output": "text", } ] run_commands(module, commands) def main(): argument_spec = dict( checkpoint_file=dict(required=False), rollback_to=dict(required=False) ) argument_spec.update(nxos_argument_spec) module = AnsibleModule( argument_spec=argument_spec, mutually_exclusive=[["checkpoint_file", "rollback_to"]], supports_check_mode=False, ) checkpoint_file = module.params["checkpoint_file"] rollback_to = module.params["rollback_to"] status = None filename = None changed = False if checkpoint_file: checkpoint(checkpoint_file, module) status = "checkpoint file created" elif rollback_to: rollback(rollback_to, module) status = "rollback executed" changed = True filename = rollback_to or checkpoint_file module.exit_json(changed=changed, status=status, filename=filename) if __name__ == "__main__": main()