Все задания и вспомогательные файлы можно скачать в . Если в заданиях раздела есть задания с буквами (например, 5.2a), то лучше выполнить сначала задания без букв, а затем с буквами. Задания с буквами, как правило, немного сложнее заданий без букв и развивают или усложняют идею в соответствующем задании без буквы.
Например, в разделе есть задания 5.1, 5.2, 5.2a, 5.2b, 5.3, 5.3a. Сначала лучше выполнить задания 5.1, 5.2, 5.3, а затем 5.2a, 5.2b, 5.3a
Если задания с буквами получается сделать сразу, лучше делать их по порядку.
В этом задании нужно:
Для выполнения задания нужно создать две функции.
Функция parse_sh_version:
Функция write_to_csv:
Остальное содержимое скрипта может быть в скрипте, а может быть в ещё одной функции.
Скрипт должен:
В файле routers_inventory.csv должны быть такие столбцы:
В скрипте, с помощью модуля glob, создан список файлов, имя которых начинается на sh_vers. Вы можете раскомментировать строку print(sh_version_files), чтобы посмотреть содержимое списка.
Кроме того, создан список заголовков (headers), который должен быть записан в CSV.
import glob sh_version_files = glob.glob('sh_vers*') #print(sh_version_files) headers = ['hostname', 'ios', 'image', 'uptime']
Создать функцию parse_sh_cdp_neighbors, которая обрабатывает вывод команды show cdp neighbors.
Функция ожидает, как аргумент, вывод команды одной строкой (не имя файла).
Функция должна возвращать словарь, который описывает соединения между устройствами.
Например, если как аргумент был передан такой вывод:
R4>show cdp neighbors Device ID Local Intrfce Holdtme Capability Platform Port ID R5 Fa 0/1 122 R S I 2811 Fa 0/1 R6 Fa 0/2 143 R S I 2811 Fa 0/0
Функция должна вернуть такой словарь:
{'R4': {'Fa0/1': {'R5': 'Fa0/1'}, 'Fa0/2': {'R6': 'Fa0/0'}}}
При этом интерфейсы могут быть записаны с пробелом Fa 0/0 или без Fa0/0.
Проверить работу функции на содержимом файла sh_cdp_n_sw1.txt
С помощью функции parse_sh_cdp_neighbors из задания 17.2, обработать вывод команды sh cdp neighbor из файлов:
Объединить все словари, которые возвращает функция parse_sh_cdp_neighbors, в один словарь topology и записать его содержимое в файл topology.yaml.
Структура словаря topology должна быть такой:
{'R4': {'Fa0/1': {'R5': 'Fa0/1'}, 'Fa0/2': {'R6': 'Fa0/0'}}, 'R5': {'Fa0/1': {'R4': 'Fa0/1'}}, 'R6': {'Fa0/0': {'R4': 'Fa0/2'}}}
При этом интерфейсы могут быть записаны с пробелом Fa 0/0 или без Fa0/0.
Не копировать код функции parse_sh_cdp_neighbors
Переделать функциональность скрипта из задания 17.2a, в функцию generate_topology_from_cdp.
Функция generate_topology_from_cdp должна быть создана с параметрами:
Функция возвращает словарь, который описывает топологию. Словарь должен быть в том же формате, что и в задании 17.2a.
Проверить работу функции generate_topology_from_cdp на файлах:
Записать полученный словарь в файл topology.yaml.
Не копировать код функции parse_sh_cdp_neighbors
С помощью функции draw_topology из файла draw_network_graph.py сгенерировать топологию, которая соответствует описанию в файле topology.yaml
Обратите внимание на то, какой формат данных ожидает функция draw_topology. Описание топологии из файла topology.yaml нужно преобразовать соответствующим образом, чтобы использовать функцию draw_topology.
Для решения задания можно создать любые вспомогательные функции.
Не копировать код функции draw_topology.
В итоге, должно быть сгенерировано изображение топологии. Результат должен выглядеть так же, как схема в файле task_17_2c_topology.svg
При этом:
Для выполнения этого задания, должен быть установлен graphviz:
apt-get install graphviz
И модуль python для работы с graphviz:
pip install graphviz