Child pages
  • Инвентаризация: Принципы. Технологии. Протоколы.
Skip to end of metadata
Go to start of metadata

Основные принципы.

Модуль инвентаризации в НОКе выполняет сугубо утилитарную функцию: учёт материального мира. В данном случае, материального мира сетевого хозяйства. В него входит активное оборудование, добавленное в НОК, и пассивные элементы (стойки, помещения (точки присутствия), патч-панели...).

Осноным элементом учёта в Inventory является объект. Есть 2 пути создания объекта Inventory:

  1. Автоматический - путём работы скрипта get_inventory, который считывает физический состав оборудования (платы, модули, порты) и передаёт его НОКу.
  2. Ручной - объект можно создать вручную. В основном, это используется если собрать данные объекте невозможно (н-р шкафы, стойки, здания).

После создания объекта ему необходимо сопоставить модель. Модель - это отражение физического мира средствами НОКа. Она описывает свойства объекта, позволяет собирать более сложные объекты из простых (составные объекты).

С НОКом поставляются коллекции уже созданных моделей. Но если окажется, что какое-то оборудование отсутствует - можно и нужно создать модель самостоятельно - для этого есть все средства.

Требования

Подводя итог. Для полноценной работы Модуля Инвентаризации требуется:

  • Скрипт get_inventory в профиле MO. Данный скрипт считывает состав оборудования (модули, платы, карты) и отдаёт нормализованные данные НОКу, который на основе их создаёт объект пригодный для использования в целях учёта.
  • Модель объекта. Это инструкция, описывающая НОКу с чем он работает. По ней он обрабатывает, пришедшие со стороны скрипта get_inventory, данные и, на их основе, создаёт объекты, которые уже лягут в базу. Если сопоставить данные и модель не удалось - то объект не создастся.
  • Ручной труд. Скрипта, разумеющего считывать пассивное обородувание, не написано (если вам это удастся - поделитесь пожалуйста) поэтому, итоговое размещение оборудования по шкафам, ящикам и точками присутствия проводится вручную (возможно автоматизировать введя чуть дополнительной информации при создании объекта SA, примеры: inventory_add_sa_object.py, NOC-1436 Совсем немного надо предусмотреть при вводе объекта SA чтобы полностью избавится от ручного труда!).

Технологии

Скрипт get_inventory

Как и другие скрипты, пишется индивидуально под ПО, которое находится на MO. Работа его проста: каким-либо способом вытащить все те компоненты, из которых состоит железка. Это желание ограничивается тем, что железка может о себе рассказать. Основное требование - в обязательном порядке должен возвращаться идентификатор (в основном, это PID, Part No) компонента, по нему в последствии будет компонент соединятья с его моделью.

Проверить наличие скрипта для MO и его работоспособность можно в "Management Object" -> <MO> -> Scripts. Двойной клик на get_inventory покажет что ему удалось собрать. Каждая строка - это потенциальный объекту. Для реализации этой потенции, необходимо наличие его модели.

Сопоставление данных и модели происходит только при выполнении скрипта get_inventory из Box discovery (выполнение скрипта во время отладки или из веб-интерфейса информацию в базу не заносит). Поэтому - после добавления/исправления модели - необходимо дождаться выполнения Box discovery.

Модель объекта

После того как НОК получает данные по составу оборудования от скрипта get_inventory, он сопоставляет их с моделями, находящимися у него в базе, и пытается соединить полученные данные в некий объект. Если не удалось соединить какой-либо компонент к составной модели (например вставить линейную карту в шасси), то он добавляется в НОК в виде отдельной простой модели.

Посмотреть список моделей можно в меню Inventory -> Setup -> "Object Models". Зелёная галочка обозначает, что модель является "Встроенной" т.е. идёт в комплекте с дистрибутивом NOC'а. Если добавляются свои модели - они обозначаются красным крестом. Сверху доступен поиск и фильтр по производителю и поиск.

Если компонент упорно не жалает появляться в интерфейсе НОКа, но при этом скрипт показывает, что данные собраны - необходимо проверить:

  1. Есть ли для данного компонента модель
  2. Совпадает ли у компонента и модели Part No (в модели part_no)

Ручной труд

В случае, если получить данные скриптом не удаётся, объект можно создать вручную. Для этого используется основной интерфейс Inventory: Inventory -> Inventory. Сверху есть знак + для ручного добавления объектов. Для добавления достаточно выбрать Тип (это модель объекта) и Имя.

Существует несколько особых типов объектов, перечисленных ниже:

ТипОписание 
RootКорень. Может быть только один (можно добавить 2, но это приведёт к неработоспособности интерфейса инвентори). 
PoP *Точка присутствия (Point of Presence). Отличается наличием географических координат (вкладка Map). 
RackRowПолка в стойке. Используется как контейнер (объект, содержащий другие объекты). 
RackСтойка. Ссодержать другие объекты и позволяет размещать их по юнитам. 
Lost & FoundКонтейнер для автоматически обнаруживаемых объектов 

Никогда не добавляйте объект Root. Из-за этого перестаёт отображаться дерево Inventory в интерфейсе и в логе веб можно увидеть ошибку вида: "EXCEPTION: <type 'exceptions.Exception'> Multiple root objects". При её возникновении необходимо запустить команду ./noc fix (./noc fix apply для microservices)

Порядок работы

Активируем сбор информации о состоянии оборудования

