Документация:
Все задания и вспомогательные файлы можно скачать в . Если в заданиях раздела есть задания с буквами (например, 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
Если задания с буквами получается сделать сразу, лучше делать их по порядку.
Создать функцию, которая генерирует конфигурацию для access-портов.
Функция ожидает, как аргумент, словарь access-портов, вида:
{'FastEthernet0/12':10, 'FastEthernet0/14':11, 'FastEthernet0/16':17, 'FastEthernet0/17':150}
Функция должна возвращать список всех портов в режиме access с конфигурацией на основе шаблона access_template.
В конце строк в списке не должно быть символа перевода строки.
Пример итогового списка (перевод строки после каждого элемента сделан для удобства чтения):
[ 'interface FastEthernet0/12', 'switchport mode access', 'switchport access vlan 10', 'switchport nonegotiate', 'spanning-tree portfast', 'spanning-tree bpduguard enable', 'interface FastEthernet0/17', 'switchport mode access', 'switchport access vlan 150', 'switchport nonegotiate', 'spanning-tree portfast', 'spanning-tree bpduguard enable', ...]
Проверить работу функции на примере словаря access_dict.
Ограничение: Все задания надо выполнять используя только пройденные темы.
def generate_access_config(access): ''' access - словарь access-портов, для которых необходимо сгенерировать конфигурацию, вида: { 'FastEthernet0/12':10, 'FastEthernet0/14':11, 'FastEthernet0/16':17} Возвращает список всех портов в режиме access с конфигурацией на основе шаблона ''' access_template = ['switchport mode access', 'switchport access vlan', 'switchport nonegotiate', 'spanning-tree portfast', 'spanning-tree bpduguard enable'] access_dict = { 'FastEthernet0/12':10, 'FastEthernet0/14':11, 'FastEthernet0/16':17, 'FastEthernet0/17':150 }
Сделать копию скрипта задания 9.1.
Дополнить скрипт:
Проверить работу функции на примере словаря access_dict, с генерацией конфигурации port-security и без.
Ограничение: Все задания надо выполнять используя только пройденные темы.
def generate_access_config(access): ''' access - словарь access-портов, для которых необходимо сгенерировать конфигурацию, вида: { 'FastEthernet0/12':10, 'FastEthernet0/14':11, 'FastEthernet0/16':17 } psecurity - контролирует нужна ли настройка Port Security. По умолчанию значение False - если значение True, то настройка выполняется с добавлением шаблона port_security - если значение False, то настройка не выполняется Возвращает список всех команд, которые были сгенерированы на основе шаблона ''' access_template = ['switchport mode access', 'switchport access vlan', 'switchport nonegotiate', 'spanning-tree portfast', 'spanning-tree bpduguard enable'] port_security = ['switchport port-security maximum 2', 'switchport port-security violation restrict', 'switchport port-security'] access_dict = { 'FastEthernet0/12':10, 'FastEthernet0/14':11, 'FastEthernet0/16':17, 'FastEthernet0/17':150 }
Сделать копию скрипта задания 9.1a.
Изменить скрипт таким образом, чтобы функция возвращала не список команд, а словарь:
['switchport mode access', 'switchport access vlan 10', 'switchport nonegotiate', 'spanning-tree portfast', 'spanning-tree bpduguard enable']
Проверить работу функции на примере словаря access_dict, с генерацией конфигурации port-security и без.
Ограничение: Все задания надо выполнять используя только пройденные темы.
def generate_access_config(access): ''' access - словарь access-портов, для которых необходимо сгенерировать конфигурацию, вида: { 'FastEthernet0/12':10, 'FastEthernet0/14':11, 'FastEthernet0/16':17 } psecurity - контролирует нужна ли настройка Port Security. По умолчанию значение False - если значение True, то настройка выполняется с добавлением шаблона port_security - если значение False, то настройка не выполняется Функция возвращает словарь: - ключи: имена интерфейсов, вида 'FastEthernet0/1' - значения: список команд, который надо выполнить на этом интерфейсе ''' access_template = ['switchport mode access', 'switchport access vlan', 'switchport nonegotiate', 'spanning-tree portfast', 'spanning-tree bpduguard enable'] port_security = ['switchport port-security maximum 2', 'switchport port-security violation restrict', 'switchport port-security'] access_dict = { 'FastEthernet0/12':10, 'FastEthernet0/14':11, 'FastEthernet0/16':17, 'FastEthernet0/17':150 }
Создать функцию, которая генерирует конфигурацию для trunk-портов.
Параметр trunk - это словарь trunk-портов.
Словарь trunk имеет такой формат (тестовый словарь trunk_dict уже создан):
{ 'FastEthernet0/1':[10,20], 'FastEthernet0/2':[11,30], 'FastEthernet0/4':[17] }
Функция должна возвращать список команд с конфигурацией на основе указанных портов и шаблона trunk_template.
В конце строк в списке не должно быть символа перевода строки.
Проверить работу функции на примере словаря trunk_dict.
Ограничение: Все задания надо выполнять используя только пройденные темы.
def generate_trunk_config(trunk): ''' trunk - словарь trunk-портов для которых необходимо сгенерировать конфигурацию. Возвращает список всех команд, которые были сгенерированы на основе шаблона ''' trunk_template = ['switchport trunk encapsulation dot1q', 'switchport mode trunk', 'switchport trunk native vlan 999', 'switchport trunk allowed vlan'] trunk_dict = { 'FastEthernet0/1':[10,20,30], 'FastEthernet0/2':[11,30], 'FastEthernet0/4':[17] }
Сделать копию скрипта задания 9.2
Изменить скрипт таким образом, чтобы функция возвращала не список команд, а словарь:
Проверить работу функции на примере словаря trunk_dict.
Ограничение: Все задания надо выполнять используя только пройденные темы.
def generate_trunk_config(trunk): ''' trunk - словарь trunk-портов, для которых необходимо сгенерировать конфигурацию, вида: { 'FastEthernet0/1':[10,20], 'FastEthernet0/2':[11,30], 'FastEthernet0/4':[17] } Возвращает словарь: - ключи: имена интерфейсов, вида 'FastEthernet0/1' - значения: список команд, который надо выполнить на этом интерфейсе ''' trunk_template = ['switchport trunk encapsulation dot1q', 'switchport mode trunk', 'switchport trunk native vlan 999', 'switchport trunk allowed vlan'] trunk_dict = { 'FastEthernet0/1':[10,20,30], 'FastEthernet0/2':[11,30], 'FastEthernet0/4':[17] }
Создать функцию get_int_vlan_map, которая обрабатывает конфигурационный файл коммутатора и возвращает два объекта:
{'FastEthernet0/12':10, 'FastEthernet0/14':11, 'FastEthernet0/16':17}
{'FastEthernet0/1':[10,20], 'FastEthernet0/2':[11,30], 'FastEthernet0/4':[17]}
Функция ожидает в качестве аргумента имя конфигурационного файла.
Проверить работу функции на примере файла config_sw1.txt
Ограничение: Все задания надо выполнять используя только пройденные темы.
Сделать копию скрипта задания 9.3.
Дополнить скрипт:
interface FastEthernet0/20 switchport mode access duplex auto
То есть, порт находится в VLAN 1
В таком случае, в словарь портов должна добавляться информация, что порт в VLAN 1
Пример словаря:
{'FastEthernet0/12':10, 'FastEthernet0/14':11, 'FastEthernet0/20':1 }
Функция ожидает в качестве аргумента имя конфигурационного файла.
Проверить работу функции на примере файла config_sw2.txt
Ограничение: Все задания надо выполнять используя только пройденные темы.
Создать функцию, которая обрабатывает конфигурационный файл коммутатора и возвращает словарь:
Функция ожидает в качестве аргумента имя конфигурационного файла.
Проверить работу функции на примере файла config_sw1.txt
При обработке конфигурационного файла, надо игнорировать строки, которые начинаются с '!', а также строки в которых содержатся слова из списка ignore.
Для проверки надо ли игнорировать строку, использовать функцию ignore_command.
Ограничение: Все задания надо выполнять используя только пройденные темы.
ignore = ['duplex', 'alias', 'Current configuration'] def ignore_command(command, ignore): ''' Функция проверяет содержится ли в команде слово из списка ignore. command - строка. Команда, которую надо проверить ignore - список. Список слов Возвращает True, если в команде содержится слово из списка ignore, False - если нет ''' return any(word in command for word in ignore)
Задача такая же, как и задании 9.4. Проверить работу функции надо на примере файла config_r1.txt
Обратите внимание на конфигурационный файл. В нём есть разделы с большей вложенностью, например, разделы:
Надо чтобы функция config_to_dict обрабатывала следующий уровень вложенности. При этом, не привязываясь к конкретным разделам. Она должна быть универсальной, и сработать, если это будут другие разделы.
Если уровня вложенности два:
Если уровня вложенности три:
На примере interface Ethernet0/3.100
{'interface Ethernet0/3.100':{ 'encapsulation dot1Q 100':[], 'xconnect 10.2.2.2 12100 encapsulation mpls': ['backup peer 10.4.4.4 14100', 'backup delay 1 1']}}
Ограничение: Все задания надо выполнять используя только пройденные темы.
ignore = ['duplex', 'alias', 'Current configuration'] def check_ignore(command, ignore): ''' Функция проверяет содержится ли в команде слово из списка ignore. command - строка. Команда, которую надо проверить ignore - список. Список слов Возвращает True, если в команде содержится слово из списка ignore, False - если нет ''' return any(word in command for word in ignore)