├── .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 |
4 |
5 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/.idea/inspectionProfiles/profiles_settings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
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
--------------------------------------------------------------------------------