Алгоритм открытия услуги
Определение конфигурации сервера
Для тарифов, предоставляющих пользователю выбор комплектующих, определяется конфигурация заказанного сервера на основе значений ресурсов.
- если доступная конфигурация в BILLmanager отличается от текущей конфигурации в DCImanager, то тариф недоступен для заказа;
- если доступная конфигурация в BILLmanager считается актуальной, но в DCImanager конфигурация была изменена, то тариф доступен для заказа. При этом в DCImanager будет создана задача на покупку запчастей. После её обработки выполняется выдача сервера в DCImanager. В BILLmanager создаётся задача на открытие услуги вручную, после её обработки услуга успешно активируется.
Построение списка свободных серверов
Строится список конфигураций свободных серверов. Раз в час биллинговая платформа подключается к DCImanager и получает список всех серверов. Свободными считаются серверы, для которых соблюдаются все условия:
- У сервера нет владельца.
- Доменное имя сервера "free.ds".
- Отсутствуют проблемы с оборудованием (флаг hwproblem в xml).
- Не включена опция "Защитить сервер" (флаг forcelock в xml).
Сравнивается конфигурация заказанного клиентом сервера с конфигурацией свободных серверов. Если свободный сервер с подходящей конфигурацией найден, начинается подготовка сервера.
Иначе подбирается максимально похожий по конфигурации сервер и создаётся задача на сборку этого сервера.
Подготовка сервера
Алгоритм подготовки сервера на стороне DCImanager:
- Владельцем сервера устанавливается администратор (пользователь, под которым настроена интеграция с DCImanager). В случае ошибки на одном из следующих шагов подготовки, владелец сервера не меняется. Это гарантирует, что проблемный сервер не будет выбран повторно во время обработки других заказов.
- Меняется доменное имя сервера на то, которое указал клиент или на сгенерированное автоматически биллинговой платформой.
- Если сервер находится в выключенном состоянии, то выполняется его запуск. Таймаут на запуск — 30 минут.
- Выполняется установка операционной системы. Таймаут на установку для Windows — 200 минут, для Linux — 140.
- Меняется владелец сервера. В качестве нового владельца назначается учётная запись клиента в DCImanager, созданная биллинговой платформой.
В случае успешной подготовки сервера, на стороне BILLmanager статус услуги меняется на "Активен" и клиенту отправляется письмо об открытии услуги.
Если один из этапов подготовки завершился ошибкой, то выбирается следующий подходящий по конфигурации свободный сервер и процедура повторяется. Когда не остаётся подходящих по конфигурации свободных серверов, подбирается максимально похожий по конфигурации сервер и создаётся задача на сборку этого сервера.
Подбор сервера с максимально похожей конфигурацией
Задача алгоритма - подобрать сервер, максимально похожий по комплектации с заказанным. Когда такой сервер найден, для ответственного за сборку отдела создаётся задача. В задаче обозначен свободный сервер и список комплектующих, которые необходимо в нем поменять, чтобы сервер соответствовал заказанной клиентом конфигурации.
Алгоритм поиска сервера для сборки:
- Поиск сервера с подходящими процессорами. В первую очередь выбираются свободные серверы с подходящими процессорами.
- Поиск сервера с подходящей платформой среди "чистых" серверов. Когда нет свободных серверов с подходящими процессорами, выполняется поиск среди "чистых" серверов. Это серверы, у которых еще не определён процессор. Для них происходит проверка на совместимость платформы с процессорами в заказанной конфигурации.
- Поиск любого сервера с подходящей платформой. В последнюю очередь выполняется поиск среди всех свободных серверов с другими процессорами, но подходящей платформой.
Среди выбранных серверов выбирается сервер, с наименьшим отличием по конфигурации. Приоритетом обладают серверы, отличающиеся от заказанной конфигурации только жёсткими дисками.
У выбранного сервера владельцем становится администратор (пользователь, под которым настроена интеграция с DCImanager) и создаётся задача на сборку этого сервера.
Если подходящего сервера для сборки не найдено, то создаётся задача на покупку недостающего оборудования.
Задача на сборку сервера
На вкладке Сервер указывается номер стойки и идентификатор (наклейка) сервера, для которого необходимо произвести замену оборудования.
Вкладки Установить устройства и Извлечь устройства содержат список оборудования, которое необходимо извлечь, и/или установить в сервер, чтобы его конфигурация стала соответствовать заказанной клиентом.
Опция Имеется свободный сервер влияет на действия при закрытии задачи:
- Если опция активна, считается, что среди свободных серверов появился полностью подходящий по конфигурации сервер. Зарезервированный для сборки сервер освобождается в DCImanager (снимается владелец сервера), производится поиск свободного сервера и запускается процесс его подготовки.
- Если опция неактивна, считается, что сотрудник произвел все необходимые действия с выбранным сервером. Чтобы убедиться, в том, что конфигурация теперь соответствует заказанной, на стороне DCImanager запускается диагностика сервера. Диагностика сервера считывает новую конфигурацию сервера и проверяет её соответствие с заказанной клиентом. Если конфигурации совпадают, то запускается процесс подготовки сервера, иначе создаётся новая задача на сборку.
Задача на покупку оборудования
Если сервер для сборки не был найден, ответственному по закупкам отделу создаётся задача на покупку оборудования.
Алгоритм определения недостающих комплектующих:
- Подсчитывается количество процессоров требуемого типа на складе. Если количество свободных процессоров меньше, чем требуется в заказанной конфигурации, то создаётся задача на покупку недостающего количества процессоров. Производится попытка подобрать сервер с подходящей платформой для этих процессоров.
- Если сервер с требуемой платформой найден, то он закрепляется за услугой и владельцем сервера становится администратор.
- Если сервер с требуемой платформой не найден, то в задачу добавляется информация о необходимости покупки платформы.
Вкладка Новые устройства содержит информацию об оборудовании, которое необходимо приобрести.
Опция Имеется свободный сервер влияет на действия при закрытии задачи:
- Если опция активна, считается, что среди свободных серверов появился полностью подходящий по конфигурации сервер. Зарезервированный для сборки сервер освобождается в DCImanager (снимается владелец сервера), производится поиск свободного сервера и запускается процесс его подготовки.
- Если опция неактивна, считается, что необходимые комплектующие приобретены и зарегистрированы на складе в DCImanager. создаётся задача на сборку сервера.
Алгоритм выбора сервера с подходящей для процессора платформой
Рассмотрим ситуацию, когда клиент заказал конфигурацию с двумя процессорами "Intel(R) Xeon(R) CPU E3-1230 v3 @ 3.30GHz".
При поиске подходящего сервера имя процессора и имя платформы приводятся к общему виду:
- Имя процессора. Из имени процессора извлекается часть между "CPU" и "@", символы "-" и "_" заменяются на символ " " (пробел): E3 1230 v3. Из полученной строки вырезается "средняя часть" и, если процессоров более одного, то количество процессоров добавляется в начало строки: 2E3v3.
- Имя платформы. Из наименования платформы (например, "2_E3_v3 Blade") извлекается часть до первого пробела: 2_e3_v3. В полученной строке символы "_" и "x" вырезаются: 2E3v3.
При сравнении преобразованных имен процессора и платформы, регистр текста не учитывается.
Таким образом, сервер с платформой "2_E3_v3 Blade" может быть использован для сборки конфигурации, в состав которой входят 2 процессора "Intel(R) Xeon(R) CPU E3-1230 v3 @ 3.30GHz".
Алгоритм поиска процессора на складе
Рассмотрим ситуацию, когда клиент заказал конфигурацию с двумя процессорами "Intel(R) Xeon(R) CPU E3-1230 v3 @ 3.30GHz".
При поиске на складе имя процессора в конфигурации и имя процессора на складе приводятся к общему виду:
- Имя процессора из конфигурации. Из имени процессора извлекается часть между "CPU" и "@", символы "-" и "_" вырезаются: E31230v3.
- Имя процессора со склада. Из имени процессора извлекается первая часть справа (до пробела), символы "-" и "_" вырезаются, например для "CPU Xeon E3-1230V3": E31230V3.
Сравнение преобразованных имен регистронезависимое.
Таким образом, "Intel(R) Xeon(R) CPU E3-1230 v3 @ 3.30GHz" и "CPU Xeon E3-1230V3" считаются одним и тем же процессором.
Синхронизация
Модуль обработки DCImanager периодически выполняет синхронизацию статуса услуги и проверяет соответствие некоторых параметров услуги.
Синхронизация статуса
При cинхронизации статуса услуг, выбирается весь список услуг в биллинговой платформе, подключенных к обработчику DCImanager, сравнивается статус услуги в BILLmanager и состояние сервера в DCImanager.
Если в BILLmanager услуга имеет статус "Активен", а в DCImanager соответствующий сервер выключен, то биллинговая платформа включает его. Если в BILLmanager услуга в статусе "Остановлен", а в DCImanager сервер включен, то отправляется запрос на выключение сервера.
Синхронизация статуса выполняется каждый день.
Проверка параметров
Соответствие услуги в BILLmanager и сервера в DCImanager происходит по полю "Идентификатор". То есть значение поля Идентификатор на форме редактирования сервера (Товары/Услуги → Выделенный сервер → кнопка Изменить) соответствует полю Id в DCImanager в разделе Серверы.
BILLmanager периодически проверяет наличие идентификатора у услуг в статусе "Активен". Если у сервера в биллинговой платформе не указан идентификатор, создаётся уведомление администратору BILLmanager.
Периодически проверяется соответствие основного IP-адреса, указанного для услуги в BILLmanager и основного IP-адреса сервера в DCImanager. Если адреса не совпадают, создаётся уведомление администратору BILLmanager.
За синхронизацию данных отвечает задание планировщика cron — processing.syncserver.cron.
Сбор статистики
Модуль обработки DCImanager поддерживает сбор статистики по некоторым ресурсам. Статистика собирается каждый час. За сбор статистики отвечает задание планировщика cron — statdaily.cron.
Логирование
Лог взаимодействия биллинговой платформы с DCImanager записывается в файл '/usr/local/mgr5/var/pmdcimgr.log'
В логе можно определить выполняемые операции по следующим записям:
- 'processing/pmdcimgr --runningoperation <код текущей операции> --command open' — открытие услуги
- 'processing/pmdcimgr --runningoperation <код текущей операции> --command close' — закрытие услуги
- 'processing/pmdcimgr --command sync_server --module <код модуля обработки>' — синхронизация данных
- 'processing/pmdcimgr --command stat --module <код модуля обработки>' — сбор статистики
- 'processing/pmdcimgr --command fixip --module <код модуля обработки>' — синхронизация списка IP-адресов