Технологии

Этот раздел довольно самоуверенный и направлен на то, чтобы познакомить вас с основными инструментами, оставив позади многие другие для краткости. Я настоятельно рекомендую позже взглянуть на список Awesome Network Automation.

Python

Python — популярный язык программирования, когда речь идет об автоматизации сети. Все популярные инструменты и библиотеки для автоматизации сети написаны на Python.

Благодаря плавной кривой обучения и огромной популярности (второй по популярности язык на GitHub после JavaScript на момент написания) Python является отличным выбором для начала программирования.

Основы Python выходят за рамки этого руководства. Я предоставил несколько онлайн-ресурсов, которые могут помочь в изучении Python, в разделе «Ссылки и дополнительная литература», которая будет в других частях сетевой автоматизации.

Чтобы эффективно использовать Python для решения базовых задач автоматизации сети, вам необходимо изучить этот набор навыков:

  • Настройка Python в вашей системе
  • Использование виртуальных сред и установка пакетов с помощью Pip
  • Понимание основных концепций Python, таких, как:
    • Переменные
    • Структуры данных
    • Функции
    • Импорт

Как видите, это не так уж сложно, и я рекомендую вам потратить на это немного времени, потому что это значительно упростит вам путь к автоматизации.

Способы программного взаимодействия с сетевыми устройствами

Существует два основных способа программного доступа к сетевым устройствам: интерфейс командной строки и API.

CLI

Долгое время единственным API сетевых устройств был интерфейс командной строки, предназначенный для использования людьми, а не сценариями автоматизации. Вот основные недостатки использования CLI в качестве API:

  • Несогласованные выходные данные. Одни и те же выходные данные команд могут отличаться от одной версии NOS (сетевой операционной системы) к другой.
  • Неструктурированные данные. Данные, возвращаемые при выполнении команды в CLI, представляют собой обычный текст, что означает, что вам необходимо вручную проанализировать их (т.е. очистить CLI)
  • Ненадежное выполнение команды. Вы не получаете код состояния выполненной команды и должны анализировать вывод, чтобы определить, успешно ли выполнена команда или нет.

Несмотря на то, что все больше и больше сетевых поставщиков начинают включать поддержку API в свои продукты, маловероятно, что вам не придется иметь дело с CLI во время вашего пути к автоматизации сети.

Для синтаксического анализа вывода CLI используются регулярные выражения. Не очень удобная технология мягко говоря.

«Я не знаю, кто вы. Я не знаю, что тебе нужно. Если вам нужна техническая помощь, могу сказать, что у меня нет времени. Но у меня есть очень специфический набор регулярных выражений. Регулярные выражения я приобрел за очень долгую карьеру. Регулярные выражения, отладка которых является кошмаром для таких людей, как вы. Если ты оставишь меня сейчас в покое, это будет конец. Я не буду искать вас, я не буду преследовать вас, но если вы этого не сделаете, я буду искать вас, я найду вас и буду использовать их в вашем коде ».

Цитаты самых облачных команд DevOps в Интернете

К счастью, сегодня существует множество инструментов и библиотек, которые упрощают парсинг интерфейса командной строки, выполняя большую часть тяжелой работы с регулярными выражениями.

API

Если вам повезло, и устройства в вашей сети имеют API или, возможно, даже управляются контроллером SDN, этот раздел для вас. Сетевые API делятся на две основные категории: на основе HTTP и NETCONF.

RESTful API

REST означает передачу репрезентативного состояния и определяет набор свойств и ограничений, которым должен соответствовать API, чтобы называться RESTful.

ПРИМЕЧАНИЕ. API на основе HTTP могут быть RESTful и не RESTful. API на основе HTTP, не относящиеся к RESTful, не рассматриваются, поскольку они менее распространены.

API RESTful довольно просты в использовании и понимании, поскольку они основаны на протоколе HTTP. По сути, RESTful API — это просто набор URL-адресов HTTP, по которым вы можете выполнять запросы GET и / или POST, за исключением того, что возвращаемые данные кодируются в JSON или XML, а не в HTML. Поскольку RESTful API основаны на HTTP, они по своей природе не имеют состояния. Это означает, что каждый запрос не зависит от другого и должен содержать всю необходимую информацию для правильной обработки.

Чтобы изучить RESTful API, вы можете использовать такие инструменты, как cURL или Postman, но когда вы будете готовы написать некоторый код с использованием RESTful API, вы можете использовать библиотеку Python, называемую запросами.

В Интернете есть несколько макетов REST API, которые вы можете использовать на практике. Например, kanye.rest и JSONPlaceholder.

NETCONF и RESTCONF

NETCONF — это протокол, специально разработанный для управления сетевыми устройствами. В отличие от REST, он использует SSH в качестве транспорта и в результате сохраняет состояние. Другими ключевыми отличиями NETCONF являются четкое разграничение между конфигурационными и рабочими данными и концепция хранилищ данных конфигурации. NETCONF определяет три хранилища данных: текущая конфигурация, конфигурация запуска и конфигурация кандидата. Возможно, вы знакомы со всеми тремя из них в контексте сетевых устройств. Концепция конфигурации кандидата позволяет доставлять изменение конфигурации, состоящее из множества команд, как одну транзакцию. Это означает, что если только одна команда в транзакции терпит неудачу, транзакция не завершается успешно, что позволяет избежать ситуации, когда применяется частичная конфигурация.

Изучение API-интерфейсов NETCONF не так просто и понятно, как с API-интерфейсами RESTful. Для этого вам необходимо установить интерактивный сеанс SSH с устройством и отправлять длинные команды в кодировке XML. Для программного доступа к API NETCONF существует библиотека Python ncclient.

RESTCONF — это еще один стандартный протокол, который реализует подмножество функций NETCONF (например, транзакции не поддерживаются) и использует HTTP в качестве транспорта и является RESTful.

При выборе между NETCONF и RESTCONF это рекомендуется использовать бывший для прямого взаимодействия с сетевыми устройствами, а последним для взаимодействия с SDN-контроллерами и / или дирижерами.

gRPC и gNMI

gNMI — это новое дополнение к протоколам управления сетью, основанное на gRPC Google и разработанное рабочей группой OpenConfig. Он считается более надежным преемником NETCONF и поддерживает потоковую телеметрию.

Поскольку gNMI еще не настолько развит, как NETCONF, он не очень хорошо поддерживается в Python. Хотя есть несколько библиотек, в которые вы можете заглянуть: cisco-gnmi и pygnmi.

Резюме

Вот сводная таблица, представляющая ключевые свойства типов сетевых API.

REST NETCONF RESTCONF gNMI
RFC RFC 6241 RFC 8040 Черновой вариант
Транспорт HTTP SSH HTTP gRPC (HTTP / 2.0)
Кодирование данных XML, JSON XML XML, JSON ProtoBuf (двоичный)
Сопровождение сделки
Библиотеки Python Запросы ncclient Запросы cisco-gnmi , pygnmi