Все задания и вспомогательные файлы можно скачать в . Если в заданиях раздела есть задания с буквами (например, 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
Если задания с буквами получается сделать сразу, лучше делать их по порядку.
Переделать пример, который использовался в разделе TextFSM, в функцию.
Функция должна называться parse_output. Параметры функции:
Функция должна возвращать список:
Проверить работу функции на каком-то из примеров раздела.
Пример из раздела:
import sys import textfsm from tabulate import tabulate template = sys.argv[1] output_file = sys.argv[2] with open(template) as f, open(output_file) as output: re_table = textfsm.TextFSM(f) header = re_table.header result = re_table.ParseText(output.read()) print(result) print(tabulate(result, headers=header))
Переделать функцию parse_output из задания 22.1 таким образом, чтобы, вместо списка списков, она возвращала один список словарей:
То есть, для каждой строки будет один словарь в списке.
В этом задании нужно использовать функцию parse_output из задания 22.1. Она используется для того, чтобы получить структурированный вывод в результате обработки вывода команды.
Полученный вывод нужно записать в CSV формате.
Для записи вывода в CSV, нужно создать функцию list_to_csv, которая ожидает как аргументы:
Проверить работу функции на примере обработки команды sh ip int br (шаблон и вывод есть в разделе).
Сделать шаблон TextFSM для обработки вывода sh ip dhcp snooping binding. Вывод команды находится в файле output/sh_ip_dhcp_snooping.txt.
Шаблон должен обрабатывать и возвращать значения таких столбцов:
Проверить работу шаблона с помощью функции из задания 22.1.
На основе примера из раздела сделать функцию parse_command_dynamic.
Параметры функции:
Функция должна возвращать список словарей с результатами обработки вывода команды (как в задании 22.1a):
Проверить работу функции на примере вывода команды sh ip int br.
Пример из раздела:
import clitable output_sh_ip_route_ospf = open('output/sh_ip_route_ospf.txt').read() cli_table = clitable.CliTable('index', 'templates') attributes = {'Command': 'show ip route ospf', 'Vendor': 'Cisco'} cli_table.ParseCmd(output_sh_ip_route_ospf, attributes) print('CLI Table output:\n', cli_table) print('Formatted Table:\n', cli_table.FormattedTable()) data_rows = [list(row) for row in cli_table] header = list(cli_table.header) print(header) for row in data_rows: print(row)
Переделать функцию из задания 22.4:
В этом задании соединяется функциональность TextFSM и подключение к оборудованию.
Задача такая:
Для этого, воспользуемся функциями, которые были созданы ранее:
В этом упражнении нужно создать функцию send_and_parse_command:
Для функции send_show_command создан файл devices.yaml, в котором находятся параметры подключения к устройствам.
Проверить работу функции send_and_parse_command на команде sh ip int br.
Это задание похоже на задание 22.5, но в этом задании подключения надо выполнять параллельно с помощью потоков. Для параллельного подключения использовать модуль concurrent.futures.
В этом упражнении нужно создать функцию send_and_parse_command_parallel:
Проверить работу функции send_and_parse_command_parallel на команде sh ip int br.
import yaml test_command = "sh ip int br" devices = yaml.load(open('devices.yaml'))