With Ansible we can better and faster manage network infrastructure such as Cisco IOS and ASA.
If you want to change the IP address of an interface, add more ACE into the router, check running configuration with master configuration in ansible then apply the master configuration
- name: configure top level configuration ios_config: lines: hostname {{ inventory_hostname }} - name: configure interface settings ios_config: lines: - description test interface - ip address 172.31.1.1 255.255.255.0 parents: interface Ethernet1 - name: load new acl into device ios_config: lines: - 10 permit ip host 1.1.1.1 any log - 20 permit ip host 2.2.2.2 any log - 30 permit ip host 3.3.3.3 any log - 40 permit ip host 4.4.4.4 any log - 50 permit ip host 5.5.5.5 any log parents: ip access-list extended test before: no ip access-list extended test match: exact - name: check the running-config against master config ios_config: diff_config: intended intended_config: "{{ lookup('file', 'master.cfg') }}" - name: check the startup-config against the running-config ios_config: diff_against: startup diff_ignore_lines: - ntp clock .* - name: save running to startup when modified ios_config: save_when: modified
Example: backup configuration
hosts file(/etc/ansible/hosts):
[CSR-Routers] CSR-01 ansible_host=192.168.244.129 CSR-02 ansible_host=192.168.1.171
Playbook file (/etc/ansible/playbooks/backup.yaml)
--- - hosts:CSR-02 gather_facts: true connection: local tasks: - name: show run ios_command: commands: - show run host: "{{ ansible_host }}" username: frank password: cisco register: config - name: save output to /etc/ansible/backups copy: content: "{{ config.stout[0] }}" dest: "/etc/ansible/backups/show_run_{{ inventory_hostname }}.txt"
Reference
IOS config Module: http://docs.ansible.com/ansible/latest/ios_config_module.html
List of Network Modules: http://docs.ansible.com/ansible/latest/list_of_network_modules.html
Supported Network Platforms: https://access.redhat.com/solutions/3184741