<h1>Импорт справочников GLPI: как за один заход загрузить словари оборудования вместо недели кликов</h1>
<p>Основной ключ этой статьи — <strong>импорт справочников GLPI</strong>. Если ты сюда попал, значит уже открывал раздел «Правила» в GLPI и понял, что руками создавать семьдесят производителей и двадцать типов компьютеров — это не работа, а наказание.</p>
"Быстрый
<br />
Справочники оборудования в GLPI — это не простые выпадающие списки, а правила словарей (RuleDictionary), которые выполняются во время инвентаризации и нормализуют сырые данные от агента. Импортировать заготовку названий можно через кнопку «Импорт» в разделе Администрирование → Правила → нужный словарь, загрузив XML нужной структуры. Но готовые XML с именами — это только каркас: без критериев и действий правило существует, но ничего не делает. В статье: где лежит нужный раздел, как подготовить XML под свою инсталляцию, как добавить критерии и действия вручную и массово через API, и что проверить, чтобы словарь реально заработал.<br />
<h2>1. Диагноз</h2>
<p>Смотри, с чем обычно приходят. Поднял GLPI. Прогнал первую инвентаризацию агентом. Открыл список компьютеров — а там зоопарк: «Hewlett-Packard» и «HP» вперемешку, «Dell Inc.» рядом с «Dell», тип оборудования у половины серверов — пустой. Знакомо?</p>
<p>Дальше начинается классика: заходишь в Настройка → Словари, видишь пустые справочники производителей, типов компьютеров, мониторов, принтеров, телефонов, периферии и сетевого оборудования — и понимаешь, что создавать это все руками через веб-форму придётся раз по семьдесят. GLPI импорт справочников оборудования — это именно про то, как этого избежать.</p>
<p>Что получишь на выходе этой статьи:</p>
<ul>
<li>Готовые к правке XML-файлы для семи словарей: типы компьютеров, производители, типы мониторов, сетевое оборудование, периферия, типы телефонов, типы принтеров</li>
<li>Понимание, почему голый импорт имён — это половина работы, а не вся</li>
<li>Рабочий способ добавить критерии и действия правилам массово, без 150 кликов</li>
<li>Чек-лист проверки, что словарь реально подхватывает данные при инвентаризации</li>
</ul>
<p>Время на весь цикл — час-полтора, если файлы уже готовы. Значительная часть уйдёт не на импорт, а на то, чтобы прописать логику распознавания. Импорт имён — это пять минут на файл.</p>
<p>Нужны права администратора в GLPI, доступ к разделу Правила и минимум один прогон инвентаризации агентом, чтобы видеть сырые значения от реального железа — без них критерии писать вслепую.</p>
<h2>2. Причины</h2>
<p>Почему вообще словари оборудования превращаются в проблему, а не остаются тихой административной рутиной.</p>
<ul>
<li><a title="GLPI установка и настройка: HTTPS, LDAP, inventory, заявки и GLPI Agent" href="https://it-apteka.com/glpi-ustanovka-i-nastrojka-https-ldap-inventory-zajavki-i-glpi-agent/" target="_blank" rel="noopener" data-wpil-monitor-id="3280">GLPI по умолчанию почти пустой. Базовая установка</a> даёт минимальный набор типов и производителей. Реальный парк техники в компании на 40-60 моделей этого набора не покрывает.</li>
<li><strong>Агент присылает сырые строки, а не готовые категории.</strong> WMI и dmidecode отдают то, что зашито производителем в BIOS/SMBIOS: «Hewlett-Packard», «HPE», «HP Inc.» — три разных строки для одной компании.</li>
<li><strong>Ручное создание записи в словаре — это отдельная форма на каждое значение.</strong> Открыл, заполнил название, сохранил, снова открыл. Семьдесят производителей — это не пять минут.</li>
<li><strong>Правило словаря (RuleDictionary) — это не просто список.</strong> У каждого правила есть критерии (что искать в сырых данных) и действия (что присвоить в итоге). Без обоих компонентов правило существует, но бездействует.</li>
<li><strong>Ranking решает, какое правило сработает первым.</strong> Если не выстроить порядок, общее правило «HP» может перехватить то, что должно было уйти в более узкое «HP Inc. — серверы».</li>
<li><strong>Сущности (entities_id) в мультитенантных инсталляциях ломают импорт.</strong> Если у тебя одна сущность в GLPI называется не так, как в экспортированном файле, импорт либо упадёт, либо привяжет правила не туда.</li>
<li><strong>Разные версии GLPI по-разному ведут себя с пустыми критериями.</strong> В части версий правило без критериев считается «всегда истинным», в других — никогда не срабатывает. Разница критична для итогового поведения.</li>
</ul>
<h2>3. Рецепт</h2>
<h3>Подготовка</h3>
<table>
<tbody>
<tr>
<th>Компонент</th>
<th>Минимальная версия</th>
<th>Комментарий</th>
</tr>
<tr>
<td>GLPI</td>
<td>10.0.26 (LTS) или 11.0.8 (стабильная)</td>
<td>На момент публикации это актуальные сборки. Перед импортом проверь свежие релизы на <a href="https://github.com/glpi-project/glpi/releases" target="_blank" rel="nofollow noopener">github.com/glpi-project/glpi/releases</a></td>
</tr>
<tr>
<td>PHP</td>
<td>8.2+</td>
<td>Для GLPI 11.0 обязателен минимум 8.2, для 10.0.x хватает 7.4-8.2</td>
</tr>
<tr>
<td>MariaDB / <a class="wpil_keyword_link" title="MySQL" href="https://it-apteka.com/tag/mysql/" target="_blank" rel="noopener" data-wpil-keyword-link="linked" data-wpil-monitor-id="3285">MySQL</a></td>
<td>10.6+ / 8.0+</td>
<td>Поддержка MariaDB 10.5 и старше прекращена в свежих релизах</td>
</tr>
<tr>
<td>GLPI Agent</td>
<td>актуальная из Marketplace</td>
<td>Именно агент формирует сырые данные, которые ловят правила словарей</td>
</tr>
</tbody>
</table>
<p>Права в GLPI: профиль администратора с доступом к разделу «Правила» (Rules). Без этого пункта меню словарей просто не появится в интерфейсе.</p>
<p>Архивчик с готовыми XML-заготовками я выложил тут: <a href="https://it-apteka.com/wp-content/uploads/2026/08/glpi_import.zip" target="_blank" rel="noopener">glpi_import.zip</a>. Внутри семь файлов — по одному на каждый словарь: типы компьютеров, производители, типы мониторов, сетевое оборудование, периферия, типы телефонов, типы принтеров.</p>
<pre class="mermaid">%%{init: {
'theme': 'base',
'themeVariables': {
'primaryColor': '#f8fafc',
'primaryTextColor': '#1e293b',
'primaryBorderColor': '#94a3b8',
'lineColor': '#64748b',
'fontSize': '15px',
'fontFamily': 'ui-sans-serif, system-ui, sans-serif'
},
'flowchart': {'curve': 'linear', 'nodeSpacing': 50, 'rankSpacing': 50}
}}%%
flowchart TD
A["GLPI Agent"] --> B["Сырые данные железа"]
B --> C["Rules Engine словарей"]
C --> D["Критерий совпал"]
D --> E["Стандартное значение в актив"]
C --> F["Критерий не совпал"]
F --> G["Значение остаётся сырым"]
style A fill:#f8fafc,stroke:#3b82f6,stroke-width:2px,color:#1e40af
style B fill:#f8fafc,stroke:#f97316,stroke-width:2px,color:#9a3412
style C fill:#f8fafc,stroke:#3b82f6,stroke-width:2px,color:#1e40af
style D fill:#f8fafc,stroke:#22c55e,stroke-width:2px,color:#15803d
style E fill:#f8fafc,stroke:#22c55e,stroke-width:2px,color:#15803d
style F fill:#f8fafc,stroke:#ef4444,stroke-width:2px,color:#991b1b
style G fill:#f8fafc,stroke:#ef4444,stroke-width:2px,color:#991b1b
</pre>
<p>Смотри на эту схему как на карту дальнейших шагов. Мы сейчас на этапе C — создаём правила. Всё, что справа и ниже, заработает только если правильно настроить критерии.</p>
<h3>Шаг 1. Пойми структуру XML, прежде чем что-то грузить</h3>
<p>Формат импорта у GLPI жёсткий. Каждый файл — это набор тегов <code><rule></code> внутри корня <code><rules></code>. Вот минимальный валидный блок для одного правила словаря производителей:</p>
<pre><code class="language-text">
<?xml version='1.0' encoding='utf-8'?>
<rules>
<rule>
<entities_id>Root entity</entities_id>
<sub_type>RuleDictionnaryManufacturer</sub_type>
<ranking>0</ranking>
<name>Dell</name>
<description>Серверы, ПК, ноутбуки, мониторы</description>
<match>AND</match>
<is_active>1</is_active>
<comment />
<is_recursive>0</is_recursive>
<condition>0</condition>
</rule>
</rules>
</code></pre>
<p>Вот тут важно не перепутать: <code>sub_type</code> жёстко привязывает файл к конкретному разделу интерфейса. Загрузишь файл с <code>RuleDictionnaryComputerType</code> в раздел словаря мониторов — импорт либо откажется, либо создаст мусор не там. Таблица соответствия:</p>
<table>
<tbody>
<tr>
<th>Файл из архива</th>
<th>sub_type в XML</th>
<th>Куда грузить в GLPI</th>
</tr>
<tr>
<td>glpi_computertypes_import.xml</td>
<td>RuleDictionnaryComputerType</td>
<td>Администрирование → Правила → Словарь типов компьютеров</td>
</tr>
<tr>
<td>glpi_manufacturers_import.xml</td>
<td>RuleDictionnaryManufacturer</td>
<td>Администрирование → Правила → Словарь производителей</td>
</tr>
<tr>
<td>glpi_monitortypes_import.xml</td>
<td>RuleDictionnaryMonitorType</td>
<td>Администрирование → Правила → Словарь типов мониторов</td>
</tr>
<tr>
<td>glpi_networkequipmenttypes_import.xml</td>
<td>RuleDictionnaryNetworkEquipment</td>
<td>Администрирование → Правила → Словарь сетевого оборудования</td>
</tr>
<tr>
<td>glpi_peripheraltypes_import.xml</td>
<td>RuleDictionnaryPeripheral</td>
<td>Администрирование → Правила → Словарь периферии</td>
</tr>
<tr>
<td>glpi_phonetypes_import.xml</td>
<td>RuleDictionnaryPhoneType</td>
<td>Администрирование → Правила → Словарь типов телефонов</td>
</tr>
<tr>
<td>glpi_printertypes_import.xml</td>
<td>RuleDictionnaryPrinterType</td>
<td>Администрирование → Правила → Словарь типов принтеров</td>
</tr>
</tbody>
</table>
<h3>Шаг 2. Почини entities_id перед загрузкой</h3>
<p>Вот тут людей режет чаще всего. В экспортированном файле <code>entities_id</code> хранится как имя сущности, а не как её ID из базы. Если название сущности в файле не совпадает буква в букву с твоей — импорт либо откатится на корневую сущность, либо выдаст ошибку в зависимости от версии.</p>
"Перед
<br />
Прежде чем грузить файл, замени значение entities_id на точное имя твоей сущности в GLPI. Проверить название можно в разделе Администрирование → Сущности. Регистр и пробелы важны — GLPI ищет строгое совпадение.<br />
<pre><code class="language-bash">
# заменяем "Комета ООО" на реальное имя твоей сущности во всех XML разом
cd glpi_import
for f in *.xml; do
sed -i 's/Комета ООО<\/entities_id>/Root entity<\/entities_id>/' "$f"
done
# проверяем что замена прошла
grep -c "entities_id" *.xml
</code></pre>
<p>Результат: во всех семи файлах строка <code>entities_id</code> указывает на реально существующую в твоей инсталляции сущность. Если работаешь с несколькими сущностями (филиалы, клиенты в мультиарендной GLPI) — разбей файлы и распредели правила по нужным веткам заранее, до загрузки.</p>
<h3>Шаг 3. Загрузи файл через интерфейс</h3>
<p>CLI-команды для импорта правил в GLPI нет — это операция строго через веб-интерфейс. Заходи в нужный раздел словаря, листай список правил до конца страницы, там кнопка «Импорт». Выбираешь файл, GLPI показывает предпросмотр — сколько правил будет создано, сколько уже существует с таким же UUID (их пропустит).</p>
<pre><code class="language-text">
Setup → Rules → Dictionary rules → [нужный словарь] → Import
</code></pre>
<p>После подтверждения GLPI создаёт правила пачкой. Проверь ranking — импорт сохраняет порядок из файла, но если у тебя уже были свои правила в этом словаре, новые встанут в конец списка. Порядок стоит пересобрать вручную сразу после импорта, иначе более специфичные правила окажутся ниже общих и никогда не сработают.</p>
<h3>Шаг 4. Пойми, чего не хватает в готовых файлах</h3>
<p>А вот и главный подвох. Открой любое правило из только что импортированных — и увидишь пустые вкладки «Критерии» и «Действия». Заготовка даёт только имя и описание. Это каркас дома без начинки: стены стоят, а жить в нём пока нельзя.</p>
<p>Ну и запросы у вас, — сказала база данных и повисла. Шучу. На самом деле GLPI ничего не роняет. Просто правило без действия молча ничего не делает, и это молчание можно принять за баг, хотя это ожидаемое поведение.</p>
<p>Чтобы правило заработало, нужны минимум одно условие (критерий) и минимум одно действие. Пример для правила «Dell» в словаре производителей:</p>
<ul>
<li><strong>Критерий:</strong> поле «Производитель» (raw manufacturer) содержит «Dell Inc.»</li>
<li><strong>Действие:</strong> присвоить стандартное значение производителя «Dell»</li>
</ul>
<p>Через интерфейс это делается так: открываешь правило → вкладка «Критерии» → «Добавить критерий» → выбираешь поле, условие («содержит», «равно», регулярное выражение) и паттерн. Дальше вкладка «Действия» → «Присвоить стандартное значение» → выбираешь итоговое значение из выпадающего списка (оно должно уже существовать как запись словаря — собственно, для этого и нужен был импорт имён на шаге 3).</p>
<h3>Шаг 5. Автоматизируй добивку критериев и действий через API</h3>
<p>Кликать это вручную по семьдесят раз — то же самое мучение, от которого мы бежали изначально. GLPI REST API умеет создавать <code>RuleCriteria</code> и <code>RuleAction</code> программно. Вот рабочий <a class="wpil_keyword_link" title="Скрипты" href="https://it-apteka.com/category/scripts/" target="_blank" rel="noopener" data-wpil-keyword-link="linked" data-wpil-monitor-id="3286">скрипт</a>, который проходит по всем правилам словаря производителей и для каждого добавляет критерий «содержит имя правила» плюс действие «присвоить это же имя как стандартное значение»:</p>
<pre><code class="language-python">
import requests
GLPI_URL = "https://it-apteka.com/glpi/apirest.php"
APP_TOKEN = "твой_app_token"
USER_TOKEN = "твой_user_token"
session = requests.post(
f"{GLPI_URL}/initSession",
headers={"App-Token": APP_TOKEN, "Authorization": f"user_token {USER_TOKEN}"}
).json()["session_token"]
headers = {"App-Token": APP_TOKEN, "Session-Token": session}
# получаем все правила словаря производителей без критериев
rules = requests.get(
f"{GLPI_URL}/Rule",
headers=headers,
params={"searchText[sub_type]": "RuleDictionnaryManufacturer", "range": "0-200"}
).json()
for rule in rules:
rule_id = rule["id"]
name = rule["name"]
# критерий: raw manufacturer содержит имя правила
requests.post(f"{GLPI_URL}/RuleCriteria", headers=headers, json={
"input": {
"rules_id": rule_id,
"criteria": "manufacturer",
"condition": 0, # 0 = содержит
"pattern": name
}
})
# действие: присвоить стандартное значение
requests.post(f"{GLPI_URL}/RuleAction", headers=headers, json={
"input": {
"rules_id": rule_id,
"action_type": "assign",
"field": "manufacturer",
"value": name
}
})
requests.post(f"{GLPI_URL}/killSession", headers=headers)
print("Готово: критерии и действия добавлены")
</code></pre>
<p>Это базовый шаблон — под реальные данные придётся подправить паттерны, потому что «Dell» и «Dell Inc.» это не одно и то же для строгого сравнения. Для производителей почти всегда нужно несколько альтернативных написаний на одно правило: добавь второй критерий с условием «ИЛИ» на вкладке критериев вручную для тех производителей, у которых зоопарк названий в реальных отчётах агента.</p>
<h3>Шаг 6. Выставь ranking осознанно</h3>
<p>GLPI проверяет правила по порядку ranking и по умолчанию останавливается на первом совпадении, если в самом правиле не включена галочка «продолжить проверку». Значит: узкие и специфичные правила должны стоять выше общих.</p>
<p>Пример на словаре типов компьютеров: если у тебя есть отдельное правило «Сервер (виртуальный хост)» и общее «Сервер (стоечный)», специфичное должно проверяться первым — иначе виртуальный хост навсегда осядет в общей категории.</p>
<pre><code class="language-text">
Правильный порядок (сверху вниз = выше приоритет):
0. Сервер (виртуальный хост) - узкий критерий по модели/hypervisor
1. Сервер (блейд) - узкий критерий по форм-фактору
2. Сервер (стоечный) - общий признак "rack" в модели
3. Рабочая станция (CAD/3D) - узкий критерий по видеокарте
4. Рабочая станция - общее правило по умолчанию
</code></pre>
<h3>Шаг 7. Повтори для остальных шести словарей</h3>
<p>Логика идентична для типов мониторов, сетевого оборудования, периферии, телефонов и принтеров. Разница только в наборе полей критериев — для сетевого оборудования это будет тип устройства и производитель из SNMP-опроса, для принтеров — модель и класс устройства (МФУ определяется по наличию функции сканирования в отчёте агента).</p>
<p>Не пытайся сделать все семь словарей идеально с первого захода. Загрузи имена везде, добавь критерии для 15-20 самых частых позиций в твоём парке техники — это закроет 80% реальных случаев. Остальное доводи по мере появления новых моделей в инвентаризации.</p>
<h2>4. Проверка</h2>
<p>После <a title="Настройка OSPF на MikroTik RouterOS 7: полный гайд от диагноза до проверки" href="https://it-apteka.com/nastrojka-ospf-na-mikrotik-routeros-7-polnyj-gajd-ot-diagnoza-do-proverki/" target="_blank" rel="noopener" data-wpil-monitor-id="3279">настройки критериев и действий проверка</a> в три шага.</p>
<pre><code class="language-text">
1. Ручной прогон правила на существующем активе:
Открой актив → вкладка "Правила" (если доступна) → "Тестировать правило"
2. Принудительный пересчёт словарей на всём парке:
Настройка → Словари → кнопка "Заменить"
Это прогонит уже накопленные данные через обновлённые правила
3. Прогон свежей инвентаризации:
Запусти агента вручную на одной машине и сверь итоговое
значение производителя/типа в карточке актива
</code></pre>
<p>Смотри <a title="Безопасность MikroTik CHR: базовая настройка SSH, логов и защиты от брутфорса" href="https://it-apteka.com/bezopasnost-mikrotik-chr-bazovaja-nastrojka-ssh-logov-i-zashhity-ot-brutforsa/" target="_blank" rel="noopener" data-wpil-monitor-id="3281">логи</a> GLPI при массовой замене — раздел Настройка → Журналы → отфильтруй по типу события «rules». Если правило сработало, там будет запись о применении с указанием rules_id.</p>
<table>
<tbody>
<tr>
<th>Что проверяем</th>
<th>Ожидаемый результат</th>
</tr>
<tr>
<td>Карточка актива после Replay</td>
<td>Производитель и тип показывают нормализованное значение, не сырую строку от агента</td>
</tr>
<tr>
<td>Вкладка «Критерии» правила</td>
<td>Минимум один критерий, условие соответствует реальному значению из сырых данных</td>
</tr>
<tr>
<td>Вкладка «Действия» правила</td>
<td>Минимум одно действие с типом «assign» и заполненным значением</td>
</tr>
<tr>
<td>Порядок ranking в словаре</td>
<td>Специфичные правила выше общих, конфликтов приоритета нет</td>
</tr>
</tbody>
</table>
<h2>5. Осложнения</h2>
<table>
<tbody>
<tr>
<th>Ошибка</th>
<th>Причина</th>
<th>Решение</th>
<th>Команда / действие</th>
</tr>
<tr>
<td>Импорт падает с ошибкой сущности</td>
<td>entities_id в файле не совпадает ни с одной существующей сущностью</td>
<td>Исправь значение перед загрузкой, сверь точное название в Администрирование → Сущности</td>
<td><code>sed -i 's/<entities_id>.*<\/entities_id>/<entities_id>Root entity<\/entities_id>/' файл.xml</code></td>
</tr>
<tr>
<td>Правила импортировались, но тип/производитель не проставляется</td>
<td>У правила нет критериев и действий — это ожидаемо для готовых XML-заготовок</td>
<td>Добавь критерий и действие вручную или через скрипт из шага 5</td>
<td>см. Python-скрипт выше</td>
</tr>
<tr>
<td>Одинаковые правила задублировались после повторного импорта</td>
<td>UUID в файле изменили или сгенерировали заново перед повторной загрузкой</td>
<td>Перед повторным импортом убедись что UUID совпадают с уже существующими правилами, либо удали дубликаты вручную</td>
<td>Настройка → Словари → сортировка по названию, ручная зачистка</td>
</tr>
<tr>
<td>Общее правило перехватывает случаи, которые должны попадать в специфичное</td>
<td>Неверный ranking — общее правило стоит выше узкого</td>
<td>Перетащи специфичные правила выше общих в списке</td>
<td>Drag-and-drop в интерфейсе словаря или правка поля ranking</td>
</tr>
<tr>
<td>Правило не срабатывает даже с заполненными критериями</td>
<td>Критерий сравнивается не с тем полем — например ищет в «model», а нужное значение приходит в «manufacturer»</td>
<td>Сверь реальные сырые данные в необработанном отчёте инвентаризации перед написанием критерия</td>
<td>Настройка → Инвентаризация → Просмотр XML/JSON последнего отчёта агента</td>
</tr>
<tr>
<td>После обновления GLPI словари словно обнулились</td>
<td>Обновление затронуло схему таблиц rule_criteria/rule_action в редких мажорных релизах</td>
<td>Проверь changelog версии на предмет изменений Rules Engine, восстанови из бэкапа при необходимости</td>
<td><code>mysql glpidb < backup_rules.sql</code></td>
</tr>
</tbody>
</table>
<h2>6. Альтернативы</h2>
<p>Импорт правил словарей — не единственный путь, но для GLPI импорт справочников оборудования именно так и задуман архитектурно.</p>
<ul>
<li><strong>Ручное создание через UI без импорта.</strong> Работает для 5-10 значений. На семидесяти производителях умирает от скуки задолго до завершения.</li>
<li><strong>Прямая правка через SQL в таблицах glpi_rules, glpi_rulecriterias, glpi_ruleactions.</strong> Быстрее, но легко сломать целостность данных, если не знаешь точную структуру внешних ключей. Используй только если понимаешь схему и держишь свежий бэкап под рукой.</li>
<li><strong>Плагин Data Injection.</strong> Позволяет массово загружать данные через CSV с маппингом полей, включая словарные значения. Хорош для разовой миграции из другой CMDB, избыточен для регулярного пополнения словарей.</li>
<li><strong>Полный отказ от нормализации, работа с сырыми значениями.</strong> Технически возможно — GLPI не заставляет использовать словари. На практике превращает отчёты и дашборды в кашу из разнописных значений одного и того же производителя.</li>
</ul>
<p>Основной ключ выбран не случайно: импорт справочников GLPI через XML — единственный способ, который сохраняет ranking, UUID и структуру правил в переносимом виде между инсталляциями. Остальные варианты либо медленнее, либо рискованнее для целостности базы.</p>
<h2>7. Профилактика</h2>
<p>Капля никотина убивает лошадь. Одна забытая заглушка ranking в словаре производителей — весь квартальный отчёт по парку техники, потому что половина серверов Dell вдруг оказалась «неизвестным производителем».</p>
<ul>
<li><strong>Бэкап перед любой массовой операцией.</strong> Таблицы rules, rulecriterias, ruleactions, dictionary-справочники — в отдельный дамп перед импортом или Replay.</li>
<li><strong>Мониторинг «сырых» значений.</strong> Раз в месяц смотри в разделе активов, сколько записей осталось с нераспознанным производителем или пустым типом — это сигнал добавить недостающие критерии.</li>
<li><strong>Регламент на новые модели техники.</strong> Как только в компании закупили новую линейку оборудования, сразу добавь для неё правило, а не жди пока накопится сотня немаркированных активов.</li>
<li><strong>Версионирование правил.</strong> Экспортируй словари в XML после каждого значимого изменения и храни рядом с остальной инфраструктурной документацией — это твой откат на случай кривого редактирования.</li>
<li><strong>Тестируй критерии на реальных данных, а не на предположениях.</strong> То что «Dell» встречается в отчёте именно так, а не «DELL INC.» — нужно проверить, а не угадать.</li>
<li><strong>Разделяй права на редактирование словарей.</strong> Не давай всем администраторам GLPI доступ к правкам ranking — один неаккуратный клик ломает порядок проверки для всей компании.</li>
<li><strong>Проверяй словари после каждого крупного обновления GLPI.</strong> Мажорные релизы иногда меняют поведение движка правил — молча.</li>
</ul>
<h3>Резервное копирование</h3>
<table>
<tbody>
<tr>
<th>Что бэкапить</th>
<th>Как часто</th>
<th>Где хранить</th>
<th>Как восстановить</th>
</tr>
<tr>
<td>Таблицы glpi_rules*, glpi_ruledictionary*</td>
<td>Перед каждым массовым импортом/Replay</td>
<td>Отдельный дамп на файловом хранилище, вне продакшн-сервера</td>
<td><code>mysql glpidb < dump.sql</code> после остановки веб-сервера</td>
</tr>
<tr>
<td>Экспортированные XML словарей</td>
<td>После каждого значимого изменения правил</td>
<td><a class="wpil_keyword_link" title="Git" href="https://it-apteka.com/tag/git/" target="_blank" rel="noopener" data-wpil-keyword-link="linked" data-wpil-monitor-id="3284">Git</a>-репозиторий инфраструктурной документации</td>
<td>Повторный импорт через UI</td>
</tr>
</tbody>
</table>
<h3>Обновление</h3>
<p>Перед обновлением GLPI на мажорную версию: сними дамп таблиц правил, прочитай changelog на предмет изменений в Rules Engine, прогони обновление сначала на тестовом стенде с копией продакшн-базы. Откат при проблеме — восстановление дампа плюс возврат к предыдущему архиву GLPI.</p>
<h2>8. FAQ</h2>
<h3>Почему тип оборудования не проставляется автоматически после настройки словаря?</h3>
<p>Чаще всего потому что у импортированного правила нет критериев и действий — готовый XML даёт только имя и описание, это каркас, а не рабочую логику. Проверь вкладки «Критерии» и «Действия» у конкретного правила, при пустых вкладках распознавания не будет никогда.</p>
<h3>Как проверить что словарь работает правильно?</h3>
<p>Запусти кнопку «Заменить» (Replay) в разделе словаря — она прогонит уже существующие данные через текущие правила. Дальше сверь карточки активов: производитель и тип должны показывать нормализованное значение, а не сырую строку от агента.</p>
<h3>Что делать если entities_id не совпадает с моей инсталляцией?</h3>
<p>Замени значение на точное название твоей сущности перед загрузкой файла — GLPI ищет строгое текстовое совпадение, а не по ID. Проверить корректное имя можно в разделе Администрирование → Сущности.</p>
<h3>Чем словарь-правило (RuleDictionary) отличается от обычного справочника (Dropdown)?</h3>
<p>Обычный справочник — это статичный список значений, который выбирают вручную при заполнении карточки. Правило словаря работает автоматически во время инвентаризации: сравнивает сырые данные от агента с критериями и само присваивает нужное стандартное значение, без участия человека.</p>
<h3>Можно ли ошибиться и сломать существующие данные при импорте?</h3>
<p>Сам импорт создаёт только новые записи правил и не трогает уже существующие активы. Риск появляется на этапе Replay — принудительный пересчёт может переписать значения на активах, если критерии настроены неточно. Перед Replay всегда снимай бэкап.</p>
<h3>Почему один и тот же производитель встречается в разных написаниях у одного вендора?</h3>
<p>Прошивка и агенты разных версий на разном железе одного вендора отдают разные строки в SMBIOS — это не баг GLPI, а особенность оборудования. Решение — несколько критериев с условием «ИЛИ» внутри одного правила, покрывающих все варианты написания.</p>
<h2>9. Прогноз</h2>
<p>Если прошёл все семь шагов — словари оборудования в GLPI перестали быть пустой формальностью и начали реально работать при каждой инвентаризации. Новые активы, которые попадают в систему через агента, автоматически получают нормализованное имя производителя и корректный тип, без ручной правки карточки.</p>
<p>Дальше это просто живёт само — раз в квартал сверяешь список нераспознанных значений и добавляешь пару новых критериев под свежекупленное железо. Рождённый в legacy рефакторинга не боится, а вот к пустым словарям возвращаться никому не хочется.</p>
<p>Если после импорта что-то не завелось — пиши в комментарии, разберёмся.</p>
Импорт справочников GLPI: как за один заход загрузить словари оборудования вместо недели кликов
Основной ключ этой статьи — импорт справочников GLPI. Если ты сюда попал, значит уже открывал раздел «Правила» в GLPI и понял, что руками создавать семьдесят производителей и двадцать типов компьютеров — это не работа, а наказание.
Быстрый ответ
Справочники оборудования в GLPI — это не простые выпадающие списки, а правила словарей (RuleDictionary), которые выполняются во время инвентаризации и нормализуют сырые данные от агента. Импортировать заготовку названий можно через кнопку «Импорт» в разделе Администрирование → Правила → нужный словарь, загрузив XML нужной структуры. Но готовые XML с именами — это только каркас: без критериев и действий правило существует, но ничего не делает. В статье: где лежит нужный раздел, как подготовить XML под свою инсталляцию, как добавить критерии и действия вручную и массово через API, и что проверить, чтобы словарь реально заработал.
1. Диагноз
Смотри, с чем обычно приходят. Поднял GLPI. Прогнал первую инвентаризацию агентом. Открыл список компьютеров — а там зоопарк: «Hewlett-Packard» и «HP» вперемешку, «Dell Inc.» рядом с «Dell», тип оборудования у половины серверов — пустой. Знакомо?
Дальше начинается классика: заходишь в Настройка → Словари, видишь пустые справочники производителей, типов компьютеров, мониторов, принтеров, телефонов, периферии и сетевого оборудования — и понимаешь, что создавать это все руками через веб-форму придётся раз по семьдесят. GLPI импорт справочников оборудования — это именно про то, как этого избежать.
Что получишь на выходе этой статьи:
- Готовые к правке XML-файлы для семи словарей: типы компьютеров, производители, типы мониторов, сетевое оборудование, периферия, типы телефонов, типы принтеров
- Понимание, почему голый импорт имён — это половина работы, а не вся
- Рабочий способ добавить критерии и действия правилам массово, без 150 кликов
- Чек-лист проверки, что словарь реально подхватывает данные при инвентаризации
Время на весь цикл — час-полтора, если файлы уже готовы. Значительная часть уйдёт не на импорт, а на то, чтобы прописать логику распознавания. Импорт имён — это пять минут на файл.
Нужны права администратора в GLPI, доступ к разделу Правила и минимум один прогон инвентаризации агентом, чтобы видеть сырые значения от реального железа — без них критерии писать вслепую.
2. Причины
Почему вообще словари оборудования превращаются в проблему, а не остаются тихой административной рутиной.
- GLPI по умолчанию почти пустой. Базовая установка даёт минимальный набор типов и производителей. Реальный парк техники в компании на 40-60 моделей этого набора не покрывает.
- Агент присылает сырые строки, а не готовые категории. WMI и dmidecode отдают то, что зашито производителем в BIOS/SMBIOS: «Hewlett-Packard», «HPE», «HP Inc.» — три разных строки для одной компании.
- Ручное создание записи в словаре — это отдельная форма на каждое значение. Открыл, заполнил название, сохранил, снова открыл. Семьдесят производителей — это не пять минут.
- Правило словаря (RuleDictionary) — это не просто список. У каждого правила есть критерии (что искать в сырых данных) и действия (что присвоить в итоге). Без обоих компонентов правило существует, но бездействует.
- Ranking решает, какое правило сработает первым. Если не выстроить порядок, общее правило «HP» может перехватить то, что должно было уйти в более узкое «HP Inc. — серверы».
- Сущности (entities_id) в мультитенантных инсталляциях ломают импорт. Если у тебя одна сущность в GLPI называется не так, как в экспортированном файле, импорт либо упадёт, либо привяжет правила не туда.
- Разные версии GLPI по-разному ведут себя с пустыми критериями. В части версий правило без критериев считается «всегда истинным», в других — никогда не срабатывает. Разница критична для итогового поведения.
3. Рецепт
Подготовка
| Компонент |
Минимальная версия |
Комментарий |
| GLPI |
10.0.26 (LTS) или 11.0.8 (стабильная) |
На момент публикации это актуальные сборки. Перед импортом проверь свежие релизы на github.com/glpi-project/glpi/releases |
| PHP |
8.2+ |
Для GLPI 11.0 обязателен минимум 8.2, для 10.0.x хватает 7.4-8.2 |
| MariaDB / MySQL |
10.6+ / 8.0+ |
Поддержка MariaDB 10.5 и старше прекращена в свежих релизах |
| GLPI Agent |
актуальная из Marketplace |
Именно агент формирует сырые данные, которые ловят правила словарей |
Права в GLPI: профиль администратора с доступом к разделу «Правила» (Rules). Без этого пункта меню словарей просто не появится в интерфейсе.
Архивчик с готовыми XML-заготовками я выложил тут: glpi_import.zip. Внутри семь файлов — по одному на каждый словарь: типы компьютеров, производители, типы мониторов, сетевое оборудование, периферия, типы телефонов, типы принтеров.
%%{init: {
'theme': 'base',
'themeVariables': {
'primaryColor': '#f8fafc',
'primaryTextColor': '#1e293b',
'primaryBorderColor': '#94a3b8',
'lineColor': '#64748b',
'fontSize': '15px',
'fontFamily': 'ui-sans-serif, system-ui, sans-serif'
},
'flowchart': {'curve': 'linear', 'nodeSpacing': 50, 'rankSpacing': 50}
}}%%
flowchart TD
A["GLPI Agent"] --> B["Сырые данные железа"]
B --> C["Rules Engine словарей"]
C --> D["Критерий совпал"]
D --> E["Стандартное значение в актив"]
C --> F["Критерий не совпал"]
F --> G["Значение остаётся сырым"]
style A fill:#f8fafc,stroke:#3b82f6,stroke-width:2px,color:#1e40af
style B fill:#f8fafc,stroke:#f97316,stroke-width:2px,color:#9a3412
style C fill:#f8fafc,stroke:#3b82f6,stroke-width:2px,color:#1e40af
style D fill:#f8fafc,stroke:#22c55e,stroke-width:2px,color:#15803d
style E fill:#f8fafc,stroke:#22c55e,stroke-width:2px,color:#15803d
style F fill:#f8fafc,stroke:#ef4444,stroke-width:2px,color:#991b1b
style G fill:#f8fafc,stroke:#ef4444,stroke-width:2px,color:#991b1b
Смотри на эту схему как на карту дальнейших шагов. Мы сейчас на этапе C — создаём правила. Всё, что справа и ниже, заработает только если правильно настроить критерии.
Шаг 1. Пойми структуру XML, прежде чем что-то грузить
Формат импорта у GLPI жёсткий. Каждый файл — это набор тегов <rule> внутри корня <rules>. Вот минимальный валидный блок для одного правила словаря производителей:
<?xml version='1.0' encoding='utf-8'?>
<rules>
<rule>
<entities_id>Root entity</entities_id>
<sub_type>RuleDictionnaryManufacturer</sub_type>
<ranking>0</ranking>
<name>Dell</name>
<description>Серверы, ПК, ноутбуки, мониторы</description>
<match>AND</match>
<is_active>1</is_active>
<comment />
<is_recursive>0</is_recursive>
<condition>0</condition>
</rule>
</rules>
Вот тут важно не перепутать: sub_type жёстко привязывает файл к конкретному разделу интерфейса. Загрузишь файл с RuleDictionnaryComputerType в раздел словаря мониторов — импорт либо откажется, либо создаст мусор не там. Таблица соответствия:
| Файл из архива |
sub_type в XML |
Куда грузить в GLPI |
| glpi_computertypes_import.xml |
RuleDictionnaryComputerType |
Администрирование → Правила → Словарь типов компьютеров |
| glpi_manufacturers_import.xml |
RuleDictionnaryManufacturer |
Администрирование → Правила → Словарь производителей |
| glpi_monitortypes_import.xml |
RuleDictionnaryMonitorType |
Администрирование → Правила → Словарь типов мониторов |
| glpi_networkequipmenttypes_import.xml |
RuleDictionnaryNetworkEquipment |
Администрирование → Правила → Словарь сетевого оборудования |
| glpi_peripheraltypes_import.xml |
RuleDictionnaryPeripheral |
Администрирование → Правила → Словарь периферии |
| glpi_phonetypes_import.xml |
RuleDictionnaryPhoneType |
Администрирование → Правила → Словарь типов телефонов |
| glpi_printertypes_import.xml |
RuleDictionnaryPrinterType |
Администрирование → Правила → Словарь типов принтеров |
Шаг 2. Почини entities_id перед загрузкой
Вот тут людей режет чаще всего. В экспортированном файле entities_id хранится как имя сущности, а не как её ID из базы. Если название сущности в файле не совпадает буква в букву с твоей — импорт либо откатится на корневую сущность, либо выдаст ошибку в зависимости от версии.
Перед импортом
Прежде чем грузить файл, замени значение entities_id на точное имя твоей сущности в GLPI. Проверить название можно в разделе Администрирование → Сущности. Регистр и пробелы важны — GLPI ищет строгое совпадение.
# заменяем "Комета ООО" на реальное имя твоей сущности во всех XML разом
cd glpi_import
for f in *.xml; do
sed -i 's/Комета ООО<\/entities_id>/Root entity<\/entities_id>/' "$f"
done
# проверяем что замена прошла
grep -c "entities_id" *.xml
Результат: во всех семи файлах строка entities_id указывает на реально существующую в твоей инсталляции сущность. Если работаешь с несколькими сущностями (филиалы, клиенты в мультиарендной GLPI) — разбей файлы и распредели правила по нужным веткам заранее, до загрузки.
Шаг 3. Загрузи файл через интерфейс
CLI-команды для импорта правил в GLPI нет — это операция строго через веб-интерфейс. Заходи в нужный раздел словаря, листай список правил до конца страницы, там кнопка «Импорт». Выбираешь файл, GLPI показывает предпросмотр — сколько правил будет создано, сколько уже существует с таким же UUID (их пропустит).
Setup → Rules → Dictionary rules → [нужный словарь] → Import
После подтверждения GLPI создаёт правила пачкой. Проверь ranking — импорт сохраняет порядок из файла, но если у тебя уже были свои правила в этом словаре, новые встанут в конец списка. Порядок стоит пересобрать вручную сразу после импорта, иначе более специфичные правила окажутся ниже общих и никогда не сработают.
Шаг 4. Пойми, чего не хватает в готовых файлах
А вот и главный подвох. Открой любое правило из только что импортированных — и увидишь пустые вкладки «Критерии» и «Действия». Заготовка даёт только имя и описание. Это каркас дома без начинки: стены стоят, а жить в нём пока нельзя.
Ну и запросы у вас, — сказала база данных и повисла. Шучу. На самом деле GLPI ничего не роняет. Просто правило без действия молча ничего не делает, и это молчание можно принять за баг, хотя это ожидаемое поведение.
Чтобы правило заработало, нужны минимум одно условие (критерий) и минимум одно действие. Пример для правила «Dell» в словаре производителей:
- Критерий: поле «Производитель» (raw manufacturer) содержит «Dell Inc.»
- Действие: присвоить стандартное значение производителя «Dell»
Через интерфейс это делается так: открываешь правило → вкладка «Критерии» → «Добавить критерий» → выбираешь поле, условие («содержит», «равно», регулярное выражение) и паттерн. Дальше вкладка «Действия» → «Присвоить стандартное значение» → выбираешь итоговое значение из выпадающего списка (оно должно уже существовать как запись словаря — собственно, для этого и нужен был импорт имён на шаге 3).
Шаг 5. Автоматизируй добивку критериев и действий через API
Кликать это вручную по семьдесят раз — то же самое мучение, от которого мы бежали изначально. GLPI REST API умеет создавать RuleCriteria и RuleAction программно. Вот рабочий скрипт, который проходит по всем правилам словаря производителей и для каждого добавляет критерий «содержит имя правила» плюс действие «присвоить это же имя как стандартное значение»:
import requests
GLPI_URL = "https://it-apteka.com/glpi/apirest.php"
APP_TOKEN = "твой_app_token"
USER_TOKEN = "твой_user_token"
session = requests.post(
f"{GLPI_URL}/initSession",
headers={"App-Token": APP_TOKEN, "Authorization": f"user_token {USER_TOKEN}"}
).json()["session_token"]
headers = {"App-Token": APP_TOKEN, "Session-Token": session}
# получаем все правила словаря производителей без критериев
rules = requests.get(
f"{GLPI_URL}/Rule",
headers=headers,
params={"searchText[sub_type]": "RuleDictionnaryManufacturer", "range": "0-200"}
).json()
for rule in rules:
rule_id = rule["id"]
name = rule["name"]
# критерий: raw manufacturer содержит имя правила
requests.post(f"{GLPI_URL}/RuleCriteria", headers=headers, json={
"input": {
"rules_id": rule_id,
"criteria": "manufacturer",
"condition": 0, # 0 = содержит
"pattern": name
}
})
# действие: присвоить стандартное значение
requests.post(f"{GLPI_URL}/RuleAction", headers=headers, json={
"input": {
"rules_id": rule_id,
"action_type": "assign",
"field": "manufacturer",
"value": name
}
})
requests.post(f"{GLPI_URL}/killSession", headers=headers)
print("Готово: критерии и действия добавлены")
Это базовый шаблон — под реальные данные придётся подправить паттерны, потому что «Dell» и «Dell Inc.» это не одно и то же для строгого сравнения. Для производителей почти всегда нужно несколько альтернативных написаний на одно правило: добавь второй критерий с условием «ИЛИ» на вкладке критериев вручную для тех производителей, у которых зоопарк названий в реальных отчётах агента.
Шаг 6. Выставь ranking осознанно
GLPI проверяет правила по порядку ranking и по умолчанию останавливается на первом совпадении, если в самом правиле не включена галочка «продолжить проверку». Значит: узкие и специфичные правила должны стоять выше общих.
Пример на словаре типов компьютеров: если у тебя есть отдельное правило «Сервер (виртуальный хост)» и общее «Сервер (стоечный)», специфичное должно проверяться первым — иначе виртуальный хост навсегда осядет в общей категории.
Правильный порядок (сверху вниз = выше приоритет):
0. Сервер (виртуальный хост) - узкий критерий по модели/hypervisor
1. Сервер (блейд) - узкий критерий по форм-фактору
2. Сервер (стоечный) - общий признак "rack" в модели
3. Рабочая станция (CAD/3D) - узкий критерий по видеокарте
4. Рабочая станция - общее правило по умолчанию
Шаг 7. Повтори для остальных шести словарей
Логика идентична для типов мониторов, сетевого оборудования, периферии, телефонов и принтеров. Разница только в наборе полей критериев — для сетевого оборудования это будет тип устройства и производитель из SNMP-опроса, для принтеров — модель и класс устройства (МФУ определяется по наличию функции сканирования в отчёте агента).
Не пытайся сделать все семь словарей идеально с первого захода. Загрузи имена везде, добавь критерии для 15-20 самых частых позиций в твоём парке техники — это закроет 80% реальных случаев. Остальное доводи по мере появления новых моделей в инвентаризации.
4. Проверка
После настройки критериев и действий проверка в три шага.
1. Ручной прогон правила на существующем активе:
Открой актив → вкладка "Правила" (если доступна) → "Тестировать правило"
2. Принудительный пересчёт словарей на всём парке:
Настройка → Словари → кнопка "Заменить"
Это прогонит уже накопленные данные через обновлённые правила
3. Прогон свежей инвентаризации:
Запусти агента вручную на одной машине и сверь итоговое
значение производителя/типа в карточке актива
Смотри логи GLPI при массовой замене — раздел Настройка → Журналы → отфильтруй по типу события «rules». Если правило сработало, там будет запись о применении с указанием rules_id.
| Что проверяем |
Ожидаемый результат |
| Карточка актива после Replay |
Производитель и тип показывают нормализованное значение, не сырую строку от агента |
| Вкладка «Критерии» правила |
Минимум один критерий, условие соответствует реальному значению из сырых данных |
| Вкладка «Действия» правила |
Минимум одно действие с типом «assign» и заполненным значением |
| Порядок ranking в словаре |
Специфичные правила выше общих, конфликтов приоритета нет |
5. Осложнения
| Ошибка |
Причина |
Решение |
Команда / действие |
| Импорт падает с ошибкой сущности |
entities_id в файле не совпадает ни с одной существующей сущностью |
Исправь значение перед загрузкой, сверь точное название в Администрирование → Сущности |
sed -i 's/<entities_id>.*<\/entities_id>/<entities_id>Root entity<\/entities_id>/' файл.xml |
| Правила импортировались, но тип/производитель не проставляется |
У правила нет критериев и действий — это ожидаемо для готовых XML-заготовок |
Добавь критерий и действие вручную или через скрипт из шага 5 |
см. Python-скрипт выше |
| Одинаковые правила задублировались после повторного импорта |
UUID в файле изменили или сгенерировали заново перед повторной загрузкой |
Перед повторным импортом убедись что UUID совпадают с уже существующими правилами, либо удали дубликаты вручную |
Настройка → Словари → сортировка по названию, ручная зачистка |
| Общее правило перехватывает случаи, которые должны попадать в специфичное |
Неверный ranking — общее правило стоит выше узкого |
Перетащи специфичные правила выше общих в списке |
Drag-and-drop в интерфейсе словаря или правка поля ranking |
| Правило не срабатывает даже с заполненными критериями |
Критерий сравнивается не с тем полем — например ищет в «model», а нужное значение приходит в «manufacturer» |
Сверь реальные сырые данные в необработанном отчёте инвентаризации перед написанием критерия |
Настройка → Инвентаризация → Просмотр XML/JSON последнего отчёта агента |
| После обновления GLPI словари словно обнулились |
Обновление затронуло схему таблиц rule_criteria/rule_action в редких мажорных релизах |
Проверь changelog версии на предмет изменений Rules Engine, восстанови из бэкапа при необходимости |
mysql glpidb < backup_rules.sql |
6. Альтернативы
Импорт правил словарей — не единственный путь, но для GLPI импорт справочников оборудования именно так и задуман архитектурно.
- Ручное создание через UI без импорта. Работает для 5-10 значений. На семидесяти производителях умирает от скуки задолго до завершения.
- Прямая правка через SQL в таблицах glpi_rules, glpi_rulecriterias, glpi_ruleactions. Быстрее, но легко сломать целостность данных, если не знаешь точную структуру внешних ключей. Используй только если понимаешь схему и держишь свежий бэкап под рукой.
- Плагин Data Injection. Позволяет массово загружать данные через CSV с маппингом полей, включая словарные значения. Хорош для разовой миграции из другой CMDB, избыточен для регулярного пополнения словарей.
- Полный отказ от нормализации, работа с сырыми значениями. Технически возможно — GLPI не заставляет использовать словари. На практике превращает отчёты и дашборды в кашу из разнописных значений одного и того же производителя.
Основной ключ выбран не случайно: импорт справочников GLPI через XML — единственный способ, который сохраняет ranking, UUID и структуру правил в переносимом виде между инсталляциями. Остальные варианты либо медленнее, либо рискованнее для целостности базы.
7. Профилактика
Капля никотина убивает лошадь. Одна забытая заглушка ranking в словаре производителей — весь квартальный отчёт по парку техники, потому что половина серверов Dell вдруг оказалась «неизвестным производителем».
- Бэкап перед любой массовой операцией. Таблицы rules, rulecriterias, ruleactions, dictionary-справочники — в отдельный дамп перед импортом или Replay.
- Мониторинг «сырых» значений. Раз в месяц смотри в разделе активов, сколько записей осталось с нераспознанным производителем или пустым типом — это сигнал добавить недостающие критерии.
- Регламент на новые модели техники. Как только в компании закупили новую линейку оборудования, сразу добавь для неё правило, а не жди пока накопится сотня немаркированных активов.
- Версионирование правил. Экспортируй словари в XML после каждого значимого изменения и храни рядом с остальной инфраструктурной документацией — это твой откат на случай кривого редактирования.
- Тестируй критерии на реальных данных, а не на предположениях. То что «Dell» встречается в отчёте именно так, а не «DELL INC.» — нужно проверить, а не угадать.
- Разделяй права на редактирование словарей. Не давай всем администраторам GLPI доступ к правкам ranking — один неаккуратный клик ломает порядок проверки для всей компании.
- Проверяй словари после каждого крупного обновления GLPI. Мажорные релизы иногда меняют поведение движка правил — молча.
Резервное копирование
| Что бэкапить |
Как часто |
Где хранить |
Как восстановить |
| Таблицы glpi_rules*, glpi_ruledictionary* |
Перед каждым массовым импортом/Replay |
Отдельный дамп на файловом хранилище, вне продакшн-сервера |
mysql glpidb < dump.sql после остановки веб-сервера |
| Экспортированные XML словарей |
После каждого значимого изменения правил |
Git-репозиторий инфраструктурной документации |
Повторный импорт через UI |
Обновление
Перед обновлением GLPI на мажорную версию: сними дамп таблиц правил, прочитай changelog на предмет изменений в Rules Engine, прогони обновление сначала на тестовом стенде с копией продакшн-базы. Откат при проблеме — восстановление дампа плюс возврат к предыдущему архиву GLPI.
8. FAQ
Почему тип оборудования не проставляется автоматически после настройки словаря?
Чаще всего потому что у импортированного правила нет критериев и действий — готовый XML даёт только имя и описание, это каркас, а не рабочую логику. Проверь вкладки «Критерии» и «Действия» у конкретного правила, при пустых вкладках распознавания не будет никогда.
Как проверить что словарь работает правильно?
Запусти кнопку «Заменить» (Replay) в разделе словаря — она прогонит уже существующие данные через текущие правила. Дальше сверь карточки активов: производитель и тип должны показывать нормализованное значение, а не сырую строку от агента.
Что делать если entities_id не совпадает с моей инсталляцией?
Замени значение на точное название твоей сущности перед загрузкой файла — GLPI ищет строгое текстовое совпадение, а не по ID. Проверить корректное имя можно в разделе Администрирование → Сущности.
Чем словарь-правило (RuleDictionary) отличается от обычного справочника (Dropdown)?
Обычный справочник — это статичный список значений, который выбирают вручную при заполнении карточки. Правило словаря работает автоматически во время инвентаризации: сравнивает сырые данные от агента с критериями и само присваивает нужное стандартное значение, без участия человека.
Можно ли ошибиться и сломать существующие данные при импорте?
Сам импорт создаёт только новые записи правил и не трогает уже существующие активы. Риск появляется на этапе Replay — принудительный пересчёт может переписать значения на активах, если критерии настроены неточно. Перед Replay всегда снимай бэкап.
Почему один и тот же производитель встречается в разных написаниях у одного вендора?
Прошивка и агенты разных версий на разном железе одного вендора отдают разные строки в SMBIOS — это не баг GLPI, а особенность оборудования. Решение — несколько критериев с условием «ИЛИ» внутри одного правила, покрывающих все варианты написания.
9. Прогноз
Если прошёл все семь шагов — словари оборудования в GLPI перестали быть пустой формальностью и начали реально работать при каждой инвентаризации. Новые активы, которые попадают в систему через агента, автоматически получают нормализованное имя производителя и корректный тип, без ручной правки карточки.
Дальше это просто живёт само — раз в квартал сверяешь список нераспознанных значений и добавляешь пару новых критериев под свежекупленное железо. Рождённый в legacy рефакторинга не боится, а вот к пустым словарям возвращаться никому не хочется.
Если после импорта что-то не завелось — пиши в комментарии, разберёмся.