Прежде чем прочитать этот пост, я настоятельно рекомендую вам проверить наш первый пост NetConf, который мы сделали, если вы новичны на эту тему. В этом посте я объяснил основы моделей NetConf и Yang, которые делают для больших фоновых знаний, прежде чем попасть в автоматизацию Python.
Для сегодняшнего упражнения мы напишем программу Python, которая настроит интерфейс на маршрутизаторе Cisco CSR 1000V. Наше решение будет использовать шаблон Jinja для модели данных конфигурации, и протокол NetConf для нажатия нашей полезной нагрузки на оказанную конфигурацию на маршрутизатор – я надеюсь, что этот пост будет пролить свет на то, как эта технология может быть реализована в масштабируемом порядке путем конфигурации развязки. Шаблоны из кодовой базы Python.
Для начала, давайте раскрутим свежий роутер Cisco CSR 1000V. Затем нам нужно настроить учетные данные и включить NetConf.
conf t ! username admin privilege 15 secret admin ! netconf-yang
Мы также настроим интерфейс на маршрутизатору для нашего клиента NetConf для подключения к.
interface GigabitEthernet1 ip address 192.168.159.10 255.255.255.0 no shut exit ! end
Далее Установите Python На вашей рабочей станции, если у вас его еще нет.
С помощью этого давайте откроем терминал и установите пакет «NCClient». Этот пакет предоставит нам клиент NetConf, который мы будем использовать для управления нашей сессией с маршрутизатором.
pip install ncclient
Теперь мы создадим новый файл для нашей программы Python – мы имеем право на нашу «Cisco-automation-Tutorial.py». Во главе файла импортируйте зависимости нашу программу.
# Filename: cisco-automation-tutorial.py # Command to run the program: python cisco-automation-tutorial.py # Import the required dependencies from ncclient import manager from jinja2 import Template
Далее мы установим сеанс NetConf на наш маршрутизатор, используя метод «Connect».
# Establish our NETCONF Session m = manager.connect(host='192.168.159.10', port=830, username='admin', password='admin', device_params={'name': 'csr'})
Для того, чтобы настроить наше устройство с NetConf, мы сначала должны понять, как структурировать данные конфигурации в нашей полезной нагрузке RPC. Структуры данных в NetConf определяются Ян Модели и маршрутизатор CSR на самом деле поддерживают множество различных вариантов на выбор. Например, Модели OpenConfig и IETF Модели оба совместимы с программной семьей iOS-XE.
Для сегодняшних упражнений мы будем использовать YOS-XE родная модель Ян Отказ
Чтобы получить быстрое ощущение к родной модели, добавьте код Python ниже в свою программу.
# Create a configuration filter interface_filter = '''''' # Execute the get-config RPC result = m.get_config('running', interface_filter) print(result) 1
Этот код по сути такой же, как команда CLI «Показать интерфейс запущенного конфигурации GigabiteThernet 1»
. Когда мы выполняем программу, используя Python Cisco-automation-Tutorial.py.
Мы получаем вывод ниже.
1 192.168.159.10 255.255.255.0 false false true
Из RPC вы можете увидеть, что теперь мы выявили структуру данных iOS-XE интерфейса.
Теперь мы можем использовать эту модель как шаблон для настройки других интерфейсов. От RPC Ответить, скопируйте и вставьте все внутри config
Тег на новый файл под названием «Интерфейс.xml». Это станет нашим Jinja шаблон Отказ Затем замените IP-адрес, маску подсети и интерфейсный индекс с переменными Jinja, используя синтаксис двойных фигурных скобок. После выполнения вы должны в конечном итоге с файлом, как тот, который ниже. Убедитесь, что файл помещен в тот же каталог, что и ваша программа Python.
{{ INTERFACE_INDEX }} {{ IP_ADDRESS }} {{ SUBNET_MASK }} false false true
Возвращаясь к нашей программе Python, теперь мы можем настроить любой интерфейс на нашем маршрутизаторе с двумя шагами.
- Рендеринг шаблона – Визуализация шаблона Jinja с нужными значениями переменной.
- Транзакция NetConf – Отправьте оказанный объект в качестве полезной нагрузки
edit-config
RPC
Для этого в нашей программе Python добавьте код ниже. Для нашего примера мы настраиваем интерфейс GigabiteThernet 2 с адресом 10.0.0.1/30.
# Render our Jinja template interface_template = Template(open('interface.xml').read()) interface_rendered = interface_template.render( INTERFACE_INDEX='2', IP_ADDRESS='10.0.0.1', SUBNET_MASK='255.255.255.252' ) # Execute the edit-config RPC result = m.edit_config(target='running', config=interface_rendered) print(result)
После выполнения программы вы должны увидеть и «ОК» RPC ответить от маршрутизатора, указывающего, что транзакция успешно завершена.
Наконец, убедитесь, что конфигурация на самом деле существует на роутере с знакомым
Router#show running-config interface GigabitEthernet 2 Building configuration... Current configuration : 129 bytes ! interface GigabitEthernet2 ip address 10.0.0.1 255.255.255.252 shutdown negotiation auto no mop enabled no mop sysid end
Хотя пример, который мы показали сегодня, было довольно тривиальным, я надеюсь, что это вдохновляет вас думать о возможностях того, как эта технология может быть масштабирована. Например, вы можете построить спину API с помощью атомных шаблонов Jinja для конфигурации абсолютно ничего и все в сети.
Затем могут быть построены несколько интерфейсных приложений, которые потребляют эту службу конфигурации – эти инструменты для концов могут быть сетевыми оркестраторами, программным обеспечением для управления изменением, инструменты для активации к активации, менеджеры политики и многое другое. Эта технология действительно включает в себя цифровую трансформацию компаний часть сетевой отрасли.
Наконец, если вы не слышали о генераторе Ultra Config, я настоятельно рекомендую вам проверить это. По сути, по сути, выходит из раствора коробки для технологии, которую мы просто обсуждали, что позволяет компаниям быстро оцифровать свои процессы конфигурации. Мы разработали продукт, чтобы позволить сетевым инженерам генерировать конфигурацию сети в очень гибком, эффективном и элегантном порядке. Наши клиенты любят приложение, и я надеюсь, что вы тоже будете.
Большое спасибо за чтение, и если вам нравится содержимое, не стесняйтесь следовать.
Берегите себя до следующего раза!
Алек
Оригинал: “https://dev.to/alecbuda/python-automation-on-cisco-routers-in-2019-netconf-yang-jinja2-52ho”