Все задания и вспомогательные файлы можно скачать в . Если в заданиях раздела есть задания с буквами (например, 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
Если задания с буквами получается сделать сразу, лучше делать их по порядку.
Создать функцию send_show_command.
Функция подключается по SSH (с помощью netmiko) к устройству и выполняет указанную команду.
Параметры функции:
Функция возвращает словарь с результатами выполнения команды:
Отправить команду command на все устройства из файла devices.yaml (для этого надо считать информацию из файла) с помощью функции send_show_command.
command = "sh ip int br"
Переделать функцию send_show_command из задания 19.1 таким образом, чтобы обрабатывалось исключение, которое генерируется при ошибке аутентификации на устройстве.
При возникновении ошибки, должно выводиться сообщение исключения.
Для проверки измените пароль на устройстве или в файле devices.yaml.
Дополнить функцию send_show_command из задания 19.1a таким образом, чтобы обрабатывалось не только исключение, которое генерируется при ошибке аутентификации на устройстве, но и исключение, которое генерируется, когда IP-адрес устройства недоступен.
При возникновении ошибки, должно выводиться сообщение исключения.
Для проверки измените IP-адрес на устройстве или в файле devices.yaml.
Создать функцию send_config_commands
Функция подключается по SSH (с помощью netmiko) к устройству и выполняет перечень команд в конфигурационном режиме на основании переданных аргументов.
Параметры функции:
Функция возвращает словарь с результатами выполнения команды:
Отправить список команд commands на все устройства из файла devices.yaml (для этого надо считать информацию из файла) с помощью функции send_config_commands.
commands = [ 'logging 10.255.255.1', 'logging buffered 20010', 'no logging console' ]
Дополнить функцию send_config_commands из задания 19.2
Добавить аргумент verbose, который контролирует будет ли результат выполнения команд выводиться на стандартный поток вывода.
По умолчанию, результат должен выводиться.
В этом задании необходимо переделать функцию send_config_commands из задания 19.2a или 19.2 и добавить проверку на ошибки.
При выполнении каждой команды, скрипт должен проверять результат на такие ошибки:
Если при выполнении какой-то из команд возникла ошибка, функция должна выводить сообщение на стандартный поток вывода с информацией о том, какая ошибка возникла, при выполнении какой команды и на каком устройстве.
При этом, параметр 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
Переделать функцию send_config_commands из задания 19.2b
Если при выполнении команды возникла ошибка, спросить пользователя надо ли выполнять остальные команды.
Варианты ответа [y]/n:
Функция send_config_commands по-прежнему должна возвращать кортеж из двух словарей:
Оба словаря в формате
Проверить функцию на командах с ошибкой.
В этом задании надо создать функцию send_cfg_to_devices, которая выполняет команды на нескольких устройствах последовательно и при этом выполняет проверку на ошибки в командах.
Параметры функции:
Функция должна проверять результат на такие ошибки:
Если при выполнении какой-то из команд возникла ошибка, функция должна выводить сообщение на стандартный поток вывода с информацией о том, какая ошибка возникла, при выполнении какой команды и на каком устройстве.
После обнаружения ошибки, функция должна спросить пользователя надо ли выполнять эту команду на других устройствах.
Варианты ответа [y]/n:
Функция send_cfg_to_devices должна возвращать кортеж из двух словарей:
Оба словаря в формате
В файле задания заготовлены команды с ошибками и без:
commands_with_errors = ['logging 0255.255.1', 'logging', 'i'] correct_commands = ['logging buffered 20010', 'ip http server'] commands = commands_with_errors+correct_commands
Создать функцию send_commands (для подключения по SSH используется netmiko).
Параметры функции:
В зависимости от того, какой аргумент был передан, функция вызывает разные функции внутри. При вызове функции, всегда будет передаваться только один из аргументов show, config, filename.
Далее комбинация из аргумента и соответствующей функции:
Функция возвращает словарь с результатами выполнения команды:
Проверить работу функции на примере:
commands = ['logging 10.255.255.1', 'logging buffered 20010', 'no logging console' ] command = "sh ip int br"
Создать функцию send_commands_to_devices (для подключения по SSH используется netmiko).
Параметры функции:
В этой функции должен использоваться список словарей, в котором не указаны имя пользователя, пароль, и пароль на enable (файл devices2.yaml).
Функция должна запрашивать имя пользователя, пароль и пароль на enable при старте. Пароль не должен отображаться при наборе.
Функция send_commands_to_devices должна использовать функцию send_commands из задания 19.3.
Дополнить функцию send_commands_to_devices таким образом, чтобы перед подключением к устройствам по SSH, выполнялась проверка доступности устройства pingом (можно вызвать команду ping в ОС).
Как выполнять команды ОС, описано в разделе . Там же есть пример функции с отправкой ping.
Если устройство доступно, можно выполнять подключение. Если не доступно, вывести сообщение о том, что устройство с определенным IP-адресом недоступно и не выполнять подключение к этому устройству.
Для удобства можно сделать отдельную функцию для проверки доступности и затем использовать ее в функции send_commands_to_devices.