Search code examples
datetimeansibleyamlswitching

Ansible IP Adress from Host to Variable and use in Playbook - Save Switch Config with Ansible


I want to save the startup and running config with ansible. My script works but only on one host. I need to change the name from the save file otherwise it will overwrite the old Configuration.

---
- hosts: switches
  gather_facts: yes
  vars:
    ansible_network_os: icx
    ansible_become: True
    ansible_become_method: enable


  tasks:
  - name: Backup Config Files
    icx_command:
      commands:
         - copy startup-config tftp 192.168.10.5 Ansible-startup-config.cfg
         - copy running-config tftp 192.168.10.5 Ansible-running-config.cfg

Now I want to have the ip address, time and date in the name so that they will not be overwritten when I start the script again.

I think about something like this as filename:

192.168.9.13-2021-04-08-18:25-startup-config.cfg
or an consecutive number

How can I do this?


Solution

  • The rough idea below.

    I'm not 100% sure facts gathered on ios populate ansible_default_ipv4. You will have to check that point and find the correct variable if needed. Note also you may have to run explicitly the icx_facts module to get all the info from your device.

    You can run the following ad-hoc commands to browse all available facts and choose the correct one if ever:

    ansible -i your_inventory some_host -m setup
    ansible -i your_inventory some_host -m icx_facts
    

    You can debug the ansible_date_time variable to see if an other key suits your needs better than below to create a time stamp. I reconstructed exactly the pattern in your question.

    Of course, you need to gather facts for these vars to be available (gather_facts: true on your play meets that requirement).

    And here is the sample task (untested, I don't have an ios device available for that)

      - name: Backup Config Files
        vars:
          ip: "{{ ansible_default_ipv4.address }}"
          stamp: "{{ ansible_date_time.date }}-{{ ansible_date_time.hour }}:{{ ansible_date_time.minute }}"
          prefix: "{{ ip }}-{{ stamp }}"
        icx_command:
          commands:
             - "copy startup-config tftp 192.168.10.5 {{ prefix }}-startup-config.cfg"
             - "copy running-config tftp 192.168.10.5 {{ prefix }}-running-config.cfg"