您好,我需要帮助编写一个查找网络中所有路由器和交换机的剧本。
环境:
- Ansible 2.8
- 蟒蛇 2.7
- 晚上测试网络
- 路由器和交换机都有ios
问题陈述:
从核心交换机开始,使用 cdp 邻居遍历所有路径,直到域内的最后一个交换机/路由器。网络的深度未知。
输出:JSON 包含网络设备的分层排序。
{
答:{A1,A2},
C:{C1,C5:{C5i:{..},C5j}
}
我的尝试:
---
- name: Backup show run (enable mode commands)
hosts: ["testrouter"]
gather_facts: false
connection: network_cli
vars:
ansible_network_os: ios
grand_parent: ["testrouter"]
tasks:
- name: CDP for "{{ inventory_hostname }}"
register: all_facts
ios_facts:
gather_subset: all
- name: filter cdp neighbors for all facts
debug:
msg: "Child of {{ inventory_hostname }} is {{ item.value[0].host }}"
loop: "{{ lookup('dict', all_facts.ansible_facts.ansible_net_neighbors) }}"
when: item.value|length == 1
- name: Remove previous grand_parent
set_fact:
root: "['{{ parent[0] }}']"
when: parent|length == 2
- name: Add the latest host as grand_parent
set_fact:
root: "{{ parent + [ inventory_hostname ] }}"
when: parent|length == 1
我之前使用 netmiko 在 python 中编写了这个脚本,但现在我们需要用 Ansible 编写它。
问题:
- 当我发现具有 cdp 邻居的新主机时,我不知道如何动态修改主机。
- 另外我需要递归来探索未知的深度
- 另外,因为我是第一次学习 Ansible,所以我担心我会把事情复杂化并写出臃肿的代码。
感谢您的时间。