HEX
Server: LiteSpeed
System: Linux kapuas.iixcp.rumahweb.net 5.14.0-427.42.1.el9_4.x86_64 #1 SMP PREEMPT_DYNAMIC Fri Nov 1 14:58:02 EDT 2024 x86_64
User: mirz4654 (1666)
PHP: 8.1.33
Disabled: system,exec,escapeshellarg,escapeshellcmd,passthru,proc_close,proc_get_status,proc_nice,proc_open,proc_terminate,shell_exec,popen,pclose,dl,pfsockopen,leak,apache_child_terminate,posix_kill,posix_mkfifo,posix_setsid,posix_setuid,posix_setpgid,ini_alter,show_source,define_syslog_variables,symlink,syslog,openlog,openlog,closelog,ocinumcols,listen,chgrp,apache_note,apache_setenv,debugger_on,debugger_off,ftp_exec,dll,ftp,myshellexec,socket_bind,mail,posix_getwpuid
Upload Files
File: //usr/lib/python3.9/site-packages/ansible_collections/cisco/nxos/plugins/modules/nxos_rollback.py
#
# 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 <http://www.gnu.org/licenses/>.
#
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.module_utils.basic import AnsibleModule

from ansible_collections.cisco.nxos.plugins.module_utils.network.nxos.nxos import run_commands


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))

    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()