- ru
- Language: en
- Documentation version: latest
Задания
Warning
Начиная с раздела “9. Функции” для проверки заданий есть автоматические тесты. Они помогают проверить все ли соответствует поставленной задаче, а также дают обратный отклик по тому, что не соответствует задаче. Как правило, после первого периода адаптации к тестам, становится проще делать задания с тестами.
Задание 20.1
Создать функцию generate_config.
Параметры функции:
template - путь к файлу с шаблоном (например, “templates/for.txt”)
data_dict - словарь со значениями, которые надо подставить в шаблон
Функция должна возвращать строку с конфигурацией, которая была сгенерирована.
Проверить работу функции на шаблоне templates/for.txt и данных из файла data_files/for.yml.
import yaml
# так должен выглядеть вызов функции
if __name__ == "__main__":
data_file = "data_files/for.yml"
template_file = "templates/for.txt"
with open(data_file) as f:
data = yaml.safe_load(f)
print(generate_config(template_file, data))
Задание 20.2
Создать шаблон templates/cisco_router_base.txt. В шаблон templates/cisco_router_base.txt должно быть включено содержимое шаблонов:
templates/cisco_base.txt
templates/alias.txt
templates/eem_int_desc.txt
При этом, нельзя копировать текст шаблонов.
Проверьте шаблон templates/cisco_router_base.txt, с помощью функции generate_config из задания 20.1. Не копируйте код функции generate_config.
В качестве данных, используйте информацию из файла data_files/router_info.yml
Задание 20.3
Создайте шаблон templates/ospf.txt на основе конфигурации OSPF в файле cisco_ospf.txt. Пример конфигурации дан, чтобы показать синтаксис.
Шаблон надо создавать вручную, скопировав части конфига в соответствующий шаблон.
Какие значения должны быть переменными:
номер процесса. Имя переменной - process
router-id. Имя переменной - router_id
reference-bandwidth. Имя переменной - ref_bw
интерфейсы, на которых нужно включить OSPF. Имя переменной - ospf_intf. На месте этой переменной ожидается список словарей с такими ключами:
name - имя интерфейса, вида Fa0/1, Vlan10, Gi0/0
ip - IP-адрес интерфейса, вида 10.0.1.1
area - номер зоны
passive - является ли интерфейс пассивным. Допустимые значения: True или False
Для всех интерфейсов в списке ospf_intf, надо сгенерировать строки:
network x.x.x.x 0.0.0.0 area x
Если интерфейс пассивный, для него должна быть добавлена строка:
passive-interface x
Для интерфейсов, которые не являются пассивными, в режиме конфигурации интерфейса, надо добавить строку:
ip ospf hello-interval 1
Все команды должны быть в соответствующих режимах.
Проверьте получившийся шаблон templates/ospf.txt, на данных в файле data_files/ospf.yml, с помощью функции generate_config из задания 20.1. Не копируйте код функции generate_config.
В результате должна получиться конфигурация такого вида (команды в режиме router ospf не обязательно должны быть в таком порядке, главное чтобы они были в нужном режиме):
router ospf 10
router-id 10.0.0.1
auto-cost reference-bandwidth 20000
network 10.255.0.1 0.0.0.0 area 0
network 10.255.1.1 0.0.0.0 area 0
network 10.255.2.1 0.0.0.0 area 0
network 10.0.10.1 0.0.0.0 area 2
network 10.0.20.1 0.0.0.0 area 2
passive-interface Fa0/0.10
passive-interface Fa0/0.20
interface Fa0/1
ip ospf hello-interval 1
interface Fa0/1.100
ip ospf hello-interval 1
interface Fa0/1.200
ip ospf hello-interval 1
Задание 20.4
Создайте шаблон templates/add_vlan_to_switch.txt, который будет использоваться при необходимости добавить VLAN на коммутатор.
В шаблоне должны поддерживаться возможности:
добавления VLAN и имени VLAN
добавления VLAN как access, на указанном интерфейсе
добавления VLAN в список разрешенных, на указанные транки
Если VLAN необходимо добавить как access, надо настроить и режим интерфейса и добавить его в VLAN:
interface Gi0/1
switchport mode access
switchport access vlan 5
Для транков, необходимо только добавить VLAN в список разрешенных:
interface Gi0/10
switchport trunk allowed vlan add 5
Имена переменных надо выбрать на основании примера данных, в файле data_files/add_vlan_to_switch.yaml.
Проверьте шаблон templates/add_vlan_to_switch.txt на данных в файле data_files/add_vlan_to_switch.yaml, с помощью функции generate_config из задания 20.1. Не копируйте код функции generate_config.
Задание 20.5
Создать шаблоны templates/gre_ipsec_vpn_1.txt и templates/gre_ipsec_vpn_2.txt, которые генерируют конфигурацию IPsec over GRE между двумя маршрутизаторами.
Шаблон templates/gre_ipsec_vpn_1.txt создает конфигурацию для одной стороны туннеля, а templates/gre_ipsec_vpn_2.txt - для второй.
Примеры итоговой конфигурации, которая должна создаваться на основе шаблонов в файлах: cisco_vpn_1.txt и cisco_vpn_2.txt.
Создать функцию create_vpn_config, которая использует эти шаблоны для генерации конфигурации VPN на основе данных в словаре data.
Параметры функции:
template1 - имя файла с шаблоном, который создает конфигурацию для одной строны туннеля
template2 - имя файла с шаблоном, который создает конфигурацию для второй строны туннеля
data_dict - словарь со значениями, которые надо подставить в шаблоны
Функция должна возвращать кортеж с двумя конфигурациямя (строки), которые получены на основе шаблонов.
Примеры конфигураций VPN, которые должна возвращать функция create_vpn_config в файлах cisco_vpn_1.txt и cisco_vpn_2.txt.
data = {
'tun_num': 10,
'wan_ip_1': '192.168.100.1',
'wan_ip_2': '192.168.100.2',
'tun_ip_1': '10.0.1.1 255.255.255.252',
'tun_ip_2': '10.0.1.2 255.255.255.252'
}
Задание 20.5a
Создать функцию configure_vpn, которая использует шаблоны из задания 20.5 для настройки VPN на маршрутизаторах на основе данных в словаре data.
Параметры функции:
src_device_params - словарь с параметрами подключения к устройству
dst_device_params - словарь с параметрами подключения к устройству
src_template - имя файла с шаблоном, который создает конфигурацию для одной строны туннеля
dst_template - имя файла с шаблоном, который создает конфигурацию для второй строны туннеля
vpn_data_dict - словарь со значениями, которые надо подставить в шаблоны
Функция должна настроить VPN на основе шаблонов и данных на каждом устройстве с помощью netmiko. Функция возвращает вывод с набором команд с двух марушртизаторов (вывод, которые возвращает метод netmiko send_config_set).
При этом, в словаре data не указан номер интерфейса Tunnel, который надо использовать. Номер надо определить самостоятельно на основе информации с оборудования. Если на маршрутизаторе нет интерфейсов Tunnel, взять номер 0, если есть взять ближайший свободный номер, но одинаковый для двух маршрутизаторов.
Например, если на маршрутизаторе src такие интерфейсы: Tunnel1, Tunnel4. А на маршрутизаторе dest такие: Tunnel2, Tunnel3, Tunnel8. Первый свободный номер одинаковый для двух маршрутизаторов будет 9. И надо будет настроить интерфейс Tunnel 9.
Note
Для усложения задания можно сделать так, чтобы выбирался номер 5, а не 9.
Для этого задания нет теста!
data = {
'tun_num': None,
'wan_ip_1': '192.168.100.1',
'wan_ip_2': '192.168.100.2',
'tun_ip_1': '10.0.1.1 255.255.255.252',
'tun_ip_2': '10.0.1.2 255.255.255.252'
}