├── .idea ├── Ansible-Playbooks.iml ├── inspectionProfiles │ ├── Project_Default.xml │ └── profiles_settings.xml └── modules.xml ├── 01_IOS_Facts.yml ├── 02_cisco_enable_msg_var.yml ├── 03_cisco_ssh_key.yml ├── 04_ios_command_demo.yml ├── 05_ios_config.yml ├── 06_ios_config_from_file.yml ├── 07_ios_interface.yml ├── 08_ios_l2_interfaces.yml ├── 09_ios_l3_interface.yml ├── 10_ios_static_route.yml ├── 11_ios_user.yml ├── 12_ios_vlans.yml ├── 13_netconf_get_config.yml ├── 14_netconf_config_hostname.yml ├── 14_set_hostname.xml ├── 15_netconf_interface_and_user.yml ├── 15_set_interface.xml ├── 15_set_user.xml ├── 16_netconf_remove_config.yml ├── 16_remove_interface.xml ├── 16_remove_user.xml ├── 17_netconf_save_config.yml └── int_conf.txt /.idea/Ansible-Playbooks.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/inspectionProfiles/Project_Default.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 14 | -------------------------------------------------------------------------------- /.idea/inspectionProfiles/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /01_IOS_Facts.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: Test IOS Facts 3 | hosts: routers 4 | tasks: 5 | - debug: 6 | var: ansible_facts 7 | 8 | - name: Gather IOS Facts 02 9 | ios_facts: 10 | gather_subset: all 11 | register: all_subset 12 | 13 | - name: Print Subset All 03 14 | debug: 15 | var: all_subset 16 | 17 | - name: Gather HW 18 | ios_facts: 19 | gather_subset: hardware 20 | register: hw 21 | - name: Print HW 22 | debug: 23 | var: hw 24 | 25 | - name: Gather Int 26 | ios_facts: 27 | gather_subset: interfaces 28 | register: int 29 | - name: Print Interfaces 30 | debug: 31 | var: int 32 | -------------------------------------------------------------------------------- /02_cisco_enable_msg_var.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: Cisco Enable password, Debug- Var,msg 3 | hosts: routers 4 | 5 | tasks: 6 | - name: Get facts 7 | debug: 8 | msg: 9 | - "Hostname is: {{ansible_net_hostname}}" 10 | - "Image is: {{ansible_net_image}}" 11 | # var: ansible_facts 12 | - name: Execute show command to test enable password 13 | ios_command: 14 | commands: 15 | - show run 16 | 17 | - name: Get facts with Variable Name 18 | ios_facts: 19 | gather_subset: all 20 | register: saved_facts 21 | 22 | - debug: 23 | var: saved_facts 24 | 25 | - debug: 26 | msg: 27 | - "{{saved_facts['ansible_facts']['ansible_net_hostname']}}" 28 | - "{{saved_facts['ansible_facts']['ansible_net_all_ipv4_addresses']}}" 29 | -------------------------------------------------------------------------------- /03_cisco_ssh_key.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: Cisco Enable password, Debug- Var,msg 3 | hosts: routers 4 | 5 | tasks: 6 | - name: Printing Username 7 | debug: 8 | msg: "{{ansible_user}}" 9 | - name: Get facts 10 | debug: 11 | msg: 12 | - "Hostname is: {{ansible_net_hostname}}" 13 | - "Image is: {{ansible_net_image}}" 14 | # var: ansible_facts 15 | - name: Execute show command to test enable password 16 | ios_command: 17 | commands: 18 | - show run 19 | 20 | - name: Get facts with Variable Name 21 | ios_facts: 22 | gather_subset: all 23 | register: saved_facts 24 | 25 | - debug: 26 | var: saved_facts 27 | 28 | - debug: 29 | msg: 30 | - "{{saved_facts['ansible_facts']['ansible_net_hostname']}}" 31 | - "{{saved_facts['ansible_facts']['ansible_net_all_ipv4_addresses']}}" 32 | -------------------------------------------------------------------------------- /04_ios_command_demo.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: Cisco IOS Command Demo 3 | hosts: routers 4 | 5 | tasks: 6 | - name: Execute show commands 7 | ios_command: 8 | commands: 9 | - show run 10 | - show ip int brief 11 | register: sh_outputs 12 | - debug: 13 | msg: "{{sh_outputs.stdout_lines}}" 14 | 15 | - name: Check Conditions 16 | ios_command: 17 | commands: 18 | - show run 19 | - show ip int brief 20 | match: any 21 | wait_for: 22 | - result[0] contains description connected to core 23 | - result[1] contains GigabitEthernet0/1 24 | -------------------------------------------------------------------------------- /05_ios_config.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: IOS Config Demo 3 | hosts: routers_ssh_pass 4 | 5 | tasks: 6 | - name: Config mode command 7 | ios_config: 8 | lines: 9 | - ip domain name test.com 10 | - name: Configure interface with IP 11 | ios_config: 12 | parents: interface GigabitEthernet0/1 13 | lines: 14 | - ip address 2.2.2.2 255.255.255.0 15 | - description ansible_configured 16 | diff_against: startup 17 | save_when: modified 18 | 19 | - name: Configure Multiple interfaces 20 | ios_config: 21 | parents: "{{ item }}" 22 | lines: 23 | - description backup_int 24 | after: 25 | - no shutdown 26 | save_when: modified 27 | with_items: 28 | - interface GigabitEthernet0/2 29 | - interface GigabitEthernet0/3 -------------------------------------------------------------------------------- /06_ios_config_from_file.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: IOS Config Demo 3 | hosts: routers_ssh_pass 4 | 5 | tasks: 6 | - name: Config from file 7 | ios_config: 8 | src: int_conf.txt 9 | diff_against: startup 10 | save_when: modified 11 | 12 | - name: Get facts 13 | ios_facts: 14 | gather_subset: all 15 | 16 | - debug: 17 | msg: "{{ ansible_net_interfaces }}" -------------------------------------------------------------------------------- /07_ios_interface.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: IOS Config Demo 3 | hosts: routers_ssh_pass 4 | 5 | tasks: 6 | - name: Interface Configuration 7 | ios_interfaces: 8 | config: 9 | - name: GigabitEthernet0/1 10 | description: Ansible Configured 11 | enabled: yes 12 | duplex: full 13 | speed: 1000 14 | state: merged 15 | register: int 16 | 17 | - debug: 18 | var: int.before 19 | - debug: 20 | var: int.commands 21 | - debug: 22 | var: int.after 23 | 24 | #################### Delete ############## 25 | - name: Interface Configuration 26 | ios_interfaces: 27 | config: 28 | - name: GigabitEthernet0/1 29 | state: deleted 30 | register: int 31 | - debug: 32 | var: int.commands 33 | 34 | #################### Overridden ############## 35 | - name: Interface Configuration 36 | ios_interfaces: 37 | config: 38 | - name: GigabitEthernet0/1 39 | enabled: yes 40 | state: overridden 41 | 42 | ############# Replaced ############### 43 | - name: Interface Configuration 44 | ios_interfaces: 45 | config: 46 | - name: GigabitEthernet0/1 47 | description: Ansible Configured 48 | enabled: yes 49 | duplex: full 50 | speed: 1000 51 | state: replaced 52 | register: int 53 | - debug: 54 | var: int.before 55 | - debug: 56 | var: int.commands 57 | - debug: 58 | var: int.after 59 | -------------------------------------------------------------------------------- /08_ios_l2_interfaces.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: IOS Config Demo 3 | hosts: switches 4 | 5 | tasks: 6 | - name: Configure Access 7 | ios_l2_interfaces: 8 | config: 9 | - name: GigabitEthernet0/2 10 | access: 11 | vlan: 10 12 | state: merged 13 | ############# Trunk with Merged ################## 14 | - name: Configure Trunk 15 | ios_l2_interfaces: 16 | config: 17 | - name: GigabitEthernet0/2 18 | trunk: 19 | allowed_vlans: 11-15 20 | encapsulation: dot1q 21 | native_vlan: 5 22 | state: merged 23 | 24 | ############ Trunk with Replaced ################## 25 | - name: Configure Trunk 26 | ios_l2_interfaces: 27 | config: 28 | - name: GigabitEthernet0/2 29 | trunk: 30 | allowed_vlans: 11-15 31 | encapsulation: dot1q 32 | native_vlan: 5 33 | state: replaced 34 | register: int 35 | 36 | - debug: 37 | var: int.before 38 | - debug: 39 | var: int.commands 40 | - debug: 41 | var: int.after 42 | 43 | 44 | ############ Trunk with Replaced ################## 45 | - name: Configure Trunk 46 | ios_l2_interfaces: 47 | config: 48 | - name: GigabitEthernet0/2 49 | trunk: 50 | allowed_vlans: 11-15 51 | encapsulation: dot1q 52 | native_vlan: 5 53 | state: overridden -------------------------------------------------------------------------------- /09_ios_l3_interface.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: IOS Config Demo 3 | hosts: routers_ssh_pass 4 | tasks: 5 | ################### IP Config Merged ############## 6 | - name: Interface Configuration 7 | ios_l3_interfaces: 8 | config: 9 | - name: GigabitEthernet0/1 10 | ipv4: 11 | - address: 2.2.2.5 255.255.255.0 12 | state: merged 13 | register: int 14 | 15 | - debug: 16 | var: int.before 17 | - debug: 18 | var: int.commands 19 | - debug: 20 | var: int.after 21 | 22 | ################## IP Config Replaced ############## 23 | - name: Interface Configuration 24 | ios_l3_interfaces: 25 | config: 26 | - name: GigabitEthernet0/1 27 | ipv4: 28 | - address: 2.2.2.6 255.255.255.0 29 | state: replaced 30 | register: int 31 | 32 | - debug: 33 | var: int.before 34 | - debug: 35 | var: int.commands 36 | - debug: 37 | var: int.after 38 | 39 | ################## IP Config Deleted ############## 40 | - name: Interface Configuration 41 | ios_l3_interfaces: 42 | config: 43 | - name: GigabitEthernet0/1 44 | - name: GigabitEthernet0/2 45 | state: deleted 46 | 47 | ################## IP Config Overridden ############## 48 | - name: Interface Configuration 49 | ios_l3_interfaces: 50 | config: 51 | - name: GigabitEthernet0/1 52 | ipv4: 53 | - address: 2.2.2.7 255.255.255.0 54 | state: overridden 55 | -------------------------------------------------------------------------------- /10_ios_static_route.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: IOS Static Route Demo 3 | hosts: routers_ssh_pass 4 | tasks: 5 | ################### IP Config Merged ############## 6 | - name: Config Static Route1 7 | ios_static_route: 8 | prefix: 10.1.1.0 9 | mask: 255.255.255.0 10 | next_hop: 192.168.0.1 11 | state: present 12 | register: route1 13 | - debug: 14 | var: route1.commands 15 | ################### IP Config Merged ############## 16 | - name: Config Static Route2 17 | ios_static_route: 18 | prefix: 10.1.2.0 19 | mask : 255.255.255.0 20 | interface: GigabitEthernet0/1 21 | state: present 22 | register: route2 23 | - debug: 24 | var: route2.commands 25 | 26 | ################### IP Config Aggregate ############## 27 | - name: Config Static Route3 28 | ios_static_route: 29 | aggregate: 30 | - { prefix: 10.1.3.0, mask : 255.255.255.0, interface: GigabitEthernet0/1} 31 | - { prefix: 10.1.4.0, mask : 255.255.255.0, interface: GigabitEthernet0/1} 32 | state: present 33 | register: route3 34 | - debug: 35 | var: route3.commands 36 | 37 | ################### IP Route Delete############## 38 | - name: Remove static Route 39 | ios_static_route: 40 | prefix: 10.1.2.0 41 | mask : 255.255.255.0 42 | interface: GigabitEthernet0/1 43 | state: absent 44 | register: route2 45 | - debug: 46 | var: route2.commands -------------------------------------------------------------------------------- /11_ios_user.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: IOS Add User Demo 3 | hosts: routers_ssh_pass 4 | tasks: 5 | # ################### IP Config Merged ############## 6 | - name: Add User 7 | ios_user: 8 | name: ansible_admin 9 | hashed_password: 10 | type: 5 11 | value: $1$pass$q.8O0ezj5JxZNEcvsQvQR0 12 | privilege: 15 13 | state: present 14 | register: add_user 15 | - debug: 16 | var: add_user.commands 17 | 18 | ################### IP Config Merged ############## 19 | - name: Add User 20 | ios_user: 21 | name: ansible_admin 22 | state: absent 23 | register: remove_user 24 | - debug: 25 | var: remove_user.commands 26 | 27 | ################### Purge Method ############## 28 | - name: Purge user account 29 | ios_user: 30 | aggregate: 31 | - name: admin1 32 | purge: yes 33 | register: remove_user 34 | - debug: 35 | var: remove_user.commands -------------------------------------------------------------------------------- /12_ios_vlans.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: IOS Config Demo 3 | hosts: switches 4 | ### Using Merged 5 | tasks: 6 | - name: Create VLAN 7 | ios_vlans: 8 | config: 9 | - name: vlan_100 10 | vlan_id: 100 11 | shutdown: enabled 12 | state: suspend 13 | state: merged 14 | register: vln 15 | 16 | - debug: 17 | var: vln.before 18 | - debug: 19 | var: vln.commands 20 | - debug: 21 | var: vln.after 22 | 23 | ####### Replaced 24 | - name: Create VLAN 25 | ios_vlans: 26 | config: 27 | - name: vlan_100 28 | vlan_id: 100 29 | shutdown: enabled 30 | state: suspend 31 | state: replaced 32 | register: vln 33 | 34 | - debug: 35 | var: vln.before 36 | - debug: 37 | var: vln.commands 38 | - debug: 39 | var: vln.after 40 | 41 | ###### Create Multiple VLANs 42 | - name: Create Multiple VLANs 43 | ios_vlans: 44 | config: 45 | - name: vlan_101 46 | vlan_id: 101 47 | - name: vlan_102 48 | vlan_id: 102 49 | - name: vlan_103 50 | vlan_id: 103 51 | state: merged 52 | register: vln 53 | 54 | - debug: 55 | var: vln.before 56 | - debug: 57 | var: vln.commands 58 | - debug: 59 | var: vln.after 60 | 61 | ##### Create Delete VLANs 62 | - name: Create Multiple VLANs 63 | ios_vlans: 64 | config: 65 | - vlan_id: 102 66 | - vlan_id: 103 67 | state: deleted 68 | register: vln 69 | 70 | - debug: 71 | var: vln.before 72 | - debug: 73 | var: vln.commands 74 | - debug: 75 | var: vln.after 76 | 77 | ###### Create Multiple VLANs 78 | - name: Create Multiple VLANs 79 | ios_vlans: 80 | config: 81 | - name: vlan_100 82 | vlan_id: 100 83 | - name: vlan_101 84 | vlan_id: 101 85 | - name: vlan_102 86 | vlan_id: 102 87 | - name: vlan_103 88 | vlan_id: 103 89 | state: overridden 90 | register: vln 91 | 92 | - debug: 93 | var: vln.before 94 | - debug: 95 | var: vln.commands 96 | - debug: 97 | var: vln.after -------------------------------------------------------------------------------- /13_netconf_get_config.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: Get Config 3 | hosts: lab_iosxe 4 | 5 | tasks: 6 | ########## Get COnfig 7 | # - name: Print Running Config 8 | # netconf_get: 9 | # source: running 10 | # display: json 11 | # register: config_out 12 | # - debug: 13 | # var: config_out["output"] 14 | 15 | ####### Get Hostname 16 | - name: Get Hostname 17 | netconf_get: 18 | source: running 19 | display: json 20 | filter: 21 | 22 | 23 | 24 | register: config_out 25 | - debug: 26 | var: config_out["output"] 27 | 28 | # ###### Get Interface 29 | - name: Get Interfaces 30 | netconf_get: 31 | source: running 32 | display: json 33 | filter: 34 | 35 | 36 | 37 | register: config_out 38 | - debug: 39 | var: config_out["output"] 40 | 41 | ###### Get Username 42 | - name: Get Username 43 | netconf_get: 44 | source: running 45 | display: json 46 | filter: 47 | 48 | 49 | 50 | register: config_out 51 | - debug: 52 | var: config_out["output"] -------------------------------------------------------------------------------- /14_netconf_config_hostname.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: Configure Hostname 3 | hosts: lab_iosxe 4 | 5 | tasks: 6 | # ########## Configure Hostname 7 | - name: Direct content 8 | netconf_config: 9 | backup: yes 10 | content: | 11 | 12 | 13 | CSR01 14 | 15 | 16 | 17 | ########## Configure Hostname 18 | - name: From file 19 | netconf_config: 20 | backup: yes 21 | content: "{{ lookup('file', '14_set_hostname.xml')}}" 22 | register: netconf_data 23 | - debug: 24 | var: netconf_data.server_capabilities 25 | -------------------------------------------------------------------------------- /14_set_hostname.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | CSR03 4 | 5 | -------------------------------------------------------------------------------- /15_netconf_interface_and_user.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: Configure Interface and User 3 | hosts: lab_iosxe 4 | 5 | tasks: 6 | ########## Configure Interface 7 | - name: From file 8 | netconf_config: 9 | backup: yes 10 | content: "{{ lookup('file', '15_set_interface.xml')}}" 11 | 12 | ########## Configure Username 13 | - name: From file 14 | netconf_config: 15 | backup: yes 16 | content: "{{ lookup('file', '15_set_user.xml')}}" -------------------------------------------------------------------------------- /15_set_interface.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | GigabitEthernet2 6 | ianaift:ethernetCsmacd 8 | 9 | 10 | true 11 | 13 |
14 | 22.22.22.4 15 | 255.255.255.0 16 |
17 |
18 | 20 | 21 |
22 |
23 |
-------------------------------------------------------------------------------- /15_set_user.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | netconf_test 6 | 15 7 | 8 | 0 9 | password123 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /16_netconf_remove_config.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: Delete Interface and User 3 | hosts: lab_iosxe 4 | 5 | tasks: 6 | ########## Configure Interface 7 | - name: From file 8 | netconf_config: 9 | backup: yes 10 | content: "{{ lookup('file', '16_remove_interface.xml')}}" 11 | 12 | ########## Configure Username 13 | - name: From file 14 | netconf_config: 15 | backup: yes 16 | content: "{{ lookup('file', '16_remove_user.xml')}}" -------------------------------------------------------------------------------- /16_remove_interface.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | GigabitEthernet2 6 | ianaift:ethernetCsmacd 8 | 9 | 10 | true 11 | 13 |
14 | 22.22.22.4 15 | 255.255.255.0 16 |
17 |
18 | 20 | 21 |
22 |
23 |
-------------------------------------------------------------------------------- /16_remove_user.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | netconf_test 6 | 15 7 | 8 | 0 9 | password123 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /17_netconf_save_config.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: Save Config 3 | hosts: lab_iosxe 4 | 5 | tasks: 6 | ########## Configure Interface 7 | - name: Save Config 8 | netconf_rpc: 9 | rpc: save-config 10 | xmlns: "http://cisco.com/yang/cisco-ia" 11 | register: reply 12 | - debug: 13 | var: reply -------------------------------------------------------------------------------- /int_conf.txt: -------------------------------------------------------------------------------- 1 | interface GigabitEthernet0/1 2 | ip address 22.2.2.1 255.255.255.0 --------------------------------------------------------------------------------