Книга: PyNEng
Назад: Netmiko
Дальше: 20. Одновременное подключение к нескольким устройствам

Дополнительные материалы

Дополнительные материалы

Документация:

Статьи:

Задания

Задания

Все задания и вспомогательные файлы можно скачать в . Если в заданиях раздела есть задания с буквами (например, 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

Если задания с буквами получается сделать сразу, лучше делать их по порядку.

Задание 19.1

Создать функцию send_show_command.

Функция подключается по SSH (с помощью netmiko) к устройству и выполняет указанную команду.

Параметры функции:

  • device - словарь с параметрами подключения к устройству
  • command - команда, которую надо выполнить

Функция возвращает словарь с результатами выполнения команды:

  • ключ - IP устройства
  • значение - результат выполнения команды

Отправить команду command на все устройства из файла devices.yaml (для этого надо считать информацию из файла) с помощью функции send_show_command.

command = "sh ip int br" 

Задание 19.1a

Переделать функцию send_show_command из задания 19.1 таким образом, чтобы обрабатывалось исключение, которое генерируется при ошибке аутентификации на устройстве.

При возникновении ошибки, должно выводиться сообщение исключения.

Для проверки измените пароль на устройстве или в файле devices.yaml.

Задание 19.1b

Дополнить функцию send_show_command из задания 19.1a таким образом, чтобы обрабатывалось не только исключение, которое генерируется при ошибке аутентификации на устройстве, но и исключение, которое генерируется, когда IP-адрес устройства недоступен.

При возникновении ошибки, должно выводиться сообщение исключения.

Для проверки измените IP-адрес на устройстве или в файле devices.yaml.

Задание 19.2

Создать функцию send_config_commands

Функция подключается по SSH (с помощью netmiko) к устройству и выполняет перечень команд в конфигурационном режиме на основании переданных аргументов.

Параметры функции:

  • device - словарь с параметрами подключения к устройству
  • config_commands - список команд, которые надо выполнить

Функция возвращает словарь с результатами выполнения команды:

  • ключ - IP устройства
  • значение - вывод с выполнением команд

Отправить список команд commands на все устройства из файла devices.yaml (для этого надо считать информацию из файла) с помощью функции send_config_commands.

 commands = [ 'logging 10.255.255.1',              'logging buffered 20010',              'no logging console' ] 

Задание 19.2a

Дополнить функцию send_config_commands из задания 19.2

Добавить аргумент verbose, который контролирует будет ли результат выполнения команд выводиться на стандартный поток вывода.

По умолчанию, результат должен выводиться.

Задание 19.2b

В этом задании необходимо переделать функцию send_config_commands из задания 19.2a или 19.2 и добавить проверку на ошибки.

При выполнении каждой команды, скрипт должен проверять результат на такие ошибки:

  • Invalid input detected, Incomplete command, Ambiguous command

Если при выполнении какой-то из команд возникла ошибка, функция должна выводить сообщение на стандартный поток вывода с информацией о том, какая ошибка возникла, при выполнении какой команды и на каком устройстве.

При этом, параметр verbose также должен работать, но теперь он отвечает за вывод только тех команд, которые выполнились корректно.

Функция send_config_commands теперь должна возвращать кортеж из двух словарей:

  • первый словарь с выводом команд, которые выполнились без ошибки
  • второй словарь с выводом команд, которые выполнились с ошибками

Оба словаря в формате:

  • ключ - команда
  • значение - вывод с выполнением команд

Отправить список команд commands на все устройства из файла devices.yaml (для этого надо считать информацию из файла) с помощью функции send_config_commands.

Примеры команд с ошибками:

R1(config)#logging 0255.255.1                    ^ % Invalid input detected at '^' marker.  R1(config)#logging % Incomplete command.  R1(config)#i % Ambiguous command:  "i" 

В файле задания заготовлены команды с ошибками и без:

commands_with_errors = ['logging 0255.255.1', 'logging', 'i'] correct_commands = ['logging buffered 20010', 'ip http server']  commands = commands_with_errors+correct_commands 

Задание 19.2c

Переделать функцию send_config_commands из задания 19.2b

Если при выполнении команды возникла ошибка, спросить пользователя надо ли выполнять остальные команды.

Варианты ответа [y]/n:

  • y - выполнять остальные команды (значение по умолчанию)
  • n - не выполнять остальные команды

Функция send_config_commands по-прежнему должна возвращать кортеж из двух словарей:

  • первый словарь с выводом команд, которые выполнились без ошибки
  • второй словарь с выводом команд, которые выполнились с ошибками

Оба словаря в формате

  • ключ - команда
  • значение - вывод с выполнением команд

Проверить функцию на командах с ошибкой.

Задание 19.2d

В этом задании надо создать функцию send_cfg_to_devices, которая выполняет команды на нескольких устройствах последовательно и при этом выполняет проверку на ошибки в командах.

Параметры функции:

  • devices_list - список словарей с параметрами подключения к устройствам, которым надо передать команды
  • config_commands - список команд, которые надо выполнить

Функция должна проверять результат на такие ошибки:

  • Invalid input detected, Incomplete command, Ambiguous command

Если при выполнении какой-то из команд возникла ошибка, функция должна выводить сообщение на стандартный поток вывода с информацией о том, какая ошибка возникла, при выполнении какой команды и на каком устройстве.

После обнаружения ошибки, функция должна спросить пользователя надо ли выполнять эту команду на других устройствах.

Варианты ответа [y]/n:

  • y - выполнять команду на оставшихся устройствах (значение по умолчанию)
  • n - не выполнять команду на оставшихся устройствах

Функция send_cfg_to_devices должна возвращать кортеж из двух словарей:

  • первый словарь с выводом команд, которые выполнились без ошибки
  • второй словарь с выводом команд, которые выполнились с ошибками

Оба словаря в формате

  • ключ - IP устройства
  • значение - вложенный словарь:
    • ключ - команда
    • значение - вывод с выполнением команд

В файле задания заготовлены команды с ошибками и без:

commands_with_errors = ['logging 0255.255.1', 'logging', 'i'] correct_commands = ['logging buffered 20010', 'ip http server']  commands = commands_with_errors+correct_commands 

Задание 19.3

Создать функцию send_commands (для подключения по SSH используется netmiko).

Параметры функции:

  • device - словарь с параметрами подключения к устройству, которому надо передать команды
  • show - одна команда show (строка)
  • filename - имя файла, в котором находятся команды, которые надо выполнить (строка)
  • config - список с командами, которые надо выполнить в конфигурационном режиме

В зависимости от того, какой аргумент был передан, функция вызывает разные функции внутри. При вызове функции, всегда будет передаваться только один из аргументов show, config, filename.

Далее комбинация из аргумента и соответствующей функции:

  • show - функция send_show_command из задания 19.1
  • config - функция send_config_commands из задания 19.2
  • filename - функция send_commands_from_file (ее надо написать по аналогии с предыдущими)

Функция возвращает словарь с результатами выполнения команды:

  • ключ - IP устройства
  • значение - вывод с выполнением команд

Проверить работу функции на примере:

  • устройств из файла devices.yaml (для этого надо считать информацию из файла)
  • и различных комбинация аргумента с командами:
    • списка команд commands
    • команды command
    • файла config.txt
 commands = ['logging 10.255.255.1',             'logging buffered 20010',             'no logging console' ] command = "sh ip int br" 

Задание 19.4

Создать функцию send_commands_to_devices (для подключения по SSH используется netmiko).

Параметры функции:

  • devices_list - список словарей с параметрами подключения к устройствам, которым надо передать команды
  • show - одна команда show (строка)
  • filename - имя файла, в котором находятся команды, которые надо выполнить (строка)
  • config - список с командами, которые надо выполнить в конфигурационном режиме

В этой функции должен использоваться список словарей, в котором не указаны имя пользователя, пароль, и пароль на enable (файл devices2.yaml).

Функция должна запрашивать имя пользователя, пароль и пароль на enable при старте. Пароль не должен отображаться при наборе.

Функция send_commands_to_devices должна использовать функцию send_commands из задания 19.3.

Задание 19.4a

Дополнить функцию send_commands_to_devices таким образом, чтобы перед подключением к устройствам по SSH, выполнялась проверка доступности устройства pingом (можно вызвать команду ping в ОС).

Как выполнять команды ОС, описано в разделе . Там же есть пример функции с отправкой ping.

Если устройство доступно, можно выполнять подключение. Если не доступно, вывести сообщение о том, что устройство с определенным IP-адресом недоступно и не выполнять подключение к этому устройству.

Для удобства можно сделать отдельную функцию для проверки доступности и затем использовать ее в функции send_commands_to_devices.

Назад: Netmiko
Дальше: 20. Одновременное подключение к нескольким устройствам