Введение в программируемость на основе моделей. Часть первая YANG

Emil Garipov
7 min readJul 14, 2020

--

Статья представляет собой довольно вольный перевод презентации Хэнка Престона и Брайна Берна BRKPRG-1368 с Cisco Live US 2019 с небольшим вступительным словом и комментариями автора статьи.

Презентация разделена на три части YANG, NETCONF и RESTCONF и каждая часть я опишу в отдельной статье.

Статьи

  1. Часть первая YANG
  2. Часть вторая NETCONF
  3. Часть третья RESTCONF

Оглавление статьи — YANG:

  1. Путь к программируемости на основе моделей
  2. Язык моделирования YANG
  3. Работа с моделями данных YANG
  4. Данные сетевых устройств в YANG

Путь к программируемости на основе моделей

Прежде чем перейти непосредственно к YANG, давайте рассмотрим, что собой представляет “Программируемость на основе моделей(Model Driven Programmability)” Простое гугление показало, что в википедии нет еще такого понятия, как Model Driven Programmability. Это означает, что само понятие достаточно новое и еще не успело обрести формы.

Обратимся к авторитету компании Cisco и посмотрим как она объясняет, что такое “Программируемость на основе моделей”.

Цитата: “ Программируемость на основе моделей наследует мощь моделей, что облегчает конфигурирование маршрутизаторов. Она преодолевает недостатки, связанные с традиционными методами управления маршрутизаторами. Решение заключается в использовании моделей данных — программного и стандартизированного способа записи конфигураций на любое сетевое устройство. Используйте его для замены процесса ручной настройки и используйте YANG в качестве де-факто языка моделирования данных.”

Не стало понятнее, но “замены процесса ручной настройки” намекает на автоматизацию этого процесса. “Зачем все это нужно, мы и так все можем ручками настроить”:- могут резонно возразить сетевые инженеры.

На что Cisco из своего блога отвечает:

“Автоматизация программного обеспечения и аналитика данных меняют облик компьютерных сетей. Они радикально меняют то, как строятся и эксплуатируются сети. Мы быстро отходим от мира, где оператор управляет десятками сетевых устройств. Вместо этого один человек может развертывать и управлять сотнями, тысячами и десятками тысяч сложных сетевых устройств с помощью программного обеспечения и анализа данных (каково ваше текущее соотношение?). Эта трансформация быстро распространяется от места своего “рождения”, центра обработки данных, во все точки сети…. Одним из основных компонентов этих нововведений является программируемость на основе модели.”

Получается, что без автоматизации нам не обойтись. Придется учиться, переучиваться, и стараться запрыгнуть в стремительно уходящий поезд под названием “Model Driven Programmability”.

Из презентации Хэнка Престона и Брайна Берна

Язык моделирования YANG

Первым вагоном, куда мы попадем будет язык моделирования данных YANG(Yet Another Next Generation).

Можно выделить три основных значения “ YANG”:

  • YANG это язык программирования — Что-то, что написано на YANG ;
  • Модель YANG — Каким образом представляются фрагменты данных YANG ;
  • Данные YANG — Непосредственные выводы данных YANG.

Из презентации Хэнка Престона и Брайна Берна

Язык моделирования YANG состоит из следующих компонентов:

  • Модуль, представляющий собой автономную иерархию режимов верхнего уровня. По сути это структурированное дерево, которое позволяет группировать информацию в стандартизированном формате;
  • Использует контейнеры для группировки связанных узлов. Все данные разбиваются на контейнеры. А контейнеры в свою очередь представляют собой группу взаимосвязанных устройств;
  • Списки для идентификации устройств, которые хранятся последовательно. В каждом индивидуальном устройстве сохраняется список последовательных данных. К примеру, список интерфейсов с данными, которые должны быть настроены на этих интерфейсах;
  • Каждый отдельный атрибут устройства представлен листом(leaf). Для каждого индивидуального списка существует уникальный фрагмент информации, представленный листом(leaf);
  • Каждый лист должен иметь соответствующий тип. Каждое значение листа имеет ассоциированные с ним данные. Это могут быть различные типы данных — строковые, числовые и т.д. ;

Пример синтаксиса языка YANG Из презентации Хэнка Престона и Брайна Берна

Что же такое модель данных?

Модель данных — это простой хорошо понимаемый и согласованный метод описания “чего-то”. В качестве примера рассмотрим простую “модель данных” относительно человека.

Человек:

  • Пол — мужской, женский, другой пол;
  • Рост — футы/дюймы или метры;
  • Вес — фунты или килограммы;
  • Цвет волос — коричневый, блондинистый, черный, красный и другой;
  • Цвет глаз — карие, синие, зеленые, ореховые, другой.

Что может описать модель данных YANG?

Для представления данных модель данных YANG можно использовать в двух случаях. Для описания моделей данных устройств(описание характеристик интейфейса, vlan-ов, протоколов и т.д.) и описания моделей данных сервисов(L3 MPLS VPN, VRF и т.д.).

