Backup OS10 Config with Ansible
Overview
Section titled “Overview”The following describes how to both backup and deploy a config to OS10 using Ansible.
Prerequisites
Section titled “Prerequisites”- Install Ansible on your device.
- Ensure that the Ansible server has IP connectivity to the management interface of all OS10 devices.
Backup a Config
Section titled “Backup a Config”On your Ansible server, copy the following Ansible playbook to a file called backup_config.yaml.
---- name: Setting up localhost for saving config hosts: localhost gather_facts: yes tasks: - block: - name: Generating backup folder name in localhost set_fact: target_folder: "{{ backup_folder }}/{{ ansible_date_time.iso8601 }}" - name: Create config_backup folder file: path: "{{ target_folder }}" state: directory - debug: msg: "Config files are to be backed up at {{target_folder}}" delegate_to: localhost run_once: True- name: Backup os10 running configurations hosts: os10 gather_facts: False connection: network_cli tasks: - name: Fetch OS10 running configuration dellos10_command: commands: show running register: sh_runn - name: Save config to file copy: content: "{{ sh_runn.stdout | replace('\\n', '\n') }}" dest: "{{hostvars.localhost.target_folder}}/{{inventory_hostname}}_os10_show_run" delegate_to: localhost - debug: msg: "Config files are to be backed up at {{hostvars.localhost.target_folder}}" run_once: trueNext, create a separate file called inventory.yaml with the following contents:
all: vars: backup_folder: "/root/backup" children: os10: hosts: 192.168.1.169: ansible_become: 'yes' ansible_become_method: enable ansible_command_timeout: 120 ansible_connection: ansible.netcommon.network_cli ansible_network_os: dellemc.os10.os10 ansible_password: admin ansible_user: admin 192.168.1.170: ansible_become: 'yes' ansible_become_method: enable ansible_command_timeout: 120 ansible_connection: ansible.netcommon.network_cli ansible_network_os: dellemc.os10.os10 ansible_password: admin ansible_user: adminReplace the IPs, backup_folder, ansible_password, and ansible_user variables above with the variables for your hosts. I am demoing the most simplistic configuration above. There are ways to use more generally scoped variables so that the password doesn’t have to repeated, use SSH keys instead of cleartext passwords, place passwords in a vault, etc, but I do not demo that here. See the module parameter provider for details on this.
Finally, to run the backup run ansible-playbook -i inventory.yaml backup_config.yaml. A clean run will look like this:
ansible-playbook -i inventory.yaml backup_config.yaml
PLAY [Setting up localhost for saving config] **********************************************************************************************************************************************************
TASK [Gathering Facts] *********************************************************************************************************************************************************************************ok: [localhost]
TASK [Generating backup folder name in localhost] ******************************************************************************************************************************************************ok: [localhost -> localhost]
TASK [Create config_backup folder] *********************************************************************************************************************************************************************changed: [localhost -> localhost]
TASK [debug] *******************************************************************************************************************************************************************************************ok: [localhost -> localhost] => { "msg": "Config files are to be backed up at /root/backup/2022-09-07T20:06:17Z"}
PLAY [Backup os10 running configurations] **************************************************************************************************************************************************************
TASK [Fetch OS10 running configuration] ****************************************************************************************************************************************************************[DEPRECATION WARNING]: Distribution fedora 35 on host 192.168.1.169 should use /usr/bin/python3, but is using /usr/bin/python for backward compatibility with prior Ansible releases. A future Ansiblerelease will default to using the discovered platform python for this host. See https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information. This feature will be removed in version 2.12. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.ok: [192.168.1.169]
TASK [Save config to file] *****************************************************************************************************************************************************************************changed: [192.168.1.169 -> localhost]
TASK [debug] *******************************************************************************************************************************************************************************************ok: [192.168.1.169] => { "msg": "Config files are to be backed up at /root/backup/2022-09-07T20:06:17Z"}
PLAY RECAP *********************************************************************************************************************************************************************************************192.168.1.169 : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0localhost : ok=4 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0The results will appear, in my configuration, in the folder /root/backup/2022-09-07T20:06:17Z.
[root@fedora ~]# ls -al /root/backup/2022-09-07T20:06:17Ztotal 4drwxr-xr-x 1 root root 54 Sep 7 16:06 .drwxr-xr-x 1 root root 240 Sep 7 16:06 ..-rw-r--r-- 1 root root 2169 Sep 7 16:06 192.168.1.169_os10_show_run