I have a group of switches that users keep asking me to locate mac address for in order to trace down the exact port and edit that port to assign it in new VLAN. Rather than logging into each switch and tracking down the switch where the mac resides, I created a basic ansible playbook to help me with this. This has been a huge time saver. Hopefully this can help someone else (It helps if your switch ports have descriptions):
---
- name: Find mac address in sec-switches
hosts: sec-switch
gather_facts: false
connection: local
vars_prompt:
- name: mac
prompt: What is the mac address?
private: no
tasks:
-
name: debugging
ansible.builtin.debug:
msg: 'Searching for {{ mac }}'
-
name: search
ios_command:
commands:
- "show mac address-table | include {{ mac }}"
register: printout
- set_fact:
intf: |
{{printout.stdout_lines[0] |
map('regex_replace','^(?:[^ ]*\ ){12}([^ ]*)') |
list }}
-
name: show int desc
ios_command:
commands:
- "sh interfaces description | inc {{ intf[0].strip() }}"
register: printout2
- name: View output
debug:
var: printout2
<Snippet of output>
ok: [switch9] => {
“printout2”: {
“changed”: false,
“failed”: false,
“stdout”: [
“Gi1/0/42 up up SEG 12 “
],
“stdout_lines”: [
[
“Gi1/0/42 up up SEG1 2”
]
]
}
}
ok: [switch20] => {
“printout2”: {
“changed”: false,
“failed”: false,
“stdout”: [
“Gi1/0/25 up up UPLINK”
],
“stdout_lines”: [
[
“Gi1/0/25 up up UPLINK”
Special shout out to rajthecomputerguy, who helped me by suggesting:
Use strip() method to get rid of whitespace debug: var: intf[0].strip()