Рубрики
Без рубрики

Автоматизация Python на Cisco Routers в 2019 году – NetConf, Yang & Jinja2

Прежде чем прочитать этот пост, я настоятельно рекомендую вам проверить наш первый пост NetConf, который мы сделали, если вы … Помечено с Python, NetConf, Yang, Jinja.

Прежде чем прочитать этот пост, я настоятельно рекомендую вам проверить наш первый пост 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 = '''
  
      
          
            
              1
            
          
      
  
'''

# Execute the get-config RPC
result = m.get_config('running', interface_filter)
print(result)

Этот код по сути такой же, как команда 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, теперь мы можем настроить любой интерфейс на нашем маршрутизаторе с двумя шагами.

  1. Рендеринг шаблона – Визуализация шаблона Jinja с нужными значениями переменной.
  2. Транзакция 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”