В этой статье блога мы рассмотрим, как InfraHub интегрируется с Jinja2 и Nornir для упрощения рабочих процессов автоматизации сети. Чтобы продемонстрировать это, мы добавим два устройства Arista в InfraHub, рассматривая их как базовые коммутаторы доступа. Затем мы введем необходимые данные для этих устройств для создания конфигураций. Мы сосредоточимся на создании VLAN и некоторых конфигураций интерфейса, чтобы упростить задачу.
Для каждого устройства мы назначим основной IP-адрес (используется для SSH), настроим несколько интерфейсов с описаниями и укажем немаркированную VLAN для каждого интерфейса. Кроме того, мы определим эти VLAN глобально в InfraHub (не привязанные к какому-либо конкретному устройству). Затем шаблон Jinja2 будет использовать эту информацию для создания конфигураций для каждого устройства. Наконец, мы будем использовать плагин nornir-infrahub в качестве источника инвентаря и Napalm для отправки сгенерированных конфигураций на каждое устройство.
Необходимые условия
В этой записи блога предполагается, что вы немного знакомы с Git и Docker. Если вы новичок в InfraHub, не волнуйтесь, вы все равно сможете следить за нами. Прежде чем приступить к работе, убедитесь, что Git и Docker установлены на локальном компьютере.
По мере продвижения вам также понадобятся следующие инструменты.
- Инфрахаб - Конечно, вам нужен экземпляр Infrahub, чтобы следовать инструкциям.
- Infrahubctl - это инструмент CLI, используемый для взаимодействия с InfraHub.
- InfraHub Python SDK — требуется для программного создания и управления данными в InfraHub.
Установим их с помощью pip. Чтобы поддерживать чистоту среды, создайте виртуальную среду Python для изоляции пакетов.
python -m venv venv
source venv/bin/activate
pip install 'infrahub-sdk[ctl]'
Наконец, вам нужно будет установить переменную среды для ключа/токена API. Сгенерируйте токен в InfraHub, как показано на скриншоте, и экспортируйте его как переменную среды.
export INFRAHUB_API_TOKEN="1803a5a3-8cf7-ec6b-35cb-c51a83c2a410"
Эта запись блога основана на InfrahHub v1.0.9 и использует следующие схемы из библиотеки схем.
- схема-библиотека/база/
- schema-library/extensions/vlan/
- schema-library/extensions/location_minimal/
Чтобы импортировать схемы в экземпляр Infrahub, сначала клонируйте репозиторий GitHub библиотеки схем.
git clone https://github.com/opsmill/schema-library.git
Затем импортируйте схемы с помощью infrahubctl Инструмент CLI.
infrahubctl schema load /schema-library/base/
infrahubctl schema load /schema-library/extensions/vlan/
infrahubctl schema load /schema-library/extensions/location_minimal/
Ну вот! После выполнения этих шагов у нас должно быть все настроено и готово к движению вперед. Если вы хотите узнать больше о библиотеке схем Infrahub, ознакомьтесь с другим моим сообщением в блоге, ссылка на которое приведена ниже.
Необходимые компоненты
Чтобы приступить к работе с примером, давайте создадим некоторые данные в InfraHub. Чтобы не усложнять задачу, мы сосредоточимся на создании IP-адресов, VLAN, устройств и интерфейсов. Эти данные можно добавить несколькими способами, включая графический веб-интерфейс, запросы GraphQL или Python SDK. Давайте начнем с создания местоположения и трех виртуальных локальных сетей в Infrahub, каждая из которых имеет идентификатор и имя с помощью веб-графического интерфейса.
Сначала создайте местоположение, перейдя в раздел «Местоположение» > сайт, и создайте сайт с именем «HQ»
Затем перейдите в домен уровня 2 и создайте домен с именем 'campus'.
Затем создайте следующие три VLAN, перейдя к домену уровня 2 > VLAN в Infrahub. Здесь вы можете ввести идентификатор VLAN, имя, домен (выберите домен, который вы создали ранее) и статус.
Если вы предпочитаете создавать их с помощью запросов GraphQL, не стесняйтесь это делать. Ниже приведен пример запроса на создание домена уровня 2 и виртуальных локальных сетей с помощью GraphQL. Чтобы получить доступ к песочнице GraphQL, перейдите в раздел Администратор > песочнице GraphQL.
mutation { LocationSiteCreate( data: {name: {value: "HQ"}, shortname:{value: "hq"}} ) { ok
object { id
} } }
mutation { IpamL2DomainCreate( data: {name: {value: "campus"}} ) { ok
object { id
} } }
mutation { vlan10: IpamVLANCreate( data: { vlan_id: {value: 10}, status: {value: "active"}, name: {value: "finance"}, l2domain: {hfid: "campus"}, description: {value: "VLAN for Finance Users"}, role: {value: "user"} } ) { ok
object { id
} }
vlan20: IpamVLANCreate( data: { vlan_id: {value: 20}, status: {value: "active"}, name: {value: "sales"}, l2domain: {hfid: "campus"}, description: {value: "VLAN for Sales Users"}, role: {value: "user"} } ) { ok
object { id
} }
vlan30: IpamVLANCreate( data: { vlan_id: {value: 30}, status: {value: "active"}, name: {value: "admin"}, l2domain: {hfid: "campus"}, description: {value: "VLAN for Admin Users"}, role: {value: "user"} } ) { ok
object { id
} } }
Далее мы добавим в Infrahub два устройства с именами access-01 и access-02 и назначим каждому устройству основной IP-адрес. Как и любое другое устройство в Infrahub, они могут быть связаны с определенным местоположением, статусом, типом устройства, платформой и многим другим.
Прежде чем создавать устройства, давайте сначала создадим производителя, тип устройства, платформу и IP-адрес. Для платформы мы укажем eos в качестве водителя напалма. Это будет использовано далее в сообщении блога, чтобы продемонстрировать его важность и то, как он интегрируется с рабочим процессом.
Чтобы создать IP-адреса, сначала перейдите в раздел IPAM > префиксы IP-адресов и создайте префикс с подсетью 192.168.100.0/24. Как только префикс будет создан, перейдите в раздел IPAM > IP-адреса и добавьте два IP-адреса для наших устройств.
Если вы предпочитаете создавать их с помощью GraphQL, вот запросы.
mutation { OrganizationManufacturerCreate( data: {name: {value: "Arista"}} ) { ok
object { id
} } }
mutation { DcimDeviceTypeCreate( data: {name: {value: "Arista Switch"}, manufacturer: {hfid: "Arista"}} ) { ok
object { id
} } }
mutation { DcimPlatformCreate( data: {name: {value: "eos"}, napalm_driver: {value: "eos"}} ) { ok
object { id
} } }
mutation { IpamPrefixCreate( data: {status: {value: "active"}, prefix: {value: "192.168.100.0/24"}, member_type: {value: "address"}} ) { ok
object { id
} } }
mutation { ip_211: IpamIPAddressCreate( data: { description: {value: "access-01"}, address: {value: "192.168.100.211/32"} } ) { ok
object { id
} } ip_212: IpamIPAddressCreate( data: { description: {value: "access-02"}, address: {value: "192.168.100.212/32"} } ) { ok
object { id
} } }
Наконец, давайте создадим два устройства и добавим по два интерфейса для каждого устройства. Каждое устройство будет связано с IP-адресом, который мы создали ранее. Этот IP-адрес будет служить основным IP-адресом для устройства и будет использоваться для управления устройством по протоколу SSH. Когда мы используем Nornir, это IP-адрес, на который он будет полагаться для подключения к устройству.
mutation { access_01: DcimDeviceCreate( data: { name: {value: "access-01"}, platform: {hfid: "eos"}, location: {id: "18178eec-8379-21fd-311d-c51b6d37a6bf"}, device_type: {hfid: "Arista Switch"}, status: {value: "active"}, primary_address: {id: "181832cf-12e5-55de-311e-c516b3a8b16c"} } ) { ok
object { id
} } access_02: DcimDeviceCreate( data: { name: {value: "access-02"}, platform: {hfid: "eos"}, location: {id: "18178eec-8379-21fd-311d-c51b6d37a6bf"}, device_type: {hfid: "Arista Switch"}, status: {value: "active"}, primary_address: {id: "181832cf-411c-4dae-3111-c515154e7409"} } ) { ok
object { id
} } }
💡
Обратите внимание, что в полях location и primary_address используется id для справки. Вы можете получить соответствующие идентификаторы из веб-интерфейса и передать их по мере необходимости.
Затем мы добавим пару интерфейсов к каждому устройству, включая такие детали, как описания, состояние и связанные VLAN.
mutation { access_01_eth5: DcimInterfaceL2Create( data: { name: {value: "eth5"}, description: {value: "device-01"}, enabled: {value: true}, device: {hfid: "access-01"}, untagged_vlan: {hfid: "finance"}, speed: {value: 1000}, l2_mode: {value: "Access"}, status: {value: "active"} } ) { ok
object { id
} } access_01_eth6: DcimInterfaceL2Create( data: { name: {value: "eth6"}, description: {value: "device-02"}, enabled: {value: true}, device: {hfid: "access-01"}, untagged_vlan: {hfid: "admin"}, speed: {value: 1000}, l2_mode: {value: "Access"}, status: {value: "active"} } ) { ok
object { id
} } access_02_eth5: DcimInterfaceL2Create( data: { name: {value: "eth5"}, description: {value: "device-03"}, enabled: {value: true}, device: {hfid: "access-02"}, untagged_vlan: {hfid: "sales"}, speed: {value: 1000}, l2_mode: {value: "Access"}, status: {value: "active"} } ) { ok
object { id
} } access_02_eth6: DcimInterfaceL2Create( data: { name: {value: "eth6"}, description: {value: "device-04"}, enabled: {value: true}, device: {hfid: "access-02"}, untagged_vlan: {hfid: "admin"}, speed: {value: 1000}, l2_mode: {value: "Access"}, status: {value: "active"} } ) { ok
object { id
} } }
После того, как у нас есть все данные, следующим шагом будет их использование для создания конфигураций устройств. Если вы знакомы с какой-либо формой автоматизации сети, вы, вероятно, знаете, что Jinja2 является одним из лучших инструментов для создания конфигураций устройств.
Теперь у нас есть все данные, необходимые для создания конфигурации, такие как VLAN, интерфейсы, описания и многое другое. Следующим шагом является создание шаблона Jinja2, который принимает эти значения в качестве входных данных и генерирует конфигурацию. Кроме того, нам необходимо убедиться, что сгенерированные конфигурации правильно связаны с каждым устройством.
Infrahub предоставляет способ достижения этой цели с помощью шаблона Jinja2 вместе с запросом GraphQL для создания конфигурации. Сгенерированная конфигурация сохраняется в Infrahub в виде артефакта, который затем может быть связан с устройствами с помощью определения артефакта. В следующих разделах мы рассмотрим, как все это настроить.
Превращение и артефакт Jinja2
Итак, как мы используем Jinja2 с Infrahub? Мы используем функцию Infrahub под названием «Трансформация». Как следует из названия, это включает в себя взятие данных, хранящихся в Infrahub, и преобразование их в другой формат. В нашем случае мы используем шаблон Jinja2 для преобразования данных в текстовый файл (рендеринг конфигурации).
Как обсуждалось ранее, нам также нужен запрос GraphQL, который извлекает все входные данные, необходимые для шаблона Jinja2. Если вы знакомы с Jinja2, вы обычно можете использовать файл YAML или JSON для хранения данных, а затем передавать их в шаблон. В нашем случае эти данные хранятся в Infrahub.
Последний шаг включает в себя определение артефакта, которое группирует преобразование с целевой группой, формируя определение артефакта.
Мы можем упаковать все эти компоненты — шаблон Jinja2, запрос GraphQL и определение артефакта — в файл .infrahub.yml в репозитории Git. Затем этот репозиторий можно добавить в Infrahub. Тем .infrahub.yml позволяет Infrahub идентифицировать необходимые импорты и связать воедино различные компоненты.
Обратите внимание, что определение артефакта, например, также может быть создано с помощью веб-графического интерфейса или запроса GraphQL, но в этом примере мы используем репозиторий Git. Ниже приведено содержимое каждого файла.
#config.gql
query MyQuery($device: String!) { IpamVLAN { edges { node { vlan_id { value
} name { value
} } } } DcimDevice(name__value: $device) { edges { node { interfaces { edges { node { name { value
} description { value
} ... on DcimInterfaceL2 { l2_mode { value
} untagged_vlan { node { name { value
} vlan_id { value
} } } } } } } } } } }
Ниже приведен пример выходных данных запроса для устройства access-01.
{ "data": { "IpamVLAN": { "edges": [ { "node": { "vlan_id": { "value": 30 }, "name": { "value": "admin" } } }, { "node": { "vlan_id": { "value": 10 }, "name": { "value": "finance" } } }, { "node": { "vlan_id": { "value": 20 }, "name": { "value": "sales" } } } ] }, "DcimDevice": { "edges": [ { "node": { "interfaces": { "edges": [ { "node": { "name": { "value": "Eth5" }, "description": { "value": "new-description" }, "l2_mode": { "value": "Access" }, "untagged_vlan": { "node": { "name": { "value": "finance" }, "vlan_id": { "value": 10 } } } } }, { "node": { "name": { "value": "Eth6" }, "description": { "value": "device-02" }, "l2_mode": { "value": "Access" }, "untagged_vlan": { "node": { "name": { "value": "admin" }, "vlan_id": { "value": 30 } } } } } ] } } } ] } } }
#config.j2
!
{% for vlan in data['IpamVLAN']['edges'] %} vlan {{ vlan['node']['vlan_id']['value'] }} name {{ vlan['node']['name']['value'] }} !
{% endfor %} {% for edge in data['DcimDevice']['edges'][0]['node']['interfaces']['edges'] %} interface {{ edge['node']['name']['value'] }} description {{ edge['node']['description']['value'] }} {% if edge['node']['l2_mode']['value'] == 'Access' %} switchport mode access
switchport access vlan {{ edge['node']['untagged_vlan']['node']['vlan_id']['value'] }} {% endif %} !
{% endfor %}
#.infrahub.yml
--- jinja2_transforms: - name: device_config
description: "VLAN and Interface configuration" query: "config_query" template_path: "config.j2"
queries: - name: config_query
file_path: "config.gql"
artifact_definitions: - name: "config_file" artifact_name: "configuration file" parameters: device: "name__value" content_type: "text/plain" targets: "Transformation" transformation: "device_config"
Как jinja2_transforms, так и запросы, определенные в этом файле, просты, поэтому давайте сосредоточимся на artifact_definitions. Определение каждого артефакта в .infrahub.yml Должен включать в себя следующее.
- name - имя определения артефакта
- artifact_name - имя артефакта, созданного данным определением артефакта
- parameters - отображение входных параметров, необходимых для рендеринга данного артефакта
- content_type - content-тип создаваемого артефакта
- targets - группа Infrahub, на которую будет нацелена при генерации артефакта
- transformation - имя Преобразования, которое будет использоваться при создании Артефакта
Здесь мы определили группу под названием «Трансформация» и добавили в нее два устройства. Группу можно создать, перейдя в раздел Управление объектами > Группы. После создания группы вы можете добавить два устройства в качестве участников.
Таким образом, в конечном итоге у вас будет три файла в репозитории - шаблон Jinja2, запрос GraphQL и .infrahub.yml Файл, который связывает все воедино. Зафиксируйте и отправьте эти изменения в удаленный репозиторий, а затем добавьте репозиторий в InfraHub.
├── config.gql
├── config.j2
└── .infrahub.yml
Чтобы добавить этот репозиторий в Infrahub, перейдите в Unified Storage > Repository и укажите ссылку на удаленный репозиторий Git, учетные данные для входа (например, если вы используете GitLab, создайте токен доступа и используйте его в качестве пароля для Infrahub) и уникальное имя для репозитория. Затем Infrahub подключится к вашему удаленному репозиторию и импортирует определенные в нем компоненты — в нашем случае шаблон Jinja2, запрос GraphQL и определение артефакта.
После того, как вы добавите репозиторий в Infrahub и все будет настроено правильно, вы должны увидеть артефакт на вкладке «Артефакт». Если вы откроете артефакт, то найдете сгенерированную конфигурацию, как показано ниже.
Вы также можете проверить свое преобразование с помощью infrahubctl render. При использовании infrahubctl необходимо передать имя преобразования и все необходимые переменные. Ниже приведен пример использования access-01 в качестве устройства.
infrahubctl render device_config device=access-01
!
vlan 30
name admin
!
vlan 40
name cctv
!
vlan 10
name finance
!
vlan 20
name sales
!
interface Eth5
description cctv_01
switchport mode access
switchport access vlan 40
!
interface Eth6
description device-02
switchport mode access
switchport access vlan 30
!
Плагин Nornir-Infrahub
На данный момент мы завершили около 75% процесса, а оставшиеся этапы сосредоточены на Норнире и на том, как использовать Норнир/Напалм для извлечения и применения этих артефактов (конфигураций). Если вы помните, наша конечная цель — хранить всю необходимую информацию в Infrahub, генерировать конфигурации и отправлять их на устройства. Infrahub будет выступать в качестве источника инвентаря для Nornir, а также предоставлять артефакты.
Во-первых, вам нужно установить nornir-infrahub и nornir_napalm плагины. Используйте следующую команду для его установки. Как всегда, используйте виртуальную среду для установки pip модулей.
python3 -m venv venv
source venv/bin/activate
pip install nornir-infrahub
Pip install nornir_napalm
После установки следующий файл конфигурации Nornir (config.yml) инициализирует Nornir с помощью подключаемого модуля инвентаризации Infrahub, получая необходимую инвентаризацию и сведения о конфигурации из Infrahub.
--- inventory: plugin: InfrahubInventory
options: address: http://10.10.10.40:8000 token: 1811f38d-feb8-24da-2f6c-c51a2af588c8
host_node: kind: DcimDevice
schema_mappings: - name: hostname
mapping: primary_address.address
- name: platform
mapping: platform.napalm_driver
group_mappings: - platform.name
group_file: groups.yml
- Мы настраиваем Nornir на использование узлов DcimDevice из Infrahub в качестве хоста, который выступает в качестве источника инвентаризации устройств. Если вы используете другую схему в Infrahub, необходимо указать соответствующий тип узла, представляющий устройство в вашей конфигурации. Это гарантирует, что Nornir получит правильные данные инвентаризации на основе структуры схемы.
- Мы определяем сопоставления схем, чтобы Nornir мог правильно интерпретировать данные из Infrahub. Например, мы наносим на карту platform.napalm_driver в поле platform, убедившись, что Nornir определяет правильный драйвер для каждого устройства.
- При использовании Napalm названия платформ должны совпадать с ожидаемыми значениями (например, eos для Arista). Однако, если вы используете Netmiko, названия платформ могут отличаться (например, arista_eos для Arista). Эти различия необходимо учитывать при настройке Nornir.
- Файл groups.yml используется для определения атрибутов, специфичных для группы, таких как имя пользователя и пароль для платформы eos. Плагин автоматически создает группы на основе метода group_mappings указано в конфигурации. Здесь мы используем platform.name, поэтому Nornir создает группу для каждого узла сети на основе значения platform.name. В этом случае создается группа с именем platform__eosс platform__ с приставкой к названию платформы.
- Затем вы можете определить атрибуты для этой группы в файле groups.yml, такие как учетные данные или другие параметры, специфичные для платформы. Если вы используете другую схему, убедитесь, что сопоставления групп соответствуют структуре схемы и отражают соответствующие имена групп.
#groups.yml
platform__eos: username: admin
password: admin
Разобравшись с предварительными требованиями, теперь мы можем перейти к отправке сгенерированных конфигураций на устройства.
В следующем скрипте Python (main.py) get_artifact извлекает артефакт (в данном случае визуализированную конфигурацию), связанный с каждым устройством, из Infrahub. Он использует API Infrahub для получения содержимого артефакта, которое затем сохраняется в объекте результата Nornir.
#main.py
from nornir import InitNornir
from nornir_utils.plugins.functions import print_result
from nornir_napalm.plugins.tasks import napalm_configure
from nornir_infrahub.plugins.tasks.artifact import get_artifact
def main(task): # Fetch artifacts from Infrahub artifacts = task.run(task=get_artifact, artifact="config_file")
# Configure devices using Napalm with the fetched artifacts task.run(task=napalm_configure, configuration=artifacts[0].result, dry_run=False)
if __name__ == "__main__": nr = InitNornir(config_file="config.yml") results = nr.run(task=main) print_result(results)
После успешного извлечения артефактов следующим шагом является применение этих конфигураций к устройствам с помощью метода napalm_configure задача. Эта задача принимает полученную конфигурацию (artifacts[0].result) и подталкивает его к целевым устройствам.
Итак, чтобы подвести итог, структура нашего каталога будет выглядеть следующим образом: main.py — это наш скрипт на Python, config.yml указывает, что Nornir должен использовать инвентарь InfraHub и определяет, как он взаимодействует с ним, а groups.yml используется для предоставления учетных данных для входа.
. ├── groups.yml
├── main.py
├── config.yml
Давайте внесем некоторые изменения
Чтобы продемонстрировать, как изменения вносятся и передаются на устройства с помощью Nornir, давайте создадим новую VLAN, назначим ее одному из интерфейсов и обновим описание интерфейса.
Процесс начинается с создания ветки в Infrahub. Эта ветвь позволяет нам изолировать и управлять изменениями, не затрагивая основную конфигурацию. Вы можете создать новую ветвь (называемую vlan_40) в графическом интерфейсе Infrahub, нажав кнопку «+», как показано ниже.
После создания ветви выберите ветвь для работы и создайте новую VLAN.
После создания VLAN выберите интерфейс (например, access-01, Eth5 в этом примере) и обновите его конфигурацию для использования вновь созданной VLAN 40. Кроме того, обновите описание интерфейса, чтобы отразить изменения. Это гарантирует, что назначение и описание VLAN соответствуют новым требованиям конфигурации.
После внесения изменений перейдите в раздел «Управление изменениями» > «Ветви» и выберите только что созданную ветвь. На вкладке Данные вы можете точно увидеть, что было изменено.
Вы можете развернуть каждое поле, чтобы подробно просмотреть конкретные изменения. Например, вы заметите, что была добавлена новая VLAN (выделена зеленым цветом), а описание и непомеченная VLAN для интерфейса были обновлены (выделены синим цветом)
На этом этапе у вас есть возможность объединить свои изменения напрямую. Тем не менее, Infrahub предлагает более надежный способ управления изменениями с помощью функции под названием «Предлагаемые изменения». Давайте рассмотрим, как использовать эту функцию.
Предлагаемые изменения в Infrahub
Функция «Предлагаемые изменения» в Infrahub выводит автоматизацию на новый уровень. Вместо того, чтобы объединять непосредственно из Управления изменениями > Ветвей, вы можете создать Предлагаемое изменение. В этом процессе вы указываете имя, описание, человека, вызывающего изменение, а также исходную и конечную ветви.
После создания предложенного изменения перейдите в раздел «Предлагаемое изменение» и выберите только что внесенное изменение. Здесь вы найдете несколько вкладок:
- Обзор- Предоставляет общий обзор изменения, как следует из названия. Вы также можете добавить комментарии здесь.
- Данные- Подобно тому, что вы видели ранее, эта вкладка показывает, что именно было изменено.
- Артефакт- Это самая важная вкладка для этого поста. Infrahub обнаруживает изменения, отображает новую конфигурацию и выделяет то, что было обновлено.
В наших изменениях мы добавили новую VLAN, поэтому артефакт отражает VLAN, создаваемую на обоих устройствах. Для access-01, помимо создания VLAN, артефакт также показывает, что VLAN назначается интерфейсу Eth5, а описание обновляется. Эти изменения хорошо видны в веб-интерфейсе, что упрощает проверку и просмотр.
Если изменения выглядят хорошо, рецензент может одобрить предложение. Как только изменение утверждено и объединено, артефакт автоматически генерируется заново.
Теперь вы можете использовать Nornir для повторного выполнения задания, и обновленная конфигурация будет без проблем отправлена на устройства. Этот рабочий процесс обеспечивает отслеживание, анализ и эффективное внедрение изменений.
Вот выходные данные Nornir, показывающие, что изменяется на устройствах.
#access-01
---- napalm_configure ** changed : True ---------------------------------------- INFO
+vlan 40
+ name cctv
!
interface Ethernet5
- description device-01
+ description cctv_01
- switchport access vlan 10
+ switchport access vlan 40
#access-02
---- napalm_configure ** changed : True ---------------------------------------- INFO
+vlan 40
+ name cctv
Если мы подключимся по SSH к access-01, мы сможем подтвердить, что изменения вступили в силу. Новая VLAN 40 присутствует, а интерфейс Eth5 теперь использует эту VLAN с обновленным описанием, как и ожидалось.
access-01#show run interfaces eth5
interface Ethernet5
description cctv_01
switchport access vlan 40
access-01#
access-01#show vlan
VLAN Name Status Ports
----- -------------------------------- --------- -------------------------------
1 default active Et1, Et2
10 finance active
20 sales active
30 admin active Et6
40 cctv active Et5
Заключение
Чтобы не усложнять этот пост, мы рассмотрели только основы, но вы можете полностью управлять каждым аспектом конфигурации, таким как SNMP-серверы, NTP, магистральные порты, восходящие каналы, портовые каналы и многое другое. Все, что вам нужно сделать, это ввести соответствующие данные в InfraHub, обновить шаблон Jinja2 и запрос GraphQL, а остальное обработают Infrahub и Nornir.
Если у вас есть какие-либо мысли или вопросы по этой теме, пожалуйста, не стесняйтесь оставить комментарий или отправить мне сообщение. Я хотел бы продолжить дискуссию и услышать вашу точку зрения.
А также вы всегда можете поддержать меня зайдя на сайт и подписаться https://dzen.ru/kalyuzhnyy.ru и найти больше статей на моих ресурсах https://kalyuzhnyy.ru и https://dev.kalyuzhnyy.ru