Для этого необходимо в профиле MO проставить галочку Assets: "Service Activation" -> Setup > "Management Object Profiles" -> Box. Также проверить что включён сам сбор информации (галочка Enable). После этого необходимо проверить что профиль назначен необходимому MO.

Проконтролировать что данные начали собираться можно либо по логам, либо в интерфейсе Inventory (Inventory -> Inventory) - начнут появляться объекты. Или через отчёт Inventory -> Reports -> "Unknown Models Summary" - он покажет те компоненты, для которых не нашлось модели.

Для компонентов, попавших в данный отчёт необходимо создать модель. Подробнее о создании модели объекта можно прочитать: Создание модели объекта

Собираем объект.

После отработки скриптов get_inventory в Inventory появится некоторое количество объектов. По умолчанию, они размещаются в контейнере "Global Lost & Found". Значок папки рядом с названием, обозначает контейнер, т.е. объект, в который можут быть вложены (вставлены, размещены) другие объекты.

Помимо Имени у объектов есть другие свойства (аттрибуты), их можно посмотреть на вкладке Data панели справа (цифра 1). Серым обозначаются свойства, значения которых нельзя изменять, это системные аттрибуты НОКом использует их для внутренних нужд. Также, здесь можно увидеть (внизу списка), свойство container оно и отвечает за назначение объекта контейнером. Назначение остальных вкладок, можно понять из названия:

  • Comment - позволяет оставлять заметки.
  • Files - позволяет прикреплять различные файлы (н-р файлы с лицензией, фото...)
  • Log - отображает список всех изменений, произошедших с объектом с момента его создания в НОКе.

Под цифрой 2 мы видим найденный НОКом объект о котором собрана информация.

Также, под цифрой 2, мы видим найденное оборудование, которое представлено как контейнер. При его выборе добавилось 2 дополнительные вкладки на панель справа: Inventory - показывает состав выделенного объекта (характерно для составных объектов) и "Managed Object" показывает страницу "Managed Object" объекта.

Как видно на изображении, в объект (коммутатор) оказались вставлены SFP модули. Это произошло по 2 причинам:

  1. Скрипт get_inventory смог собрать, с оборудования, информацию об установленных SFP модулях (Part No, их положение и куда они вставлены)
  2. В ноке оказалась модель для коммутатора, в которы была указана возможность установки SFP модулей
  3. В ноке оказалась модель для SFP модулей

Поэтому нок автоматически собрал объект из компонентов. Как видно по изображению, выше объекта sw61 лежит некоторое количество объектов, для которых контейнер (устройство, которое их содержит) определить не удалось. Поэтому они одиноко болтаются в "Global Lost & Found".

Под цифрой 3 мы видим созданные вручную объекты (кроме коммутатора sw71).

Менять вложенность объектов и порядок можно простым перетаскиванием. Рассмотрим подробнее представленные объекты.

Корень (Root)

Данный объект неявно присутствует всегда и выполняет функцию корня, из которого начинает строится дерево Inventory. В него вкладываются остальные объекты. По сути представляет собой просто контейнер. Несмотря на наличие его в списке и возможность добавить, не следует этого делать. Нок использует однокоренную систему и корень может быть только один! В случае его раздвоения, придётся брать в руки катану (ну или кому какое режуще/рубящее оружие больше нравится) и идти исправлять множественность.

Объект корень может быть только один. К сожалению, объект не обладает свойством горцев, из фильма (сами по себе корни не смогут привести себя к единственному) и в случае добавления второго, в веб-интерфейсе инвентори перестанут отображаться оъекты, а в логах web появится ошибка "EXCEPTION: <type 'exceptions.Exception'> Multiple root objects".

 Починка Multiple Root Object

В случае если вы столкнулись с размножение корня. Поправить ситуацию может команда "./noc fix" (./noc fix alpply), из корня нока.

 

Точка присутствия (PoP)

Объект Ekb в списке. Выступает как контейнер для других объектов, плюс для него можно задавать географические координаты. Для этого предназначена вкладка Map. Координаты задаются путём отметки (тыкания курсором мышки) на карте, для этого необходимо выбрать инструмент отметки, справа от кнопок масштаба). После выполнения отметки, на вкладке Data, заполнятся координаты. Помимо координат, можно заполнить дополнительные свойства, касательно географических данных. PoP бывают нескольких видов (National, Regional ...), единственное отличие между ними, автоматическое масштабирование карты (соответственно названию).

Географические объекты (Город (City), Здание (Building))

Являются аналогами PoP (можно задавать географические координаты), но предназначены для целей ГИС (рисование кабельного инвентори). Для корректной работы, необходимо размещать их внутри PoP, в этом случае они автоматически привязываются к области PoP. На данный момент модуль ГИС (кабельное инвентори), в этой части, находится в состоянии разработки.

Стойка, шкаф (Rack)

Объект OfficeRack61 в списке. Является объектом-контейнером, но со специальными свойствами: при размещении в него других объектов - учитываются их размеры. Размеры задаются в юнитах (),при создании Модели, поэтому изменить их нельзя. Но можно менять положение объектов в стойке. Для этого необходимо нажать кнопку Edit и задать позицию (Pos. Front или/или Pos. Rear). Свойства самой стойки в разделе asset (serial, asset_no, revision) можно поменять.

Контейнеры (Room, RackRow, ...)

Объекты ServersCase, RackR1, на данный момент, особыми свойствами не выделяются и предназначены для полноты картины, при составлении иерархии.

Примечания

Более подробное описание доступных объектов можно прочитать по ссылке Описание доступных объектов.

Ссылки