Все задания и вспомогательные файлы можно скачать в . Если в заданиях раздела есть задания с буквами (например, 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
Если задания с буквами получается сделать сразу, лучше делать их по порядку.
Переделать скрипт cfg_gen.py в функцию generate_cfg_from_template.
Функция ожидает два аргумента:
Функция должна возвращать конфигурацию, которая была сгенерирована.
Проверить работу функции на шаблоне templates/for.txt и данных data_files/for.yml.
from jinja2 import Environment, FileSystemLoader import yaml import sys import os #$ python cfg_gen.py templates/for.txt data_files/for.yml TEMPLATE_DIR, template = os.path.split(sys.argv[1]) VARS_FILE = sys.argv[2] env = Environment(loader=FileSystemLoader(TEMPLATE_DIR), trim_blocks=True, lstrip_blocks=True) template = env.get_template(template_file) vars_dict = yaml.load(open(VARS_FILE)) print(template.render(vars_dict))
Дополнить функцию generate_cfg_from_template из задания 21.1:
Функция generate_cfg_from_template должна принимать любые аргументы, которые принимает класс Environment и просто передавать их ему.
То есть, надо добавить возможность контролировать аргументы trim_blocks, lstrip_blocks и любые другие аргументы Environment через функцию generate_cfg_from_template.
Проверить функциональность на аргументах:
Дополнить функцию generate_cfg_from_template из задания 21.1 или 21.1a:
Должны поддерживаться такие форматы:
Сделать для каждого формата свой параметр функции. Например:
Проверить работу функции на шаблоне templates/for.txt и данных:
data_dict = {'vlans': { 10: 'Marketing', 20: 'Voice', 30: 'Management'}, 'ospf': [{'network': '10.0.1.0 0.0.0.255', 'area': 0}, {'network': '10.0.2.0 0.0.0.255', 'area': 2}, {'network': '10.1.1.0 0.0.0.255', 'area': 0}], 'id': 3, 'name': 'R3'}
Переделать функцию generate_cfg_from_template из задания 21.1, 21.1a или 21.1b:
Должны поддерживаться такие форматы:
Если не получилось определить тип данных, вывести сообщение error_message (перенести текст сообщения в тело функции), завершить работу функции и вернуть None
.
Проверить работу функции на шаблоне templates/for.txt и данных:
error_message = ''' Не получилось определить формат данных. Поддерживаются файлы с расширением .json, .yml, .yaml и словари Python ''' data_dict = {'vlans': { 10: 'Marketing', 20: 'Voice', 30: 'Management'}, 'ospf': [{'network': '10.0.1.0 0.0.0.255', 'area': 0}, {'network': '10.0.2.0 0.0.0.255', 'area': 2}, {'network': '10.1.1.0 0.0.0.255', 'area': 0}], 'id': 3, 'name': 'R3'}
На основе конфигурации config_r1.txt, создать шаблоны:
В шаблонах templates/alias.txt и templates/eem_int_desc.txt переменных нет.
Создать шаблон templates/cisco_router_base.txt.
В шаблон должно быть включено содержимое шаблонов:
При этом, нельзя копировать текст шаблонов.
Проверьте шаблон templates/cisco_router_base.txt, с помощью функции generate_cfg_from_template из задания 21.1-21.1c. Не копируйте код функции.
В качестве данных, используйте файл data_files/router_info.yml
Создайте шаблон templates/ospf.txt на основе конфигурации OSPF в файле cisco_ospf.txt. Пример конфигурации дан, чтобы напомнить синтаксис.
Какие значения должны быть переменными:
process
router_id
ref_bw
ospf_intf
name
- имя интерфейса, вида Fa0/1, VLan10, Gi0/0ip
- IP-адрес интерфейса, вида 10.0.1.1area
- номер зоны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_cfg_from_template из задания 21.1-21.1c. Не копируйте код функции.
Измените шаблон templates/ospf.txt таким образом, чтобы для перечисленных переменных были указаны значения по умолчанию, которые используются в том случае, если переменная не задана.
Не использовать для этого выражения if/else.
Задать в шаблоне значения по умолчанию для таких переменных:
Проверьте получившийся шаблон templates/ospf.txt, на данных в файле data_files/ospf2.yml, с помощью функции generate_cfg_from_template из задания 21.1-21.1c. Не копируйте код функции.
Измените шаблон templates/ospf.txt из задания 21.3a таким образом, чтобы для перечисленных переменных были указаны значения по умолчанию, которые используются в том случае, если переменная не задана или, если в переменной пустое значение.
Не использовать для этого выражения if/else.
Задать в шаблоне значения по умолчанию для таких переменных:
Проверьте получившийся шаблон templates/ospf.txt, на данных в файле data_files/ospf3.yml, с помощью функции generate_cfg_from_template из задания 21.1-21.1c. Не копируйте код функции.
Создайте шаблон templates/add_vlan_to_switch.txt, который будет использоваться при необходимости добавить 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_cfg_from_template из задания 21.1-21.1c. Не копируйте код функции.