Из презентации Хэнка Престона и Брайна Берна

Работа с моделями данных YANG

Откуда берутся эти модели?

Существуют модели данных YANG двух видов.

Первое это модели разработанные на основе отраслевых стандартов(IETF, ITU, OpenConfig и т.д.) и второе это модели, разработанные производителями(Cisco, Juniper, Arista, Huawei и т.д.). В отличие от отраслевых стандартов, модели разработанные производителями могут иметь дополнительную функциональность. К примеру, в Cisco OSPF имеет расширенный функционал в виде проприетарного OSPF Totally Not-So-Stubby Area (NSSA), который можно применить в модели.

Из презентации Хэнка Престона и Брайна Берна

Где взять эти модели?

Все модели данных YANG представлены в репозиториях github.

Модули YANG от таких организаций, как IETF, Open Daylight или специализированных модулей от производителей можно взять из этого репозитория.

Модули от OpenConfig можно получить отсюда. OpenConfig это консорциум сервис провайдеров, таких как Google, Facebook, Microsoft, которые предложили свои модели данных, имеющих следующие характеристики:

  • Сфокусированы на создании независимых от производителя моделей данных, написанных на языке YANG;
  • Модели сочетают в себе как конфигурацию, так и эксплуатационные данные;
  • Охват моделей все еще ограничен в рамках активного сообщества, занимающегося вопросами развития;
  • Поддержка различных производителей сетевого оборудования (например, Cisco, Juniper, Arista).

Представление моделей данных YANG

Модель может быть отображена и представлена в любом из форматов, в зависимости от нужд . Некоторые возможности включают в себя:

  • Язык YANG;
  • Текстовый формат;
  • XML;
  • JSON;
  • HTML/JavaScript

Работа с моделями YANG

Модели YANG можно скопировать к себе из репозитория GitHub для работы с ними. Также можно использовать специальный модуль pyang для просмотра YANG моделей.

Работа с pyang

Pyang это библиотека Python, которая служит для проверки и отображения YANG файлов.

Первое, что попадается на глаза это верхняя строчка, которая обозначает наименование модуля, в нашем случае это ietf-interfaces.

Далее следуют контейнеры, которые в свою очередь состоят из списков.

Каждый список начинается с так называемого ключа. К примеру, interface gig0/0 будет ключом контейнера.

Далее отображается уникальная информация, которая называется лист(leaf).

Знак вопроса в листе представляет собой необязательную часть данных.

И самое последнее это тип данных, которые ожидаются получить.

Значения ro и rw означают данные, что данные либо предоставлены для чтения, либо для записи.

Данные сетевых устройств в YANG

При передаче данных используется три компонента. Это элемент управления, другими словами устройство с которого будут передаваться данные для сетевого устройства, обычно это компьютер сетевого инженера. Второе это агент — непосредственно само сетевое устройство и третий элемент это связующее звено — протокол NETCONF.

Использование NETCONF для получения данных ietf-интерфейсов

Для получения данных с сетевого устройства используется ncclient, который представляет собой клиент Python’a для NETCONF. Он использует встроенную библиотеку для отображения ответа от сетевого устройства — xml.dom.minidom.

Ниже представлен скрипт данных, полученных с сетевого устройства в xml формате.

XML данные, которые показаны, есть прямая корреляция между значениями, которые мы видим в модели Yang, и теми, которые представлены в интересующей части.

Первой строчкой идет пространство имён xml, полученных их модели YANG сетевого устройства. Далее идет список данных интерфейса, включая расширение в виде настроек ip адреса.

Расширения модели YANG

На самом деле проблема заключается в том, что очень сложно просматривать данные обычным заходом в командную строку сетевого устройства. Она может содержать много тысяч строчек, которые физически сложно обработать. YANG позволяет представить данные иерархическом виде(представление в виде дерева). Это позволяет структурировать данные многих тысяч строк настроек сетевого устройства. На рисунке можно видеть отсылку “yang:ietf-ip” на другую модель YANG, которая подключается в структура дерева. Это называется расширением, которая позволяет расширить существующую структуру данных, используя другую модель YANG, чтобы представить другую часть информации.

Исключения модели YANG

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

Например, используя оператор отклонения cisco-xr-openconfig-telemetry-deviations.yang, netconf сервер может указать, что openconfig_telemetry.TelemetrySystem.Subscriptions.Dynamic.Subscription контейнер openconfig_telemetry model не поддерживается.

Краткое резюме по модели данных YANG

  • YANG — язык моделирования данных
  • Модули YANG предназначены для создания стандартных моделей данных для сетевых данных.
  • Данные YANG, отправляемые на сетевое устройство или с него, форматируются в формате XML или JSON в зависимости от протокола (например: NETCONF или RESTCONF).

P.S. Бонус для всех прочитавших статью до конца рабочая тетрадь.

По ней вы можете отрефлексировать, то что прочитали.

Присоединяйтесь к каналу Devnet

--

--