Автоматизация 6. Napalm

21 апр 2021 07:40 #101925 от ICT
ICT создал тему: Автоматизация 6. Napalm
Приветствую всех читателей цикла, мы продолжаем знакомиться с инструментами по автоматизации конфигурирования сетевой инфраструктуры. Предыдущие статьи:Краткая теория SDN и предпосылок автоматизацииПрактика с TelnetLibПрактика с ParamikoПрактика с Netmiko. Часть 1Практика с Netmiko. Часть 2
Теория по Napalm Прежде чем рассказывать о новой библиотеке, позволим себе небольшое лирическое отступление. После того, как мы достаточно подробно изучили Netmiko, казалось бы все наши потребности будут удовлетворены и мы можем выполнять любые задачи. Но как известно - аппетит растет во время еды, и вот уже у нас рождаются новые "хотелки" в виде более глубокой работы с конфигурацией оборудования: версионирование изменений, откат к предыдущей конфигурации и пр. Подобные задачи уже не решить с помощью Netmiko, который отлично справляется с базовым взаимодействием с сетевым оборудованием (сбор и отправка конфигурации, установка соединения и т.д). Библиотека Napalm (Network Automation and Programmability Abstraction Layer with Multivendor support), опенсорсный проект написан на языке Python, содержит различные функции для взаимодействия с различными сетевыми ОС за счет единого API. По своей архитектуре, Napalm требует определенного драйвера для работы с тем или иным вендором. В официальный список - "Napalm Core Developers" (нативная поддержка взаимодействия с ОС) входят: Как вы можете заметить из таблицы, представленной выше, далеко не все системы поддерживаются, поскольку для них нет драйвера. Кроме того, есть ограничения по версии ОС и поддерживаемым функциям. Например, IOS не имеет своего API для отправки команд, поэтому внутри Napalm используется библиотека Netmiko. В свою очередь, на Github есть репозиторий "Community Drivers", где отдельные разработчики-энтузиасты предлагают драйвера для неподдерживаемых изначально сетевых ОС (ссылка). За счет сообщества, вы сможете опробовать Napalm с такими системами как VyOS, Dlink, FortiOS и др. Кроме ограничений, связанных с наличием соответствующего драйвера, также есть матрица поддержки функций Napalm: В целом почти все опции работают:замена конфигурации;добавление конфигурации;сравнение конфигурации;откат изменений.
Укажем расшифровку примечаний: [2] - Реализовано за счет API Napalm, по скольку не поддерживается ОС изначально.
[3] - Не поддерживается, но эмулируется.
[4] - Для слияний, часть возможностей по сравнению - отсутствует.
[5] - Не поддерживается, но эмулируется. С более подробным описанием функций возможно ознакомиться в официальном документе по Napalm, крайне рекомендовано понимать их назначение, прежде чем писать какой-либо скрипт. В качестве сетевого протокола по доставке команд используются: Установка Для начала потребуется установить библиотеку Napalm на ваш хост управления, стабильно пакет работает в Linux, поэтому мы остановимся на одном из его дистрибутивов (Ubuntu). apt-get update
apt-get install python -y
apt-get install build-essential libssl-dev libffi-dev -y
apt-get install python3-pip -y
pip3 install -U cryptography
pip3 install -U netmiko
pip3 install -U napalm
pip3 install -U simplejson Кроме установки пакета самой библиотеки Napalm, также понадобится: python3, pip, cryptography, netmiko, simplejson. После успешной установки, начинаем знакомство с базовым синтаксисом библиотеки и ее возможностями, для установки соединения с сетевым оборудованием потребуются строки кода: "> from napalm import get_network_driver
"> driver = get_network_driver("eos")
"> device = driver("192.168.76.10", "admin", "pass")
"> device.open()импортируется общая библиотека драйверов;указывается драйвер устройства в переменной "driver";объявляется переменная "device", которая содержит необходимые параметры для подключения;устанавливается соединение.Первые скрипты После первичной инициализации подключения, становятся доступны команды по работе с конфигурацией: from napalm import get_network_driver # импорт драйвера
driver = get_network_driver("ios") # выбор типа OS
iosvl2 = driver("192.168.122.72", "david", "cisco") # параметры
iosvl2.open()
ios_output = iosvl2.get_facts()# сбор фактов
print (ios_output) Как видим, после выполнения скрипта, на экране пользователя вывелись факты об устройстве, согласно методу - "get_facts". Информации достаточно много, пусть и не в самом удобно читаемом виде. Чтобы решить проблему с выводом, мы используем библиотеку json. Формат JSON является структурированным текстовым типом данных, достаточно удобным для чтения человеком. Добавим следующие строки в предыдущий скрипт, как первую и последнюю строчку (вместо обычного print) соответственно: import json
print json.dumps(ios_output, indent=4) После изменений получим вывод: Соответственно, получили данные от сетевого оборудования Cisco, которые представлены в формате JSON, что в разы повышает их читаемость и удобство для дальнейшей работы. Сравнение конфигурации Прежде чем отправлять какие-либо изменения в конфигурацию вашего сетевого устройства, с помощью Napalm появляется возможность сравнить настройки (доступно при поддержке ОС). Считаем файл-кандидат с новыми настройками и вызовем метод сравнения настроек: "> device.load_replace_candidate(filename="test/new_good.conf")
"> print(device.compare_config()) + hostname pyeos-unittest-changed
- hostname pyeos-unittest
router bgp 65000
vrf test
+ neighbor 1.1.1.2 maximum-routes 12000
+ neighbor 1.1.1.2 remote-as 1
- neighbor 1.1.1.1 remote-as 1
- neighbor 1.1.1.1 maximum-routes 12000
vrf test2
+ neighbor 2.2.2.3 remote-as 2
+ neighbor 2.2.2.3 maximum-routes 12000
- neighbor 2.2.2.2 remote-as 2
- neighbor 2.2.2.2 maximum-routes 12000
interface Ethernet2
+ description ble
- description bla Библиотека наглядно выводит ожидаемые изменения на экран пользователя, где знаками "+" и "-" отмечены новые строки или те, которые будут удалены, соответственно. Для того чтобы принять изменения, посылается команда: "> device.commit_config() Если вы изменили свое решение и не хотите применять новые настройки, то: "> device.discard_config() Слияние конфигураций В целом логика та же, что и в предыдущем сценарии отправки новой конфигурации, только необходимо передавать новый файл при вызове метода слияния: "> device.load_merge_candidate(config="test\description bla")
"> print(device.compare_config())
configure
hostname test
interface Ethernet2
description bla
end Для того чтобы принять изменения, посылается команда: "> device.commit_config() Если вы изменили свое решение и не хотите применять новые настройки, то: "> device.discard_config() Откат принятой конфигурации Может возникнуть ситуация, когда после операции device.commit_config()необходимо будет откатить изменения, библиотека поддерживает эту функцию: "> device.rollback() Окончание сессии Наконец, для завершения соединения с оборудованием достаточно команды: "> device.close() Вместо заключения Сегодня мы познакомились с библиотекой Napalm, способной гибко взаимодействовать с конфигурацией сетевого оборудования, позволяя учитывать примененную версию настроек, откатывать изменения и т.д. Далее планируется еще одна статья по Napalm, где уже будут разобраны исключительно готовые скрипты для решения различных практических кейсов, на сегодня всё, до встречи на NAG.ru. Ссылка на источник


  • Сообщений: 103416

  • Пол: Не указан
  • Дата рождения: Неизвестно
  • Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

    Похожие статьи

    ТемаРелевантностьДата
    Автоматизация 7. Napalm в действии18.26Вторник, 11 мая 2021
    Автоматизация 4. Netmiko7.78Четверг, 11 марта 2021
    Автоматизация работы сетевого администратора7.61Понедельник, 11 января 2021
    Трансформация это в бизнесе, а в ИТ - автоматизация. Не путайте7.61Понедельник, 13 июня 2022
    Трансформация - это в бизнесе, а в ИТ - автоматизация. Не путайте7.61Вторник, 14 июня 2022
    Автоматизация как ответ на кадровый голод7.61Вторник, 24 января 2023
    Axelot интегрировала «1С:WMS» и КИС «1С:Комплексная автоматизация» для «Квадрата»7.53Вторник, 10 ноября 2015
    В институте физиологии им. И. П. Павлова РАН завершена автоматизация ФХД7.53Четверг, 22 сентября 2016
    54-ФЗ: теперь в «1С:ERP», «1С:Управление торговлей» и «1С:Комплексная автоматизация»7.53Пятница, 03 февраля 2017
    «1С-Рарус» обеспечила CRM-функциональностью «1С:ERP» и «1С:Комплексная автоматизация»7.53Пятница, 07 апреля 2017

    Мы в соц. сетях