<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://одинхаб.рф/blog</id>
    <title>ОдинХаб — новости</title>
    <updated>2026-05-11T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://одинхаб.рф/blog"/>
    <subtitle>ОдинХаб Blog</subtitle>
    <icon>https://одинхаб.рф/img/hub_touch-icon-180.png</icon>
    <rights>© 2026 ОдинХаб</rights>
    <entry>
        <title type="html"><![CDATA[Вышла версия 4.6]]></title>
        <id>https://одинхаб.рф/blog/release-4-6</id>
        <link href="https://одинхаб.рф/blog/release-4-6"/>
        <updated>2026-05-11T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Краткий обзор релиза ОдинХаб 4.6 для администраторов и пользователей. Подробная инструкция по обновлению — в руководстве по обновлению.]]></summary>
        <content type="html"><![CDATA[<p>Краткий обзор релиза <strong>ОдинХаб 4.6</strong> для администраторов и пользователей. Подробная инструкция по обновлению — в <a class="" href="https://xn--80achqzd6c.xn--p1ai/installation/upgrading">руководстве по обновлению</a>.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="v461">v4.6.1<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-6#v461" class="hash-link" aria-label="Прямая ссылка на v4.6.1" title="Прямая ссылка на v4.6.1" translate="no">​</a></h2>
<p>Патч с исправлениями безопасности и доработками интерфейса. <strong>Рекомендуется обновиться с 4.6.0.</strong></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="улучшения">Улучшения<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-6#%D1%83%D0%BB%D1%83%D1%87%D1%88%D0%B5%D0%BD%D0%B8%D1%8F" class="hash-link" aria-label="Прямая ссылка на Улучшения" title="Прямая ссылка на Улучшения" translate="no">​</a></h3>
<ul>
<li class="">Доступность: исправлены метки ARIA в интерфейсе.</li>
<li class="">Журнал изменений: сообщения при массовом переименовании объектов.</li>
<li class="">Стойки: при выборе юнита показываются имена уже установленных устройств.</li>
<li class="">Цепи: географическая иерархия для оконечных точек на площадках, в местоположениях и регионах.</li>
<li class="">IPAM: разрешены диапазоны из одного IP-адреса.</li>
<li class="">GraphQL: фильтры для уведомлений и подписок.</li>
<li class="">Конфигурация: параметр <code>HTTP_CLIENT_IP_HEADERS</code> для определения IP клиента по заголовкам прокси.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="производительность">Производительность<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-6#%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C" class="hash-link" aria-label="Прямая ссылка на Производительность" title="Прямая ссылка на Производительность" translate="no">​</a></h3>
<ul>
<li class="">Ограничение глубины запросов GraphQL (<code>GRAPHQL_MAX_QUERY_DEPTH</code>).</li>
<li class="">Ускорение GraphQL за счёт подсказок предварительной выборки.</li>
<li class="">Быстрее фильтрация кабельных путей (GIN-индекс на CablePath).</li>
<li class="">Меньше лишней работы при удалении кабелей и создании отсеков модулей.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="исправления">Исправления<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-6#%D0%B8%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F" class="hash-link" aria-label="Прямая ссылка на Исправления" title="Прямая ссылка на Исправления" translate="no">​</a></h3>
<p><strong>Проблема:</strong> уязвимость в шаблонах экспорта (<code>environment_params</code>) — возможность выполнения произвольного кода (CVE-2026-29514).<br>
<strong>Исправление:</strong> закрыта в 4.6.1; обновитесь как можно скорее.</p>
<p><strong>Проблема:</strong> исключения API не попадали в Sentry.<br>
<strong>Исправление:</strong> ошибки снова передаются в систему мониторинга.</p>
<p><strong>Проблема:</strong> полосатые строки таблицы перебивали цветовую подсветку виртуальных и LAG-интерфейсов.<br>
<strong>Исправление:</strong> подсветка по условию работает корректно.</p>
<ul>
<li class="">Токены API v2: при создании снова показывается открытый текст (один раз).</li>
<li class="">Шаблоны экспорта: доступ только к авторизованным объектам.</li>
<li class="">Ложные записи журнала при сохранении неизменённого беспроводного канала.</li>
<li class="">Восстановлены столбцы арендатора в таблице групп каналов.</li>
<li class="">Исправления GraphQL, фильтров заданий, конфигураций таблиц и отображения IP с несколькими NAT.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="перед-обновлением-до-47">Перед обновлением до 4.7<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-6#%D0%BF%D0%B5%D1%80%D0%B5%D0%B4-%D0%BE%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5%D0%BC-%D0%B4%D0%BE-47" class="hash-link" aria-label="Прямая ссылка на Перед обновлением до 4.7" title="Прямая ссылка на Перед обновлением до 4.7" translate="no">​</a></h3>
<div class="theme-admonition theme-admonition-warning admonition_xJq3 alert alert--warning"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>Устаревание</div><div class="admonitionContent_BuS1"><ul>
<li class="">Токены API <strong>v1</strong> объявлены устаревшими (удаление в 5.0) — переходите на v2 (<code>Authorization: Bearer nbt_...</code>).</li>
<li class=""><strong>PostgreSQL 14</strong> устарел (удаление поддержки в 4.7) — планируйте PostgreSQL 15+.</li>
</ul></div></div>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="v460">v4.6.0<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-6#v460" class="hash-link" aria-label="Прямая ссылка на v4.6.0" title="Прямая ссылка на v4.6.0" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="главное-в-релизе">Главное в релизе<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-6#%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%BE%D0%B5-%D0%B2-%D1%80%D0%B5%D0%BB%D0%B8%D0%B7%D0%B5" class="hash-link" aria-label="Прямая ссылка на Главное в релизе" title="Прямая ссылка на Главное в релизе" translate="no">​</a></h3>
<table><thead><tr><th>Область</th><th>Что появилось</th></tr></thead><tbody><tr><td>Виртуализация</td><td><strong>Типы ВМ</strong> — как DeviceType, но для виртуальных машин</td></tr><tr><td>Кабели</td><td><strong>Пучки кабелей</strong> — группа прокладок (не отдельные волокна)</td></tr><tr><td>Стойки</td><td><strong>Группы стоек</strong> — ряд/проход отдельно от иерархии местоположений</td></tr><tr><td>REST API</td><td><strong>ETag</strong> / <strong>If-Match</strong> против конфликтов при параллном редактировании</td></tr><tr><td>REST API</td><td>Пагинация <strong><code>start</code></strong> вместо тяжёлого <code>offset</code> на больших выборках</td></tr></tbody></table>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="типы-виртуальных-машин">Типы виртуальных машин<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-6#%D1%82%D0%B8%D0%BF%D1%8B-%D0%B2%D0%B8%D1%80%D1%82%D1%83%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85-%D0%BC%D0%B0%D1%88%D0%B8%D0%BD" class="hash-link" aria-label="Прямая ссылка на Типы виртуальных машин" title="Прямая ссылка на Типы виртуальных машин" translate="no">​</a></h3>
<p>Можно завести справочник типов экземпляров ВМ и назначать их виртуальным машинам — по аналогии с типами устройств для железа.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="пучки-кабелей">Пучки кабелей<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-6#%D0%BF%D1%83%D1%87%D0%BA%D0%B8-%D0%BA%D0%B0%D0%B1%D0%B5%D0%BB%D0%B5%D0%B9" class="hash-link" aria-label="Прямая ссылка на Пучки кабелей" title="Прямая ссылка на Пучки кабелей" translate="no">​</a></h3>
<p>Несколько кабелей объединяются в один логический пучок (например, 48 линий CAT6 между патч-панелями). <em>Не подходит для учёта отдельных волокон в одном оптическом кабеле.</em></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="группы-стоек">Группы стоек<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-6#%D0%B3%D1%80%D1%83%D0%BF%D0%BF%D1%8B-%D1%81%D1%82%D0%BE%D0%B5%D0%BA" class="hash-link" aria-label="Прямая ссылка на Группы стоек" title="Прямая ссылка на Группы стоек" translate="no">​</a></h3>
<p>Дополнительная группировка стоек (ряд, коридор) без привязки к дереву Region → Site → Location. Группа может задавать область для VLAN.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="rest-api-etag-и-пагинация">REST API: ETag и пагинация<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-6#rest-api-etag-%D0%B8-%D0%BF%D0%B0%D0%B3%D0%B8%D0%BD%D0%B0%D1%86%D0%B8%D1%8F" class="hash-link" aria-label="Прямая ссылка на REST API: ETag и пагинация" title="Прямая ссылка на REST API: ETag и пагинация" translate="no">​</a></h3>
<ul>
<li class=""><strong>ETag:</strong> клиент получает метку версии объекта; при <code>PUT</code>/<code>PATCH</code> с <code>If-Match</code> сервер отклонит запись, если объект уже изменили (ответ 412).</li>
<li class=""><strong><code>start</code>:</strong> для больших списков — быстрая постраничная навигация по первичному ключу.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="прочие-улучшения">Прочие улучшения<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-6#%D0%BF%D1%80%D0%BE%D1%87%D0%B8%D0%B5-%D1%83%D0%BB%D1%83%D1%87%D1%88%D0%B5%D0%BD%D0%B8%D1%8F" class="hash-link" aria-label="Прямая ссылка на Прочие улучшения" title="Прямая ссылка на Прочие улучшения" translate="no">​</a></h3>
<ul>
<li class="">ВМ можно привязать к устройству без кластера; кластер для ВМ стал необязательным.</li>
<li class="">IPAM: массовое создание префиксов и IP, роли для ASN, диапазон из одного адреса, тип настраиваемого поля «цвет».</li>
<li class="">Устройства: отключённые отсеки, массовое добавление компонентов в фоне, сообщения в журнале изменений, NAT в REST для primary/oob IP.</li>
<li class="">Журнал изменений: параметр <code>CHANGELOG_RETAIN_CREATE_LAST_UPDATE</code>; лучше diff настраиваемых полей.</li>
<li class="">Теги через API: <code>add_tags</code> / <code>remove_tags</code> без полной перезаписи списка.</li>
<li class="">Токены: ID и секрет показываются один раз при создании.</li>
<li class="">Webhook: в payload попадает сериализованный HTTP-запрос.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="производительность-1">Производительность<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-6#%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C-1" class="hash-link" aria-label="Прямая ссылка на Производительность" title="Прямая ссылка на Производительность" translate="no">​</a></h3>
<ul>
<li class="">Индексы под сортировку по умолчанию; быстрее трассировка кабелей и массовый экспорт.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="плагины">Плагины<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-6#%D0%BF%D0%BB%D0%B0%D0%B3%D0%B8%D0%BD%D1%8B" class="hash-link" aria-label="Прямая ссылка на Плагины" title="Прямая ссылка на Плагины" translate="no">​</a></h3>
<ul>
<li class="">Декларативные макеты и переиспользуемые компоненты UI.</li>
<li class="">Регистрация пользовательских действий моделей для разграничения прав.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="платформа">Платформа<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-6#%D0%BF%D0%BB%D0%B0%D1%82%D1%84%D0%BE%D1%80%D0%BC%D0%B0" class="hash-link" aria-label="Прямая ссылка на Платформа" title="Прямая ссылка на Платформа" translate="no">​</a></h3>
<ul>
<li class="">Django 6.0; документация upstream переведена на Zensical (у ОдинХаб — свой сайт документации).</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="устаревание-планируйте-заранее">Устаревание (планируйте заранее)<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-6#%D1%83%D1%81%D1%82%D0%B0%D1%80%D0%B5%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-%D0%BF%D0%BB%D0%B0%D0%BD%D0%B8%D1%80%D1%83%D0%B9%D1%82%D0%B5-%D0%B7%D0%B0%D1%80%D0%B0%D0%BD%D0%B5%D0%B5" class="hash-link" aria-label="Прямая ссылка на Устаревание (планируйте заранее)" title="Прямая ссылка на Устаревание (планируйте заранее)" translate="no">​</a></h3>
<p>Удалены или объявлены устаревшими: токены v1, PostgreSQL 14, <code>LOGIN_REQUIRED</code>, команда <code>housekeeping</code>, старые параметры Sentry, <code>querystring</code> в шаблонах, ряд устаревших API-полей и пагинаторов. Подробный технический перечень — в разделе документации <a class="" href="https://xn--80achqzd6c.xn--p1ai/release-notes/">«Примечания к выпуску»</a>.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="rest-api-кратко-для-интеграторов">REST API (кратко для интеграторов)<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-6#rest-api-%D0%BA%D1%80%D0%B0%D1%82%D0%BA%D0%BE-%D0%B4%D0%BB%D1%8F-%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%BE%D0%B2" class="hash-link" aria-label="Прямая ссылка на REST API (кратко для интеграторов)" title="Прямая ссылка на REST API (кратко для интеграторов)" translate="no">​</a></h3>
<p>Новые ресурсы: <code>cable-bundles</code>, <code>rack-groups</code>, <code>virtual-machine-types</code>.<br>
<!-- -->Расширены: Cable (<code>bundle</code>), Rack (<code>group</code>), VirtualMachine (<code>virtual_machine_type</code>, nullable <code>cluster</code>), CustomField (<code>validation_schema</code>), теги (<code>add_tags</code>/<code>remove_tags</code>), ETag на объектах, <code>start</code> в списках.</p>
<hr>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>Обновление</div><div class="admonitionContent_BuS1"><p>Ветка релиза на GitFlic: <code>onehub-4.6.1-gitflic</code> (или актуальная с <a href="https://gitflic.ru/project/abp2b/onehub/releases" target="_blank" rel="noopener noreferrer" class="">страницы релизов</a>). После <code>git checkout</code> — <code>./upgrade.sh</code> от пользователя <code>odinhub</code>.</p></div></div>]]></content>
        <category label="release" term="release"/>
        <category label="news" term="news"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Вышла версия 4.5]]></title>
        <id>https://одинхаб.рф/blog/release-4-5</id>
        <link href="https://одинхаб.рф/blog/release-4-5"/>
        <updated>2026-04-05T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Краткий обзор релиза ОдинХаб 4.5 для администраторов и пользователей. Подробная инструкция по обновлению — в руководстве по обновлению.]]></summary>
        <content type="html"><![CDATA[<p>Краткий обзор релиза <strong>ОдинХаб 4.5</strong> для администраторов и пользователей. Подробная инструкция по обновлению — в <a class="" href="https://xn--80achqzd6c.xn--p1ai/installation/upgrading">руководстве по обновлению</a>.</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="v4510">v4.5.10<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-5#v4510" class="hash-link" aria-label="Прямая ссылка на v4.5.10" title="Прямая ссылка на v4.5.10" translate="no">​</a></h2>
<p>Патч с точечными исправлениями.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="исправления">Исправления<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-5#%D0%B8%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F" class="hash-link" aria-label="Прямая ссылка на Исправления" title="Прямая ссылка на Исправления" translate="no">​</a></h3>
<p><strong>Проблема:</strong> при редактировании виртуальной машины могло сбрасываться назначение устройства.<br>
<strong>Исправление:</strong> назначение сохраняется корректно.</p>
<p><strong>Проблема:</strong> фильтр интерфейсов по статусу «подключён» учитывал неполные кабельные пути.<br>
<strong>Исправление:</strong> в выборку попадают только полностью проложенные соединения.</p>
<ul>
<li class="">Пустые строки в уникальных nullable-полях преобразуются в NULL — без ошибок целостности БД.</li>
<li class="">Исправлено добавление префикса из VLAN без клиента или площадки.</li>
<li class="">В схеме OpenAPI для кабельных объектов поле <code>cable_end</code> корректно помечено как nullable.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="v459">v4.5.9<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-5#v459" class="hash-link" aria-label="Прямая ссылка на v4.5.9" title="Прямая ссылка на v4.5.9" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="улучшения">Улучшения<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-5#%D1%83%D0%BB%D1%83%D1%87%D1%88%D0%B5%D0%BD%D0%B8%D1%8F" class="hash-link" aria-label="Прямая ссылка на Улучшения" title="Прямая ссылка на Улучшения" translate="no">​</a></h3>
<ul>
<li class="">Фильтр модулей по профилю (<code>profile</code>).</li>
<li class="">При просмотре конфигурации устройства можно выбрать другой шаблон через параметр URL.</li>
<li class="">В формах фильтра — одновременная фильтрация по нескольким настраиваемым полям типа «объект».</li>
<li class="">В сведениях о системе отображается схема PostgreSQL.</li>
<li class="">Для <code>API_TOKEN_PEPPERS</code> допускаются подклассы <code>dict</code>.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="производительно�сть">Производительность<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-5#%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C" class="hash-link" aria-label="Прямая ссылка на Производительность" title="Прямая ссылка на Производительность" translate="no">​</a></h3>
<ul>
<li class="">Ускорен массовый экспорт CSV за счёт оптимизации предварительной выборки.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="исправления-1">Исправления<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-5#%D0%B8%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F-1" class="hash-link" aria-label="Прямая ссылка на Исправления" title="Прямая ссылка на Исправления" translate="no">​</a></h3>
<p><strong>Проблема:</strong> неверное количество контактов у групп, чьи контакты назначены вложенным группам.<br>
<strong>Исправление:</strong> подсчёт учитывает всю иерархию.</p>
<p><strong>Проблема:</strong> одноранговые соединения задних портов через профили магистрального кабеля отображались неверно.<br>
<strong>Исправление:</strong> peer-связи рассчитываются правильно.</p>
<p><strong>Проблема:</strong> комментарии к записям MAC-адреса не сохранялись.<br>
<strong>Исправление:</strong> поле комментария записывается.</p>
<p><strong>Проблема:</strong> расчёт потребляемой мощности розеток внутри PDU был неточным.<br>
<strong>Исправление:</strong> формула исправлена.</p>
<ul>
<li class="">Схемы OpenAPI для <code>available-prefixes</code> и <code>available-vlans</code>.</li>
<li class="">Импорт модулей с сопоставлением передних и задних портов.</li>
<li class="">Недействительные пользовательские сценарии больше не сохраняются на диск при загрузке.</li>
<li class="">Фильтрация области разрешений для ограниченных object permissions.</li>
<li class="">REST API <code>POST</code>/<code>PATCH</code> без завершающей косой черты больше не вызывают исключение.</li>
<li class="">Восстановлены расширения шаблонов плагинов для VRF и других представлений с декларативным макетом.</li>
<li class="">Поле цвета снова доступно в форме редактирования переднего порта.</li>
<li class=""><code>EventRule.action_data</code> проверяется как JSON-объект — без ошибок сервера при записи.</li>
<li class="">При «добавить ещё» для контактов уникальные поля очищаются.</li>
<li class="">Горизонтальная прокрутка для панелей контекстной таблицы на странице IP-адреса.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="v458">v4.5.8<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-5#v458" class="hash-link" aria-label="Прямая ссылка на v4.5.8" title="Прямая ссылка на v4.5.8" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="улучшения-1">Улучшения<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-5#%D1%83%D0%BB%D1%83%D1%87%D1%88%D0%B5%D0%BD%D0%B8%D1%8F-1" class="hash-link" aria-label="Прямая ссылка на Улучшения" title="Прямая ссылка на Улучшения" translate="no">​</a></h3>
<ul>
<li class="">Цвет роли устройства отображается на странице устройства.</li>
<li class="">Фильтр <code>humanize_speed</code> поддерживает десятичные значения Гбит/с и Тбит/с.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="исправления-2">Исправления<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-5#%D0%B8%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F-2" class="hash-link" aria-label="Прямая ссылка на Исправления" title="Прямая ссылка на Исправления" translate="no">​</a></h3>
<p><strong>Проблема:</strong> поле скорости интерфейса (32 бита) переполнялось для LAG выше ~2,1 Тбит/с.<br>
<strong>Исправление:</strong> поле расширено до 64-битного целого.</p>
<p><strong>Проблема:</strong> при загрузке в S3 файлы с одинаковыми именами конфликтовали.<br>
<strong>Исправление:</strong> дублирующиеся имена обрабатываются корректно.</p>
<ul>
<li class="">Несуществующие настраиваемые поля исключаются из данных журнала изменений в REST API.</li>
<li class="">Сопоставления портов снова попадают в YAML-экспорт типа устройства.</li>
<li class="">Массовый импорт кабелей к источникам питания работает корректно.</li>
<li class="">«Последний запуск» пользовательского сценария отражает время начала задания, а не время создания.</li>
<li class="">Исправлен текст справки для полей выбора цвета.</li>
<li class="">Кнопка редактирования модулей сценариев снова видна пользователям без прав суперпользователя.</li>
<li class="">Экспорт CSV столбцов подключения показывает форматированное значение, а не пробелы шаблона.</li>
<li class="">Убрана лишняя синхронизация классов <code>ScriptModule</code> при сохранении.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="v457">v4.5.7<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-5#v457" class="hash-link" aria-label="Прямая ссылка на v4.5.7" title="Прямая ссылка на v4.5.7" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="улучшения-2">Улучшения<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-5#%D1%83%D0%BB%D1%83%D1%87%D1%88%D0%B5%D0%BD%D0%B8%D1%8F-2" class="hash-link" aria-label="Прямая ссылка на Улучшения" title="Прямая ссылка на Улучшения" translate="no">​</a></h3>
<ul>
<li class="">Ресурсы виртуальных машин принимают метки единиц измерения IEC (GiB и др.).</li>
<li class="">Поддержка django-rq 4.0 и параметра конфигурации <code>RQ</code>.</li>
<li class="">Загрузка пользовательских скриптов через REST API (<code>/api/extras/scripts/upload/</code>).</li>
<li class="">Добавлен профиль отводящего кабеля 1C2P:2C1P.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="производительность-1">Производительность<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-5#%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C-1" class="hash-link" aria-label="Прямая ссылка на Производительность" title="Прямая ссылка на Производительность" translate="no">​</a></h3>
<ul>
<li class="">Оптимизированы запросы для настраиваемых полей объектного и многообъектного типов.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="исправления-3">Исправления<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-5#%D0%B8%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F-3" class="hash-link" aria-label="Прямая ссылка на Исправления" title="Прямая ссылка на Исправления" translate="no">​</a></h3>
<p><strong>Проблема:</strong> правила событий, ссылающиеся на удалённые объекты, вызывали ошибку сервера.<br>
<strong>Исправление:</strong> такие ссылки обрабатываются без сбоя.</p>
<p><strong>Проблема:</strong> сортировка таблицы от имени анонимного пользователя вызывала <code>AttributeError</code>.<br>
<strong>Исправление:</strong> анонимные запросы обрабатываются корректно.</p>
<p><strong>Проблема:</strong> просмотр интерфейса с завершением виртуального канала вызывал <code>RelatedObjectDoesNotExist</code>.<br>
<strong>Исправление:</strong> страница открывается без исключения.</p>
<ul>
<li class="">Установка модулей со значениями-заполнителями в именах компонентов.</li>
<li class="">Поля только для чтения включаются в ответы REST API при создании объекта.</li>
<li class="">Фильтрация настраиваемых полей типа «объект» при выборе «пусто».</li>
<li class="">Сортировка по неработающим столбцам в нескольких списках объектов.</li>
<li class="">Просмотр элемента виртуального шасси без <code>AttributeError</code>.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="v456">v4.5.6<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-5#v456" class="hash-link" aria-label="Прямая ссылка на v4.5.6" title="Прямая ссылка на v4.5.6" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="улучшения-3">Улучшения<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-5#%D1%83%D0%BB%D1%83%D1%87%D1%88%D0%B5%D0%BD%D0%B8%D1%8F-3" class="hash-link" aria-label="Прямая ссылка на Улучшения" title="Прямая ссылка на Улучшения" translate="no">​</a></h3>
<ul>
<li class="">Новый тип интерфейса OSFP224 (1,6T).</li>
<li class="">Модульный интерфейс SFP 2,5GBASE-X.</li>
<li class="">Улучшены стиль и макет страницы изменения объекта.</li>
<li class="">Добавлены скорости интерфейса 50 Гбит/с, 800 Гбит/с и 1,6 Тбит/с.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="исправления-4">Исправления<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-5#%D0%B8%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F-4" class="hash-link" aria-label="Прямая ссылка на Исправления" title="Прямая ссылка на Исправления" translate="no">​</a></h3>
<p><strong>Проблема:</strong> переменная <code>{module}</code> для полей позиции во вложенных модулях разрешалась неверно.<br>
<strong>Исправление:</strong> подстановка работает для вложенной иерархии.</p>
<p><strong>Проблема:</strong> сортировка таблицы назначения групп каналов по столбцу элементов вызывала <code>FieldError</code>.<br>
<strong>Исправление:</strong> сортировка доступна.</p>
<ul>
<li class="">Фильтр URL настраиваемого поля поддерживает нестандартные номера портов.</li>
<li class="">Группировка полей владельца в формах учётной записи провайдера.</li>
<li class="">Отдельные поля добавления/удаления ASN при редактировании площадки или провайдера с большим числом назначений.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="v455">v4.5.5<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-5#v455" class="hash-link" aria-label="Прямая ссылка на v4.5.5" title="Прямая ссылка на v4.5.5" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="улучшения-4">Улучшения<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-5#%D1%83%D0%BB%D1%83%D1%87%D1%88%D0%B5%D0%BD%D0%B8%D1%8F-4" class="hash-link" aria-label="Прямая ссылка на Улучшения" title="Прямая ссылка на Улучшения" translate="no">​</a></h3>
<ul>
<li class="">Исключения путей для синхронизации источников данных.</li>
<li class="">При массовом импорте объектов с областью — идентификация scope по имени или slug.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="производительность-2">Производительность<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-5#%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C-2" class="hash-link" aria-label="Прямая ссылка на Производительность" title="Прямая ссылка на Производительность" translate="no">​</a></h3>
<ul>
<li class="">Быстрее назначение тегов при сохранении объектов.</li>
<li class="">Меньше запросов к БД при рендеринге безымянных устройств через REST API.</li>
<li class="">Неэффективные <code>.count()</code> заменены на <code>.exists()</code>.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="исправления-5">Исправления<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-5#%D0%B8%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F-5" class="hash-link" aria-label="Прямая ссылка на Исправления" title="Прямая ссылка на Исправления" translate="no">​</a></h3>
<p><strong>Проблема:</strong> при массовом импорте/обновлении ошибочно удалялись primary/out-of-band IP-адреса.<br>
<strong>Исправление:</strong> основные адреса сохраняются.</p>
<p><strong>Проблема:</strong> при массовом редактировании профиля кабеля терялись точки подключения.<br>
<strong>Исправление:</strong> termination сохраняются.</p>
<p><strong>Проблема:</strong> трассировка кабеля по профилю ломалась, когда одно начало содержало несколько позиций.<br>
<strong>Исправление:</strong> много-позиционные начала обрабатываются корректно.</p>
<p><strong>Проблема:</strong> основной IP с NAT некорректно отображался на странице виртуальной машины.<br>
<strong>Исправление:</strong> NAT-адрес показывается правильно.</p>
<ul>
<li class="">Настройка постраничной нумерации сохраняется при возврате из форм редактирования.</li>
<li class="">Фокус полей формы в Microsoft Edge.</li>
<li class="">Ограничение <code>MAX_PAGE_SIZE</code> для GraphQL API.</li>
<li class="">Поиск по диапазону для целочисленных полей в GraphQL.</li>
<li class="">Языковые предпочтения после входа через социальную аутентификацию.</li>
<li class="">Мерцание в тёмном режиме при загрузке страницы.</li>
<li class="">Пагинация таблицы VLAN на странице интерфейса (раньше обрезалась на 100 записях).</li>
<li class="">Таблица фоновых задач на мобильных устройствах.</li>
<li class="">Безопасные HTTP-заголовки сохраняются при копировании запросов для фоновых заданий.</li>
<li class=""><code>AttributeError</code> из-за отсутствия <code>COOKIES</code> на <code>NetBoxFakeRequest</code>.</li>
<li class="">Имена полей фильтров GraphQL для компонентов устройства (<code>console_ports</code> и др.).</li>
<li class="">Поиск по местоположению в сочетании с другими фильтрами.</li>
<li class="">Поле платформы не очищается при смене типа устройства в форме редактирования.</li>
<li class="">Кнопка «Добавить» скрипта и выпадающий список «Добавить компоненты» ВМ скрыты без нужных разрешений.</li>
<li class="">Ссылка «Добавить дочернюю группу» в представлении группы площадок вела на endpoint региона.</li>
<li class="">Отключена сортировка по столбцу <code>is_primary</code> в списке MAC-адресов.</li>
<li class="">Очистка кэшированных атрибутов цепи при переназначении окончания.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="v454">v4.5.4<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-5#v454" class="hash-link" aria-label="Прямая ссылка на v4.5.4" title="Прямая ссылка на v4.5.4" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="улучшения-5">Улучшения<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-5#%D1%83%D0%BB%D1%83%D1%87%D1%88%D0%B5%D0%BD%D0%B8%D1%8F-5" class="hash-link" aria-label="Прямая ссылка на Улучшения" title="Прямая ссылка на Улучшения" translate="no">​</a></h3>
<ul>
<li class="">Отложенная загрузка вложенных изображений.</li>
<li class="">Назначение контактов для виртуальных цепей.</li>
<li class="">Типы интерфейсов BiDi 10GBASE-CU и 40GBASE-SR4.</li>
<li class="">Расширены GraphQL-фильтры для кабелей.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="производительность-3">Производительность<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-5#%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C-3" class="hash-link" aria-label="Прямая ссылка на Производительность" title="Прямая ссылка на Производительность" translate="no">​</a></h3>
<ul>
<li class="">Быстрее разрешение контекста конфигурации через GraphQL.</li>
<li class="">Нет предварительной выборки данных для скрытых столбцов таблицы.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="исправления-6">Исправления<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-5#%D0%B8%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F-6" class="hash-link" aria-label="Прямая ссылка на Исправления" title="Прямая ссылка на Исправления" translate="no">​</a></h3>
<p><strong>Проблема:</strong> основной IP с NAT некорректно отображался на странице устройства.<br>
<strong>Исправление:</strong> NAT-адрес показывается правильно.</p>
<p><strong>Проблема:</strong> десятичное настраиваемое поле со значением 0 отображалось как «не установлено».<br>
<strong>Исправление:</strong> ноль показывается как валидное значение.</p>
<ul>
<li class="">Список сценариев ограничен пользователями с разрешением на просмотр.</li>
<li class="">Варианты отсеков модулей при установке сортируются по алфавиту.</li>
<li class="">Выделение IPv6 из префикса вне пула начинается с единицы, а не с нуля.</li>
<li class="">Тип завершения сохраняется при «создать и добавить другой» для кабелей.</li>
<li class="">GraphQL union type для подключённых консольных портов.</li>
<li class="">Идентификатор объекта на странице стойки.</li>
<li class=""><code>IndexError</code> при обнаружении устаревших кабельных трасс.</li>
<li class="">Снимки «до изменения» для связанных объектов.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="v453">v4.5.3<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-5#v453" class="hash-link" aria-label="Прямая ссылка на v4.5.3" title="Прямая ссылка на v4.5.3" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="улучшения-6">Улучшения<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-5#%D1%83%D0%BB%D1%83%D1%87%D1%88%D0%B5%D0%BD%D0%B8%D1%8F-6" class="hash-link" aria-label="Прямая ссылка на Улучшения" title="Прямая ссылка на Улучшения" translate="no">​</a></h3>
<ul>
<li class="">Улучшено отображение нескольких MAC-адресов в таблице интерфейсов.</li>
<li class="">Лучший рендеринг JSON для пользовательских валидаторов и правил защиты в версии конфигурации.</li>
<li class="">Настройка параметров Redis <code>KWARGS</code>.</li>
<li class=""><code>ContentTypeFilter</code> принимает несколько значений.</li>
<li class="">В таблице отсеков устройств — столбцы с установленными устройствами.</li>
<li class="">Высота устройства в юнитах стойки нормализована (отображение «0U»).</li>
<li class="">Панель сведений о типе устройства на странице устройства.</li>
<li class="">Родительская платформа назначенной платформы на странице виртуальной машины.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="производительность-4">Производительность<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-5#%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C-4" class="hash-link" aria-label="Прямая ссылка на Производительность" title="Прямая ссылка на Производительность" translate="no">​</a></h3>
<ul>
<li class="">Миниатюры для предварительного просмотра вложенных изображений.</li>
<li class="">Восстановлены отсутствующие SQL-индексы для полей MPTT.</li>
<li class="">Фильтр <code>q</code> сопоставляет primary IP только для значений IP при фильтрации устройств и ВМ.</li>
<li class="">Быстрее запросы <code>ContentTypeFilter</code>; убрано лишнее <code>DISTINCT</code> у <code>MultipleChoiceFilter</code>.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="исправления-7">Исправления<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-5#%D0%B8%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F-7" class="hash-link" aria-label="Прямая ссылка на Исправления" title="Прямая ссылка на Исправления" translate="no">​</a></h3>
<p><strong>Проблема:</strong> поля меню навигации «ломались» при появлении полосы прокрутки.<br>
<strong>Исправление:</strong> меню отображается стабильно.</p>
<p><strong>Проблема:</strong> при снятии концевых заделок с кабеля назначенные пути оставались занятыми.<br>
<strong>Исправление:</strong> пути освобождаются.</p>
<ul>
<li class="">Снимок «до изменения» при добавлении членов кластера через UI.</li>
<li class="">Импорт стоек без полей площадки или custom fields не вызывает сбой валидации.</li>
<li class="">Базовый URL в Swagger учитывает <code>BASE_PATH</code>.</li>
<li class="">Список токенов в UI нельзя упорядочить по значению токена (безопасность).</li>
<li class=""><code>KeyError</code> при запуске webhook из правила события.</li>
<li class="">Состояние сбоя адреса при миграции <code>ipam.0070_vlangroup_vlan_id_ranges</code>.</li>
<li class="">Нет «пустых» записей журнала изменений для M2M-связей.</li>
<li class="">Поле владельца в форме редактирования CircuitType.</li>
<li class=""><code>AttributeError</code> при инициализации плагина с локальным импортом в <code>__init__.py</code>.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="v452">v4.5.2<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-5#v452" class="hash-link" aria-label="Прямая ссылка на v4.5.2" title="Прямая ссылка на v4.5.2" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="улучшения-7">Улучшения<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-5#%D1%83%D0%BB%D1%83%D1%87%D1%88%D0%B5%D0%BD%D0%B8%D1%8F-7" class="hash-link" aria-label="Прямая ссылка на Улучшения" title="Прямая ссылка на Улучшения" translate="no">​</a></h3>
<ul>
<li class="">Столбцы peer и connection в таблице VLAN-интерфейсов устройства.</li>
<li class="">Усечение длинных имён файлов вложений изображений в UI.</li>
<li class="">Peer-соединения для интерфейсов участников LAG.</li>
<li class="">Повышен уровень логирования при ошибке загрузки пользовательского скрипта.</li>
<li class="">Фильтр <code>cabled</code> для интерфейсов в GraphQL API.</li>
<li class="">Столбцы и фильтры группы владельцев во всех поддерживаемых списках.</li>
<li class="">Выпадающие списки max depth / max length для дочерних префиксов.</li>
<li class="">Курсорная пагинация в GraphQL API.</li>
<li class="">Предзаполнение полей GenericForeignKey при клонировании.</li>
<li class="">Регистронезависимые параметры конфигурации для метки приложения и имени модели.</li>
<li class="">Вложения изображений для типов стоек.</li>
<li class="">Параметр <code>?omit=</code> для исключения полей из ответов REST API.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="производительность-5">Производительность<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-5#%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C-5" class="hash-link" aria-label="Прямая ссылка на Производительность" title="Прямая ссылка на Производительность" translate="no">​</a></h3>
<ul>
<li class="">Нет лишних запросов пользователя, когда правила событий отсутствуют.</li>
<li class="">Кэширование поиска ObjectType и настраиваемых полей на время запроса.</li>
<li class="">Отложенная сериализация для конвейера событий.</li>
<li class="">Предварительная выборка связанных объектов после create/update через REST API.</li>
<li class="">Меньше проверок уникальности в ValidatedModelSerializer.</li>
<li class="">Кэш снимка «после изменения» на экземпляр после сериализации.</li>
<li class=""><code>get_by_natural_key()</code> для разрешения типов контента.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="исправления-8">Исправления<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-5#%D0%B8%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F-8" class="hash-link" aria-label="Прямая ссылка на Исправления" title="Прямая ссылка на Исправления" translate="no">​</a></h3>
<p><strong>Проблема:</strong> при клонировании префикса назначенная область (scope) не копировалась.<br>
<strong>Исправление:</strong> scope реплицируется.</p>
<p><strong>Проблема:</strong> при установке модуля дублировались назначения передних/задних портов из типа модуля.<br>
<strong>Исправление:</strong> назначения создаются один раз.</p>
<ul>
<li class="">Миниатюры вложенных изображений в S3-хранилище.</li>
<li class="">Сброс грани стойки при очистке назначенного устройства в форме редактирования.</li>
<li class=""><code>SyncError</code>, когда URL Git содержит встроенное имя пользователя.</li>
<li class="">Кнопка «Запустить снова» учитывает значения переменных сценария по умолчанию.</li>
<li class=""><code>attribute_data</code> в YAML-экспорте ModuleType.</li>
<li class="">Имя очереди сохраняется в модели задания для корректного удаления задачи RQ.</li>
<li class="">Клонирование службы приложений сохраняет родительский объект.</li>
<li class="">Все пункты меню плагина регистрируются независимо от порядка инициализации.</li>
<li class="">Снятие галочек с диапазонов IP в таблицах смешанного типа.</li>
<li class="">Клонирование формы с scope не очищает поле <code>scope</code> при смене <code>scope_type</code>.</li>
<li class="">Очистка AutoSyncRecord при отсоединении от источника данных.</li>
<li class="">Пункты меню аутентификации не требуют <code>staff_only</code>.</li>
<li class=""><code>AttributeError</code> при проверке наличия последней версии.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="v451">v4.5.1<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-5#v451" class="hash-link" aria-label="Прямая ссылка на v4.5.1" title="Прямая ссылка на v4.5.1" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="улучшения-8">Улучшения<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-5#%D1%83%D0%BB%D1%83%D1%87%D1%88%D0%B5%D0%BD%D0%B8%D1%8F-8" class="hash-link" aria-label="Прямая ссылка на Улучшения" title="Прямая ссылка на Улучшения" translate="no">​</a></h3>
<ul>
<li class="">Фильтрация префиксов по location/site/site group/region через GraphQL.</li>
<li class="">Фильтрация компонентов устройства по site/location/rack через GraphQL.</li>
<li class="">Длина префикса для IP при использовании <code>/api/ipam/prefixes/&lt;id&gt;/available-ips/</code>.</li>
<li class="">Селектор VLAN по умолчанию выбирает группу, а не площадку.</li>
<li class="">Единообразие отображения измерений стойки в UI.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="исправления-9">Исправления<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-5#%D0%B8%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F-9" class="hash-link" aria-label="Прямая ссылка на Исправления" title="Прямая ссылка на Исправления" translate="no">​</a></h3>
<p><strong>Проблема:</strong> импорт модулей в безымянные устройства вызывал <code>RelatedObjectDoesNotExist</code>.<br>
<strong>Исправление:</strong> импорт проходит без исключения.</p>
<p><strong>Проблема:</strong> сохранение площадки с большим числом назначенных объектов было медленным.<br>
<strong>Исправление:</strong> производительность улучшена.</p>
<p><strong>Проблема:</strong> загрузка UI-представлений тормозила из-за непреднамеренного разрешения <code>APISelect</code>.<br>
<strong>Исправление:</strong> лишние запросы устранены.</p>
<ul>
<li class="">Запрет общего изменяемого состояния в PluginMenuItem и PluginMenuButton.</li>
<li class="">Назначение <code>data_file</code> для ConfigContext и ConfigContextProfile через REST API.</li>
<li class="">Загрузка изображений AVIF.</li>
<li class="">Очистка OOB IP при переназначении IP-адресов устройства.</li>
<li class="">Лишние типы объектов убраны из формы разрешений.</li>
<li class="">Поиск сравнения для ID-фильтров в GraphQL.</li>
<li class="">Интерфейс GraphiQL explorer.</li>
<li class=""><code>ValueError</code>, если <code>API_TOKEN_PEPPERS</code> не задан.</li>
<li class="">Сопоставление передних и задних портов для типов модулей.</li>
<li class="">Массовое переименование типов модулей.</li>
<li class="">Параметр <code>fields</code> для REST API заданий, изменений объектов и типов объектов.</li>
<li class="">Перевод меток атрибутов объектов в UI.</li>
<li class="">32-битная фильтрация ASN в GraphQL.</li>
<li class="">Ложное предупреждение о pending migration при <code>DEFAULT_LANGUAGE</code>.</li>
<li class=""><code>AuthenticationFailed</code> при недопустимом API-токене для медиафайлов.</li>
<li class="">Поле weight тега помечено обязательным в формах UI.</li>
<li class="">Проверка таблицы типов объектов только во время миграции.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="v450">v4.5.0<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-5#v450" class="hash-link" aria-label="Прямая ссылка на v4.5.0" title="Прямая ссылка на v4.5.0" translate="no">​</a></h2>
<p>Крупный релиз с изменениями платформы, безопасности и модели данных. <strong>Перед обновлением обязательно прочитайте раздел «Критические изменения».</strong></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="критические-изменения">Критические изменения<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-5#%D0%BA%D1%80%D0%B8%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5-%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F" class="hash-link" aria-label="Прямая ссылка на Критические изменения" title="Прямая ссылка на Критические изменения" translate="no">​</a></h3>
<div class="theme-admonition theme-admonition-warning admonition_xJq3 alert alert--warning"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>Перед обновлением</div><div class="admonitionContent_BuS1"><ul>
<li class=""><strong>Python 3.10 и 3.11</strong> больше не поддерживаются. Требуется <strong>Python 3.12, 3.13 или 3.14</strong>.</li>
<li class=""><strong>GraphQL:</strong> фильтры по ID объектов и перечислениям теперь требуют явного модификатора — например, <code>id: { exact: 123 }</code> вместо <code>id: 123</code>.</li>
<li class=""><strong>Конфигурация устройства/ВМ</strong> доступна только с разрешением <code>render_config</code> для соответствующего типа объекта.</li>
<li class=""><strong>Токены API:</strong> извлечение открытого текста отключено (<code>ALLOW_TOKEN_RETRIEVAL</code> удалён); токены нельзя переназначать другому пользователю.</li>
<li class=""><strong>Контексты конфигурации</strong>, назначенные платформе, <strong>наследуются дочерними платформами</strong> — проверьте существующие назначения.</li>
<li class=""><strong><code>/api/dcim/cable-terminations/</code></strong> — только чтение; заделки кабеля меняются через <code>/api/dcim/cables/</code>.</li>
<li class="">Удалены: UI замены клемм цепи A/Z, экспериментальная HTMX-навигация, поле <code>is_staff</code> у User, endpoint <code>/api/extras/object-types/</code> (используйте <code>/api/core/object-types/</code>), ключ <code>model</code> в payload webhook (вместо него <code>object_type</code>), модуль <code>core.models.contenttypes</code>, методы <code>load_yaml()</code>/<code>load_json()</code> у BaseScript.</li>
</ul></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="главное-в-релизе">Главное в релизе<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-5#%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%BE%D0%B5-%D0%B2-%D1%80%D0%B5%D0%BB%D0%B8%D0%B7%D0%B5" class="hash-link" aria-label="Прямая ссылка на Главное в релизе" title="Прямая ссылка на Главное в релизе" translate="no">​</a></h3>
<table><thead><tr><th>Область</th><th>Что появилось</th></tr></thead><tbody><tr><td>Безопасность</td><td><strong>Токены API v2</strong> — HMAC, формат Bearer, без хранения открытого текста</td></tr><tr><td>Модель данных</td><td><strong>Владение объектами</strong> — поле <code>owner</code> и модель Owner</td></tr><tr><td>DCIM</td><td><strong>Расширенные сопоставления портов</strong> — двунаправленные связи front/rear</td></tr><tr><td>DCIM</td><td><strong>Профили кабелей</strong> — учёт полос и ответвлений при трассировке</td></tr><tr><td>UI</td><td><strong>Модификаторы поиска</strong> в формах фильтра (больше/меньше/не равно и др.)</td></tr></tbody></table>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="модификаторы-поиска-в-формах-фильтра">Модификаторы поиска в формах фильтра<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-5#%D0%BC%D0%BE%D0%B4%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%82%D0%BE%D1%80%D1%8B-%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0-%D0%B2-%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%85-%D1%84%D0%B8%D0%BB%D1%8C%D1%82%D1%80%D0%B0" class="hash-link" aria-label="Прямая ссылка на Модификаторы поиска в формах фильтра" title="Прямая ссылка на Модификаторы поиска в формах фильтра" translate="no">​</a></h3>
<p>Большинство фильтров списков в интерфейсе получили дополнительные модификаторы: для числовых полей — «меньше», «больше», «не равно» и т.д. Конкретный набор зависит от типа фильтра. Плагины могут подключить ту же механику через <code>register_filterset()</code>. Новых фильтров это не добавляет — расширяет уже существующие в UI.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="улучшенные-токены-аутентификации-api">Улучшенные токены аутентификации API<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-5#%D1%83%D0%BB%D1%83%D1%87%D1%88%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5-%D1%82%D0%BE%D0%BA%D0%B5%D0%BD%D1%8B-%D0%B0%D1%83%D1%82%D0%B5%D0%BD%D1%82%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D0%B8-api" class="hash-link" aria-label="Прямая ссылка на Улучшенные токены аутентификации API" title="Прямая ссылка на Улучшенные токены аутентификации API" translate="no">​</a></h3>
<p>Введена версия токена <strong>v2</strong> с HMAC-хешированием и криптографическим «перцем» — открытый текст на диске не хранится. У каждого токена есть неконфиденциальный ключ для идентификации без раскрытия секрета. Стандартный заголовок Bearer:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain"># v1 (устаревает)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Authorization: Token &lt;TOKEN&gt;</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"># v2 (рекомендуется)</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">Authorization: Bearer nbt_&lt;KEY&gt;.&lt;TOKEN&gt;</span><br></div></code></pre></div></div>
<p>Префикс <code>nbt_</code> упрощает обнаружение секретов в логах. Токены v1 пока поддерживаются, но <strong>рекомендуется переход на v2</strong> — поддержка v1 будет удалена в ОдинХаб 4.7.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="владение-объектом">Владение объектом<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-5#%D0%B2%D0%BB%D0%B0%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%BC" class="hash-link" aria-label="Прямая ссылка на Владение объектом" title="Прямая ссылка на Владение объектом" translate="no">​</a></h3>
<p>В большинство моделей добавлено необязательное поле <code>owner</code> — ссылка на модель Owner (набор пользователей и/или групп). Так можно явно назначать ответственных за объект, не полагаясь на теги или custom fields. Владение <strong>не то же самое</strong>, что аренда (tenancy): owner — кто обслуживает объект, tenant — кому он выделен операционно.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="расширенные-сопоставления-портов">Расширенные сопоставления портов<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-5#%D1%80%D0%B0%D1%81%D1%88%D0%B8%D1%80%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5-%D1%81%D0%BE%D0%BF%D0%BE%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F-%D0%BF%D0%BE%D1%80%D1%82%D0%BE%D0%B2" class="hash-link" aria-label="Прямая ссылка на Расширенные сопоставления портов" title="Прямая ссылка на Расширенные сопоставления портов" translate="no">​</a></h3>
<p>Схема «многие front → один rear» заменена промежуточной моделью <strong>PortMapping</strong>: произвольное число связей между парами port/position на передней и задней стороне. Это позволяет моделировать линейные устройства, переключающие пары волокон между кабелями.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="кабельные-профили">Кабельные профили<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-5#%D0%BA%D0%B0%D0%B1%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5-%D0%BF%D1%80%D0%BE%D1%84%D0%B8%D0%BB%D0%B8" class="hash-link" aria-label="Прямая ссылка на Кабельные профили" title="Прямая ссылка на Кабельные профили" translate="no">​</a></h3>
<p>Кабелю можно назначить <strong>профиль</strong>, задающий число параллельных полос между концами (например, отвод 1→4: четыре полосы с одного общего termination на четыре отдельных). Трассировка может отслеживать конкретное соединение внутри кабеля, а не только кабель целиком. Профиль необязателен — без него трассировка работает как раньше.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="прочие-улучшения">Прочие улучшения<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-5#%D0%BF%D1%80%D0%BE%D1%87%D0%B8%D0%B5-%D1%83%D0%BB%D1%83%D1%87%D1%88%D0%B5%D0%BD%D0%B8%D1%8F" class="hash-link" aria-label="Прямая ссылка на Прочие улучшения" title="Прямая ссылка на Прочие улучшения" translate="no">​</a></h3>
<ul>
<li class="">Разрешение <code>render_config</code> для рендеринга конфигурации.</li>
<li class="">Поле <code>start_on_boot</code> у виртуальных машин.</li>
<li class="">Поддержка Python 3.13 и 3.14.</li>
<li class="">Поиск по фильтрам для ID и перечислений в GraphQL.</li>
<li class="">Кэш количества экземпляров для типов устройств, модулей и стоек; фильтрация по ним.</li>
<li class="">Поле <code>color</code> у шаблонов розеток типа устройства.</li>
<li class="">Логическое поле <code>enabled</code> у токенов API; ссылка на использование токена в UI.</li>
<li class="">Поле <code>comments</code> у всех подклассов <code>OrganizationalModel</code>.</li>
<li class="">Endpoint <code>/api/authentication-check/</code> для проверки учётных данных.</li>
<li class="">Счётчик связанных типов модулей у производителя в REST API.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="плагины">Плагины<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-5#%D0%BF%D0%BB%D0%B0%D0%B3%D0%B8%D0%BD%D1%8B" class="hash-link" aria-label="Прямая ссылка на Плагины" title="Прямая ссылка на Плагины" translate="no">​</a></h3>
<ul>
<li class="">В API плагинов: <code>PrimaryModel</code>, <code>OrganizationalModel</code>, <code>NestedGroupModel</code> и соответствующие базовые классы ресурсов.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="платформа-и-прочее">Платформа и прочее<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-5#%D0%BF%D0%BB%D0%B0%D1%82%D1%84%D0%BE%D1%80%D0%BC%D0%B0-%D0%B8-%D0%BF%D1%80%D0%BE%D1%87%D0%B5%D0%B5" class="hash-link" aria-label="Прямая ссылка на Платформа и прочее" title="Прямая ссылка на Платформа и прочее" translate="no">​</a></h3>
<ul>
<li class="">Начат перенос представлений объектов из HTML-шаблонов в декларативные макеты.</li>
<li class="">Введён <code>BaseModel</code> как глобальный базовый класс моделей.</li>
<li class=""><code>GFKSerializerField</code> для generic foreign keys в сериализаторах API.</li>
<li class="">Стандартизированы имена фильтров GraphQL.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="rest-api-кратко-для-интеграторов">REST API (кратко для интеграторов)<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-5#rest-api-%D0%BA%D1%80%D0%B0%D1%82%D0%BA%D0%BE-%D0%B4%D0%BB%D1%8F-%D0%B8%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%BE%D0%B2" class="hash-link" aria-label="Прямая ссылка на REST API (кратко для интеграторов)" title="Прямая ссылка на REST API (кратко для интеграторов)" translate="no">​</a></h3>
<p><strong>Общее:</strong> у большинства объектов — необязательное поле <code>owner</code>; <code>/api/dcim/cable-terminations</code> только для чтения; новый <code>/api/authentication-check/</code>.</p>
<p><strong>Кабели и порты:</strong> у <code>dcim.Cable</code> — поле <code>profile</code>; у <code>FrontPort</code>/<code>RearPort</code> — списки <code>rear_ports</code>/<code>front_ports</code> и <code>positions</code> вместо прямых полей <code>rear_port</code>/<code>rear_port_position</code>.</p>
<p><strong>Прочие расширения:</strong> <code>comments</code> у ряда организационных моделей; <code>color</code> у PowerOutletTemplate; <code>start_on_boot</code> у VirtualMachine; <code>enabled</code> у Token; счётчики <code>moduletype_count</code>, <code>module_count</code>, <code>rack_count</code> только для чтения.</p>
<hr>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>Обновление</div><div class="admonitionContent_BuS1"><p>Ветка релиза на GitFlic: <code>onehub-4.5.10-gitflic</code> (или актуальная с <a href="https://gitflic.ru/project/abp2b/onehub/releases" target="_blank" rel="noopener noreferrer" class="">страницы релизов</a>). После обновления проверьте версию Python (3.12+) и перевыпустите токены API v2.</p></div></div>]]></content>
        <category label="release" term="release"/>
        <category label="news" term="news"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Вышла версия 4.4]]></title>
        <id>https://одинхаб.рф/blog/release-4-4</id>
        <link href="https://одинхаб.рф/blog/release-4-4"/>
        <updated>2026-01-06T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Краткий обзор релиза для администраторов и пользователей. Инструкция по обновлению — в руководстве.]]></summary>
        <content type="html"><![CDATA[<p>Краткий обзор релиза для администраторов и пользователей. Инструкция по обновлению — в <a class="" href="https://xn--80achqzd6c.xn--p1ai/installation/upgrading">руководстве</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="v4410">v4.4.10<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-4#v4410" class="hash-link" aria-label="Прямая ссылка на v4.4.10" title="Прямая ссылка на v4.4.10" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="улучшения">Улучшения<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-4#%D1%83%D0%BB%D1%83%D1%87%D1%88%D0%B5%D0%BD%D0%B8%D1%8F" class="hash-link" aria-label="Прямая ссылка на Улучшения" title="Прямая ссылка на Улучшения" translate="no">​</a></h3>
<ul>
<li class="">На страницах интерфейса отображаются связи обратного моста.</li>
<li class="">В сообщениях об ошибках сервера указываются метод HTTP-запроса и URL.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="исправления-ошибок">Исправления ошибок<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-4#%D0%B8%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F-%D0%BE%D1%88%D0%B8%D0%B1%D0%BE%D0%BA" class="hash-link" aria-label="Прямая ссылка на Исправления ошибок" title="Прямая ссылка на Исправления ошибок" translate="no">​</a></h3>
<ul>
<li class=""><strong>Шаблоны компонентов:</strong> добавлены формы фильтров с поддержкой выбора объектов.</li>
<li class=""><strong>Подъёмы стоек:</strong> исправлена поддержка тёмной темы.</li>
<li class=""><strong>Массовое редактирование интерфейсов:</strong> восстановлен выбор связанных интерфейсов.</li>
<li class=""><strong>Источники данных:</strong> кнопка ручной синхронизации снова доступна, даже если запланированная синхронизация отключена.</li>
<li class=""><strong>Площадки:</strong> устранено исключение при сохранении площадки с назначенным префиксом.</li>
<li class=""><strong>Настраиваемые поля:</strong> при валидации объекта игнорируются устаревшие данные; проверяется отсутствие дубликатов в наборах вариантов; экранированные двоеточия в дополнительных вариантах сохраняются корректно.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="v449">v4.4.9<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-4#v449" class="hash-link" aria-label="Прямая ссылка на v4.4.9" title="Прямая ссылка на v4.4.9" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="улучшения-1">Улучшения<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-4#%D1%83%D0%BB%D1%83%D1%87%D1%88%D0%B5%D0%BD%D0%B8%D1%8F-1" class="hash-link" aria-label="Прямая ссылка на Улучшения" title="Прямая ссылка на Улучшения" translate="no">​</a></h3>
<ul>
<li class="">Диапазоны ASN можно задавать в нотации ASDOT.</li>
<li class="">Добавлен перевод интерфейса на латышский язык.</li>
<li class="">Поля настраиваемого выбора в фильтрах поддерживают несколько значений одновременно.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="исправления-ошибок-1">Исправления ошибок<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-4#%D0%B8%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F-%D0%BE%D1%88%D0%B8%D0%B1%D0%BE%D0%BA-1" class="hash-link" aria-label="Прямая ссылка на Исправления ошибок" title="Прямая ссылка на Исправления ошибок" translate="no">​</a></h3>
<ul>
<li class=""><strong>OpenAPI:</strong> из схемы вложенного производителя убрано поле <code>devicetype_count</code>.</li>
<li class=""><strong>Массовый импорт:</strong> при дублирующихся идентификаторах выводится понятное сообщение; при импорте устройств с тегами сохраняется <code>parent_bay</code>.</li>
<li class=""><strong>Правила событий:</strong> исправлено исключение для объектов с вложениями файлов.</li>
<li class=""><strong>Компоненты устройств и модулей:</strong> кэшируются связи с родительскими объектами для корректной фильтрации.</li>
<li class=""><strong>IP-диапазоны:</strong> разрешено редактировать адрес в диапазоне, помеченном как заполненный.</li>
<li class=""><strong>Отсеки модулей:</strong> согласована очистка поля <code>module</code> в ModuleBay.</li>
<li class=""><strong>Иерархия площадок:</strong> при смене родительского региона, площадки или местоположения обновляется кэшированная область дочерних объектов.</li>
<li class=""><strong>Удаление связей:</strong> объекты с <code>on_delete=RESTRICT</code> обрабатываются так же предсказуемо, как при каскадном удалении.</li>
<li class=""><strong>Разрешения:</strong> исправлена отрисовка длинного списка типов объектов при прокрутке.</li>
<li class=""><strong>Шаблоны портов:</strong> исправлен запрос передних портов по <code>rear_port_id</code>.</li>
<li class=""><strong>Конфигурация:</strong> при загрузке активной ConfigRevision не выполняются лишние записи в БД; убран лишний SQL-подзапрос в RestrictedQuerySet там, где он не нужен.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="v448">v4.4.8<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-4#v448" class="hash-link" aria-label="Прямая ссылка на v4.4.8" title="Прямая ссылка на v4.4.8" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="улучшения-2">Улучшения<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-4#%D1%83%D0%BB%D1%83%D1%87%D1%88%D0%B5%D0%BD%D0%B8%D1%8F-2" class="hash-link" aria-label="Прямая ссылка на Улучшения" title="Прямая ссылка на Улучшения" translate="no">​</a></h3>
<ul>
<li class="">Атрибуты профиля типа модуля можно назначать при массовом импорте.</li>
<li class="">Компоненты устройства фильтруются по арендатору, назначенному устройству.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="исправления-ошибок-2">Исправления ошибок<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-4#%D0%B8%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F-%D0%BE%D1%88%D0%B8%D0%B1%D0%BE%D0%BA-2" class="hash-link" aria-label="Прямая ссылка на Исправления ошибок" title="Прямая ссылка на Исправления ошибок" translate="no">​</a></h3>
<ul>
<li class=""><strong>Шаблоны компонентов:</strong> восстановлена подстановка <code>{module}</code> для дочерних модулей.</li>
<li class=""><strong>Разрешения:</strong> улучшена читаемость названий типов объектов в форме.</li>
<li class=""><strong>Журнал изменений:</strong> пользовательское сообщение записывается при создании компонентов устройства через интерфейс.</li>
<li class=""><strong>Пользовательские сценарии:</strong> выполняются в контексте активного подключения к базе данных.</li>
<li class=""><strong>Координаты:</strong> устранены предупреждения о недесятичных значениях в полях широты и долготы.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="v447">v4.4.7<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-4#v447" class="hash-link" aria-label="Прямая ссылка на v4.4.7" title="Прямая ссылка на v4.4.7" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="улучшения-3">Улучшения<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-4#%D1%83%D0%BB%D1%83%D1%87%D1%88%D0%B5%D0%BD%D0%B8%D1%8F-3" class="hash-link" aria-label="Прямая ссылка на Улучшения" title="Прямая ссылка на Улучшения" translate="no">​</a></h3>
<ul>
<li class="">Добавлен тип разъёма Molex Micro-Fit 2x3 для силовых портов и розеток.</li>
<li class="">При массовом импорте шаблонов конфигурации можно указывать <code>data_source</code> и <code>data_file</code>.</li>
<li class="">Настраиваемые поля фильтруются по типу объекта.</li>
<li class="">Нельзя создать токен API с датой истечения в прошлом.</li>
<li class="">При создании и редактировании стойки доступна расширенная фильтрация типов стоек.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="исправления-ошибок-3">Исправления ошибок<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-4#%D0%B8%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F-%D0%BE%D1%88%D0%B8%D0%B1%D0%BE%D0%BA-3" class="hash-link" aria-label="Прямая ссылка на Исправления ошибок" title="Прямая ссылка на Исправления ошибок" translate="no">​</a></h3>
<ul>
<li class=""><strong>HTMX:</strong> запрещена внеполосная подмена содержимого во встроенных таблицах.</li>
<li class=""><strong>Кабели и цепи:</strong> исправлено отслеживание кабелей в нескольких параллельных цепях.</li>
<li class=""><strong>Пользовательские сценарии:</strong> сценарии обновляются сразу после загрузки нового файла; на REST API действуют права просмотра; ограничения разрешений учитываются при запуске через API; в сценарий передаётся контекст запроса при срабатывании правила события.</li>
<li class=""><strong>OpenAPI:</strong> исправлена схема для операций массового создания.</li>
<li class=""><strong>Страница ошибок:</strong> убраны ошибочные переводы.</li>
<li class=""><strong>Массовое переименование:</strong> исправлено исключение при переименовании безымянных устройств.</li>
<li class=""><strong>Массовое редактирование:</strong> добавлено отсутствовавшее поле <code>auto_sync_enabled</code>.</li>
<li class=""><strong>Тема оформления:</strong> исправлены артефакты при переключении светлого и тёмного режима.</li>
<li class=""><strong>Фильтры:</strong> корректная фильтрация по типу объекта для пользовательских ссылок и сохранённых фильтров; исправлен фильтр типа объекта для окончаний L2VPN.</li>
<li class=""><strong>Модели:</strong> у RackType убраны лишние ссылки на воздушный поток; заданы корректные минимум и максимум для широты и долготы.</li>
<li class=""><strong>Панель управления:</strong> виджет больше не роняет всю панель при исключении.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="v446">v4.4.6<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-4#v446" class="hash-link" aria-label="Прямая ссылка на v4.4.6" title="Прямая ссылка на v4.4.6" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="улучшения-4">Улучшения<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-4#%D1%83%D0%BB%D1%83%D1%87%D1%88%D0%B5%D0%BD%D0%B8%D1%8F-4" class="hash-link" aria-label="Прямая ссылка на Улучшения" title="Прямая ссылка на Улучшения" translate="no">​</a></h3>
<ul>
<li class="">При массовом импорте можно назначать VLAN интерфейсам устройств и виртуальных машин.</li>
<li class="">Добавлены дополнительные типы коаксиальных кабелей.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="исправления-ошибок-4">Исправления ошибок<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-4#%D0%B8%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F-%D0%BE%D1%88%D0%B8%D0%B1%D0%BE%D0%BA-4" class="hash-link" aria-label="Прямая ссылка на Исправления ошибок" title="Прямая ссылка на Исправления ошибок" translate="no">​</a></h3>
<ul>
<li class=""><strong>Источники данных:</strong> нельзя удалить источник, на который ссылается пользовательский сценарий, без понятной ошибки.</li>
<li class=""><strong>Массовый импорт:</strong> пустые поля CSV используют значения по умолчанию модели; улучшена обработка пустых строк; усилена проверка связанных объектов.</li>
<li class=""><strong>Задания и журнал:</strong> исправлена фильтрация заданий по типу объекта; подавлено лишнее предупреждение об отсутствии активной версии конфигурации; устранено дублирование сигналов счётчиков связанных объектов; записи журнала при каскадном удалении упорядочены корректно.</li>
<li class=""><strong>Виртуальные шасси:</strong> при добавлении и удалении участников сохраняется снимок «до изменения»; при удалении шасси обнуляется <code>vc_position</code> у бывших участников.</li>
<li class=""><strong>Интерфейс:</strong> исправлены ссылки на фоновые задания; комментарий обязателен при создании записи журнала; подписи кнопок массовых действий переводятся.</li>
<li class=""><strong>Разрешения:</strong> исправлено клонирование при выборе одного действия; устранено дублирование результатов при фильтрации поставщиков.</li>
<li class=""><strong>Скрипты:</strong> ускорена загрузка модулей скриптов из удалённого хранилища.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="v445">v4.4.5<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-4#v445" class="hash-link" aria-label="Прямая ссылка на v4.4.5" title="Прямая ссылка на v4.4.5" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="улучшения-5">Улучшения<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-4#%D1%83%D0%BB%D1%83%D1%87%D1%88%D0%B5%D0%BD%D0%B8%D1%8F-5" class="hash-link" aria-label="Прямая ссылка на Улучшения" title="Прямая ссылка на Улучшения" translate="no">​</a></h3>
<ul>
<li class="">В формах установки модуля занятые отсеки в списках отображаются как недоступные.</li>
<li class="">В уведомлениях появилась опция «отклонить все».</li>
<li class="">Для MAC-адресов добавлены логические фильтры <code>assigned</code> и <code>primary</code>.</li>
<li class="">В таблицы служб, IP-адресов и ряда других моделей добавлен столбец контактов.</li>
<li class="">Добавлена интеграция с NetBox Copilot (ИИ-помощник для работы с данными).</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="исправления-ошибок-5">Исправления ошибок<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-4#%D0%B8%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F-%D0%BE%D1%88%D0%B8%D0%B1%D0%BE%D0%BA-5" class="hash-link" aria-label="Прямая ссылка на Исправления ошибок" title="Прямая ссылка на Исправления ошибок" translate="no">​</a></h3>
<ul>
<li class=""><strong>Пользовательские сценарии:</strong> при ошибке валидации сообщения отображаются пользователю; нельзя запланировать запуск на прошлую дату и время.</li>
<li class=""><strong>Массовые операции:</strong> исправлено поведение «выбрать все» при массовом переименовании; значения из столбцов-значков копируются в буфер обмена.</li>
<li class=""><strong>GraphQL:</strong> фильтрация агрегатов и префиксов по семейству адресов; исправлен запрос устройств с основным IP; корректно разрешаются поля с пользовательскими фильтрами.</li>
<li class=""><strong>Массовый импорт IP:</strong> проверяются поля <code>is_oob</code> и <code>is_primary</code>.</li>
<li class=""><strong>Настраиваемые поля URL:</strong> применяется regex-проверка, если она задана.</li>
<li class=""><strong>REST API:</strong> исправлено исключение при смене конечной точки объекта; нельзя подключить кабель к уже помеченному как подключённому объекту; исправлена сортировка списка разрешений по действиям.</li>
<li class=""><strong>Интерфейс:</strong> исправлена автогенерация пулов в форме быстрого добавления.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="v444">v4.4.4<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-4#v444" class="hash-link" aria-label="Прямая ссылка на v4.4.4" title="Прямая ссылка на v4.4.4" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="исправления-ошибок-6">Исправления ошибок<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-4#%D0%B8%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F-%D0%BE%D1%88%D0%B8%D0%B1%D0%BE%D0%BA-6" class="hash-link" aria-label="Прямая ссылка на Исправления ошибок" title="Прямая ссылка на Исправления ошибок" translate="no">​</a></h3>
<ul>
<li class=""><strong>Фильтры общих отношений:</strong> принимают POST-запросы в формате <code>&lt;app&gt;.&lt;model&gt;</code>.</li>
<li class=""><strong>Удалённое хранилище скриптов:</strong> снижены избыточные затраты при инициализации хранилища.</li>
<li class=""><strong>Шаблоны интерфейсов:</strong> режим PoE обязателен, если указан тип PoE.</li>
<li class=""><strong>OpenAPI:</strong> исправлен сбой генерации схемы для моделей с однопольными уникальными ограничениями.</li>
<li class=""><strong>Обновление:</strong> скрипт <code>update.sh</code> не падает при удалении устаревших типов контента.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="v443">v4.4.3<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-4#v443" class="hash-link" aria-label="Прямая ссылка на v4.4.3" title="Прямая ссылка на v4.4.3" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="улучшения-6">Улучшения<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-4#%D1%83%D0%BB%D1%83%D1%87%D1%88%D0%B5%D0%BD%D0%B8%D1%8F-6" class="hash-link" aria-label="Прямая ссылка на Улучшения" title="Прямая ссылка на Улучшения" translate="no">​</a></h3>
<ul>
<li class="">Вывод пользовательского сценария можно скопировать в буфер обмена одной кнопкой.</li>
<li class="">Диапазоны VLAN ID в групповых таблицах отображаются нагляднее.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="исправления-ошибок-7">Исправления ошибок<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-4#%D0%B8%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F-%D0%BE%D1%88%D0%B8%D0%B1%D0%BE%D0%BA-7" class="hash-link" aria-label="Прямая ссылка на Исправления ошибок" title="Прямая ссылка на Исправления ошибок" translate="no">​</a></h3>
<ul>
<li class=""><strong>REST API:</strong> корректная проверка уникальности полей, допускающих NULL; учитывается <code>MAX_PAGE_SIZE</code>; исправлена схема для <code>IntegerRangeSerializer</code>.</li>
<li class=""><strong>Шаблоны и хранилище:</strong> поддержка статических параметров файлов при внешнем хранилище.</li>
<li class=""><strong>Интерфейс:</strong> при создании ВМ скрыты поля основного IP; исправлены метки высоты стойки; одноэлементные VLAN ID в групповом виде сворачиваются; форма смены пароля скрыта для пользователей SSO; MAC-адреса создаются через «быстрое добавление».</li>
<li class=""><strong>Конфигурация:</strong> при включённой отладке не перезаписывается кэш версий конфигурации ошибочно.</li>
<li class=""><strong>Цепи:</strong> при смене региона или группы объекта обновляются связанные подключения цепей.</li>
<li class=""><strong>Журнал изменений:</strong> сохранение группы VLAN без изменений не создаёт лишнюю запись.</li>
<li class=""><strong>Миграция:</strong> исправлена ошибка при обновлении на v4.4 с версий ниже 4.3.</li>
<li class=""><strong>GraphQL:</strong> фильтрация групп VLAN по диапазону ID; получение контактов ASN.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="v442">v4.4.2<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-4#v442" class="hash-link" aria-label="Прямая ссылка на v4.4.2" title="Прямая ссылка на v4.4.2" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="улучшения-7">Улучшения<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-4#%D1%83%D0%BB%D1%83%D1%87%D1%88%D0%B5%D0%BD%D0%B8%D1%8F-7" class="hash-link" aria-label="Прямая ссылка на Улучшения" title="Прямая ссылка на Улучшения" translate="no">​</a></h3>
<ul>
<li class="">Пункты меню администратора видны только сотрудникам и суперпользователям.</li>
<li class="">В таблицы компонентов устройства добавлены столбцы площадки и местоположения.</li>
<li class="">Типы объектов в сохранённом фильтре можно связать с назначением фильтра.</li>
<li class="">Глобальный поиск открывается по горячей клавише <code>/</code>.</li>
<li class="">В фильтрах по тегам добавлен вариант «нет».</li>
<li class="">Введён параметр конфигурации <code>SENTRY_CONFIG</code>.</li>
<li class="">В карточке виртуальной машины отображается тип кластера.</li>
<li class="">Поле <code>facility</code> доступно при массовом редактировании площадок и местоположений.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="исправления-ошибок-8">Исправления ошибок<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-4#%D0%B8%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F-%D0%BE%D1%88%D0%B8%D0%B1%D0%BE%D0%BA-8" class="hash-link" aria-label="Прямая ссылка на Исправления ошибок" title="Прямая ссылка на Исправления ошибок" translate="no">​</a></h3>
<ul>
<li class=""><strong>Интерфейсы:</strong> при создании нового интерфейса автоматически назначается основной MAC, если он задан.</li>
<li class=""><strong>Задания:</strong> запланированные системные задания не запускаются повторно.</li>
<li class=""><strong>GraphQL:</strong> восстановлена фильтрация назначений контактов объектов.</li>
<li class=""><strong>OpenAPI:</strong> устранены неточности в сгенерированной схеме.</li>
<li class=""><strong>Массовые операции:</strong> параметры фильтра сохраняются при массовых действиях.</li>
<li class=""><strong>Интерфейс:</strong> исправлен стиль выбора размера страницы; убрана фиксированная сортировка вариантов типов интерфейса; понятнее сообщения об ошибках min/max у настраиваемых полей; корректные кнопки действий у дочерних представлений; предпросмотр Markdown в «быстром добавлении»; столбец «группы» в таблице назначений контактов.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="v441">v4.4.1<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-4#v441" class="hash-link" aria-label="Прямая ссылка на v4.4.1" title="Прямая ссылка на v4.4.1" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="улучшения-8">Улучшения<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-4#%D1%83%D0%BB%D1%83%D1%87%D1%88%D0%B5%D0%BD%D0%B8%D1%8F-8" class="hash-link" aria-label="Прямая ссылка на Улучшения" title="Прямая ссылка на Улучшения" translate="no">​</a></h3>
<ul>
<li class="">Разрешения можно клонировать.</li>
<li class="">Временные метки результатов сценария показываются в системном часовом поясе.</li>
<li class="">Групповое назначение FHRP больше не требует обязательного назначенного IP.</li>
<li class="">Шаблоны экспорта поддерживают оконечные устройства цепей и виртуальных цепей.</li>
<li class="">В таблице устройств добавлен столбец высоты в юнитах (U).</li>
<li class="">У источников данных — отдельные кнопки синхронизации в списке.</li>
<li class="">Типы кабелей сгруппированы заново для удобства навигации.</li>
<li class="">Для CSRF-cookie включён флаг <code>HttpOnly</code>.</li>
<li class="">Группы VPN-туннелей попадают в глобальный поиск.</li>
<li class="">В журнал изменений кабеля записываются обе оконечные точки (A и B).</li>
<li class="">Утилита <code>deserialize_object()</code> поддерживает назначение атрибутов.</li>
<li class="">Добавлены типы физических носителей для интерфейсов трансивера и псевдонимы Wi‑Fi Alliance для 802.11.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="исправления-ошибок-9">Исправления ошибок<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-4#%D0%B8%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F-%D0%BE%D1%88%D0%B8%D0%B1%D0%BE%D0%BA-9" class="hash-link" aria-label="Прямая ссылка на Исправления ошибок" title="Прямая ссылка на Исправления ошибок" translate="no">​</a></h3>
<ul>
<li class=""><strong>GraphQL:</strong> восстановлен фильтр <code>kind</code> для интерфейсов; все фильтры контекстов конфигурации необязательны.</li>
<li class=""><strong>Списки и таблицы:</strong> плагины сортируются по столбцу «активен»; убрана строка «0 VLAN доступно» в конце таблицы диапазонов VLAN; исправлены кнопки «Добавить» у дочерних объектов; значок по умолчанию в списке плагинов; placeholder при недоступной миниатюре изображения.</li>
<li class=""><strong>Массовый импорт:</strong> понятное сообщение об отсутствии <code>scope</code> для беспроводных LAN; поддержка внешнего IP у окончаний туннеля; min/max для десятичных настраиваемых полей принимают десятичные значения.</li>
<li class=""><strong>Виртуальные шасси:</strong> корректная проверка родительского интерфейса.</li>
<li class=""><strong>Данные:</strong> JSON-поля не превращают пустые словари в null; единообразное заполнение Markdown; из имён загружаемых изображений удаляются недопустимые символы.</li>
<li class=""><strong>Контексты конфигурации:</strong> контексты, назначенные исходным местоположениям, применяются к устройству и ВМ; убран лишний <code>distinct()</code> при получении данных контекста.</li>
<li class=""><strong>Прочее:</strong> исправлена ссылка кнопки «Добавить» при предупреждении о prerequisite; фоновые задания без ID запроса не падают; оформление предупреждения о необходимых объектах.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="v440">v4.4.0<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-4#v440" class="hash-link" aria-label="Прямая ссылка на v4.4.0" title="Прямая ссылка на v4.4.0" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="новые-возможности">Новые возможности<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-4#%D0%BD%D0%BE%D0%B2%D1%8B%D0%B5-%D0%B2%D0%BE%D0%B7%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%B8" class="hash-link" aria-label="Прямая ссылка на Новые возможности" title="Прямая ссылка на Новые возможности" translate="no">​</a></h3>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="фоновые-задания-для-массовых-операций">Фоновые задания для массовых операций<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-4#%D1%84%D0%BE%D0%BD%D0%BE%D0%B2%D1%8B%D0%B5-%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F-%D0%B4%D0%BB%D1%8F-%D0%BC%D0%B0%D1%81%D1%81%D0%BE%D0%B2%D1%8B%D1%85-%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B9" class="hash-link" aria-label="Прямая ссылка на Фоновые задания для массовых операций" title="Прямая ссылка на Фоновые задания для массовых операций" translate="no">​</a></h4>
<p>Большинство массовых операций — импорт, изменение и удаление объектов — теперь можно выполнять в фоне. Пока задание обрабатывается, можно продолжать работу в ОдинХаб; по завершении придёт уведомление с результатом.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="журналирование-фоновых-заданий">Журналирование фоновых заданий<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-4#%D0%B6%D1%83%D1%80%D0%BD%D0%B0%D0%BB%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-%D1%84%D0%BE%D0%BD%D0%BE%D0%B2%D1%8B%D1%85-%D0%B7%D0%B0%D0%B4%D0%B0%D0%BD%D0%B8%D0%B9" class="hash-link" aria-label="Прямая ссылка на Журналирование фоновых заданий" title="Прямая ссылка на Журналирование фон�овых заданий" translate="no">​</a></h4>
<p>Для фоновых заданий появился встроенный механизм записи логов: из метода <code>run()</code> можно вызывать, например, <code>self.logger.info("сообщение")</code>. Сообщения отображаются вместе с результатом задания. Поддерживаются уровни <code>DEBUG</code>, <code>INFO</code>, <code>WARNING</code> и <code>ERROR</code>.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="комментарии-к-журналу-изменений">Комментарии к журналу изменений<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-4#%D0%BA%D0%BE%D0%BC%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D1%80%D0%B8%D0%B8-%D0%BA-%D0%B6%D1%83%D1%80%D0%BD%D0%B0%D0%BB%D1%83-%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B9" class="hash-link" aria-label="Прямая ссылка на Комментарии к журналу изменений" title="Прямая ссылка на Комментарии к журналу изменений" translate="no">​</a></h4>
<p>При создании, изменении или удалении объектов можно кратко пояснить причину изменения. Текст попадёт в записи журнала изменений для всех затронутых объектов.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="проверка-данных-контекста-конфигурации">Проверка данных контекста конфигурации<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-4#%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%BA%D0%B0-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85-%D0%BA%D0%BE%D0%BD%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%B0-%D0%BA%D0%BE%D0%BD%D1%84%D0%B8%D0%B3%D1%83%D1%80%D0%B0%D1%86%D0%B8%D0%B8" class="hash-link" aria-label="Прямая ссылка на Проверка данных контекста конфигурации" title="Прямая ссылка на Проверка данных контекста конфигурации" translate="no">​</a></h4>
<p>Новая модель ConfigContextProfile задаёт JSON-схему для данных контекста конфигурации. Если схема задана, каждое изменение назначенного контекста проверяется по ней. Назначение профиля необязательно.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="улучшения-9">Улучшения<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-4#%D1%83%D0%BB%D1%83%D1%87%D1%88%D0%B5%D0%BD%D0%B8%D1%8F-9" class="hash-link" aria-label="Прямая ссылка на Улучшения" title="Прямая ссылка на Улучшения" translate="no">​</a></h3>
<ul>
<li class="">Платформы разных производителей могут иметь одинаковые имена.</li>
<li class="">Улучшены представление и таблицы вложений изображений.</li>
<li class="">Параметр <code>HOSTNAME</code> позволяет переопределить имя хоста, которое сообщает ОдинХаб.</li>
<li class="">У резервирований стоек появилось поле <code>status</code>.</li>
<li class="">У вложений изображений — необязательное описание.</li>
<li class="">Мощность передачи интерфейса (<code>tx_power</code>) может быть отрицательной.</li>
<li class="">Массовое переименование доступно для большинства типов объектов в интерфейсе.</li>
<li class="">Миниатюры всех изображений объекта вынесены на отдельную вкладку.</li>
<li class="">Конечная точка типов объектов в REST API обогащена метаданными.</li>
<li class="">В настройках пользователя можно задать разделитель CSV.</li>
<li class="">Платформы поддерживают вложенность в иерархии.</li>
<li class="">Расширено представление системного пользователя в интерфейсе.</li>
<li class="">В ответе <code>/api/status/</code> указывается имя хоста системы.</li>
<li class="">Контакты можно назначать ASN.</li>
<li class="">В пользовательских сценариях добавлена переменная для десятичных значений.</li>
<li class="">В экспорт метрик Prometheus включены счётчики запросов REST и GraphQL API.</li>
<li class="">В полезной нагрузке вебхука передаётся полное представление типа объекта.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="плагины">Плагины<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-4#%D0%BF%D0%BB%D0%B0%D0%B3%D0%B8%D0%BD%D1%8B" class="hash-link" aria-label="Прямая ссылка на Плагины" title="Прямая ссылка на Плагины" translate="no">​</a></h3>
<ul>
<li class="">JavaScript выполняется при переключении светлой и тёмной темы.</li>
<li class="">Пользовательские одиночные и групповые операции регистрируются через <code>ObjectAction</code> в отдельных представлениях.</li>
<li class="">Можно регистрировать обратные вызовы для дополнительных данных вебхуков.</li>
<li class="">В таблицах плагинов поддерживается <code>ArrayColumn</code>.</li>
<li class="">Плагины могут регистрировать пользовательские функции модели.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="устаревание">Устаревание<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-4#%D1%83%D1%81%D1%82%D0%B0%D1%80%D0%B5%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5" class="hash-link" aria-label="Прямая ссылка на Устаревание" title="Прямая ссылка на Устаревание" translate="no">​</a></h3>
<ul>
<li class="">Прямое назначение VLAN площадкам устарело в пользу групп VLAN.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="другие-изменения">Другие изменения<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-4#%D0%B4%D1%80%D1%83%D0%B3%D0%B8%D0%B5-%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F" class="hash-link" aria-label="Прямая ссылка на Другие изменения" title="Прямая ссылка на Другие изменения" translate="no">​</a></h3>
<ul>
<li class="">Скрипт очистки заменён системным заданием.</li>
<li class="">Модель «Сервис» в интерфейсе переименована в «Служба приложений» (только отображение).</li>
<li class="">Конечная точка типов объектов перенесена в <code>/api/core/</code>.</li>
<li class="">Типы объектов (ObjectTypes) хранятся в базе как отдельные сущности наряду с ContentTypes.</li>
<li class="">Улучшена команда управления <code>nbshell</code>.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="изменения-rest-api">Изменения REST API<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-4#%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F-rest-api" class="hash-link" aria-label="Прямая ссылка на Изменения REST API" title="Прямая ссылка на Изменения REST API" translate="no">​</a></h3>
<ul>
<li class="">Для всех типов объектов с журналом изменений в операциях записи можно передавать <code>changelog_message</code> — оно попадёт в запись журнала при успешном изменении.</li>
<li class=""><code>/api/status/</code> возвращает имя хоста системы.</li>
<li class=""><code>/api/extras/object-types/</code> доступна по адресу <code>/api/core/object-types/</code> (старый путь будет удалён в v4.5).</li>
<li class="">Конечная точка <code>/api/core/object-types/</code> дополнена полями только для чтения: <code>app_name</code>, <code>model_name</code>, <code>model_name_plural</code>, <code>is_plugin_model</code>, <code>rest_api_endpoint</code>, <code>description</code>.</li>
<li class="">Добавлена конечная точка <code>/api/extras/config-context-profiles/</code>.</li>
<li class=""><strong>core.Job</strong> — поле <code>log_entries</code> (массив, только чтение).</li>
<li class=""><strong>dcim.Interface</strong> — <code>tx_power</code> принимает отрицательные значения.</li>
<li class=""><strong>dcim.RackReservation</strong> — поле <code>status</code>.</li>
<li class=""><strong>dcim.Platform</strong> — внешний ключ <code>parent</code> для вложенности.</li>
<li class=""><strong>extras.ConfigContext</strong> — необязательный внешний ключ <code>profile</code>.</li>
<li class=""><strong>extras.ImageAttachment</strong> — необязательное поле <code>description</code>.</li>
</ul>]]></content>
        <category label="release" term="release"/>
        <category label="news" term="news"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Вышла версия 4.3]]></title>
        <id>https://одинхаб.рф/blog/release-4-3</id>
        <link href="https://одинхаб.рф/blog/release-4-3"/>
        <updated>2025-08-26T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Краткий обзор релиза для администраторов и пользователей. Инструкция по обновлению — в руководстве.]]></summary>
        <content type="html"><![CDATA[<p>Краткий обзор релиза для администраторов и пользователей. Инструкция по обновлению — в <a class="" href="https://xn--80achqzd6c.xn--p1ai/installation/upgrading">руководстве</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="v437">v4.3.7<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-3#v437" class="hash-link" aria-label="Прямая ссылка на v4.3.7" title="Прямая ссылка на v4.3.7" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="улучшения">Улучшения<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-3#%D1%83%D0%BB%D1%83%D1%87%D1%88%D0%B5%D0%BD%D0%B8%D1%8F" class="hash-link" aria-label="Прямая ссылка на Улучшения" title="Прямая ссылка на Улучшения" translate="no">​</a></h3>
<ul>
<li class="">В связанных объектах VRF отображаются количества устройств и интерфейсов виртуальных машин.</li>
<li class="">Кнопка добавления отсутствующего предварительного условия теперь включает URL возврата.</li>
<li class="">Улучшен цветовой контраст выделенных данных при просмотре различий в журнале изменений.</li>
<li class="">В форму редактирования MAC-адреса добавлен селектор объектов для интерфейса.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="исправления-ошибок">Исправления ошибок<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-3#%D0%B8%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F-%D0%BE%D1%88%D0%B8%D0%B1%D0%BE%D0%BA" class="hash-link" aria-label="Прямая ссылка на Исправления ошибок" title="Прямая ссылка на Исправления ошибок" translate="no">​</a></h3>
<ul>
<li class=""><strong>Проблема:</strong> некорректный стиль динамического раскрывающегося списка для обязательных полей без выбранного значения. <strong>Исправление:</strong> стиль приведён в соответствие с ожидаемым поведением.</li>
<li class=""><strong>Проблема:</strong> при добавлении кабеля в мастере виртуального шасси неверно работал выбор интерфейса. <strong>Исправление:</strong> выбор интерфейса исправлен.</li>
<li class="">Восстановлена поддержка аутентификации по токену при получении мультимедийных ресурсов.</li>
<li class="">Количество дочерних устройств роли устройства теперь суммируется корректно.</li>
<li class="">Исправлена поддержка поиска по фильтру <code>empty</code> в настраиваемых полях.</li>
<li class="">Исправлено оформление страницы при встроенных фасадах стоек.</li>
<li class="">Исправлено исключение <code>AttributeError</code> при назначении тегов во время массового импорта.</li>
<li class="">Исправлена REST API сериализация заданий под <code>/api/core/background-tasks/</code>.</li>
<li class="">Исправлено исключение <code>IntegrityError</code> при срабатывании дублирующего уведомления.</li>
<li class="">Исправлено исключение <code>ValueError</code> при массовом добавлении розеток к устройствам.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="v436">v4.3.6<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-3#v436" class="hash-link" aria-label="Прямая ссылка на v4.3.6" title="Прямая ссылка на v4.3.6" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="улучшения-1">Улучшения<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-3#%D1%83%D0%BB%D1%83%D1%87%D1%88%D0%B5%D0%BD%D0%B8%D1%8F-1" class="hash-link" aria-label="Прямая ссылка на Улучшения" title="Прямая ссылка на Улучшения" translate="no">​</a></h3>
<ul>
<li class="">Непрочитанные уведомления стали заметнее за счёт улучшенного стиля и позиционирования.</li>
<li class="">При экспорте кабелей в выгрузку включается название цвета.</li>
<li class="">В виджет панели мониторинга RSS-канала добавлен параметр таймаута запроса.</li>
<li class="">Запросы GraphQL можно делиться в виде ссылок.</li>
<li class="">Добавлен тип порта питания C18 для аудиоустройств.</li>
<li class="">Улучшено поле выбора типа объекта при редактировании разрешений.</li>
<li class="">Повышена производительность фильтрации компонентов устройства по месту, локации и стойке.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="исправления-ошибок-1">Исправления ошибок<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-3#%D0%B8%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F-%D0%BE%D1%88%D0%B8%D0%B1%D0%BE%D0%BA-1" class="hash-link" aria-label="Прямая ссылка на Исправления ошибок" title="Прямая ссылка на Исправления ошибок" translate="no">​</a></h3>
<ul>
<li class="">Сокращено число избыточных запросов к базе данных при массовом импорте устройств.</li>
<li class="">При редактировании группы VLAN поддерживаются идентификаторы VLAN в единственном числе в списке.</li>
<li class="">Реализован фильтр GraphQL <code>contains</code> для префиксов IPAM и диапазонов IP-адресов.</li>
<li class="">Обеспечён детерминированный порядок повторяющихся MAC-адресов.</li>
<li class="">Исправлены параметры динамического запроса для поля IP-адрес в форме добавления и редактирования услуги.</li>
<li class="">Исправлены отсутствующие записи журнала изменений для удалённых тегов.</li>
<li class="">Устранены чрезмерные пробелы в виджете панели управления списком сценариев.</li>
<li class=""><code>is_api_request()</code> больше не оценивает тип контента запроса.</li>
<li class="">Параметр поиска экранируется для ссылок экспорта в представлениях списка объектов.</li>
<li class="">Исправлено выделение изменённых строк в данных журнала изменений.</li>
<li class="">В таблицу префиксов добавлен индекс GiST, что заметно сокращает время массового удаления.</li>
<li class="">Исправлена высота кнопок действий списка объектов и сопутствующих элементов.</li>
<li class="">Исправлено исключение <code>TypeError</code> при массовом удалении закладок.</li>
<li class="">Исправлены отсутствующие параметры роли RF при проверке схемы типа устройства.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="v435">v4.3.5<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-3#v435" class="hash-link" aria-label="Прямая ссылка на v4.3.5" title="Прямая ссылка на v4.3.5" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="улучшения-2">Улучшения<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-3#%D1%83%D0%BB%D1%83%D1%87%D1%88%D0%B5%D0%BD%D0%B8%D1%8F-2" class="hash-link" aria-label="Прямая ссылка на Улучшения" title="Прямая ссылка на Улучшения" translate="no">​</a></h3>
<ul>
<li class="">Добавлена опция <code>jinja2.StrictUndefined</code> для рендеринга шаблона конфигурации, чтобы перехватывать неопределённые переменные.</li>
<li class="">При импорте кабелей принимаются названия цветов (например, «красный», «синий») в дополнение к шестнадцатеричным кодам.</li>
<li class="">Импорт кабелей поддерживает указание информации о месте для лучшей организации.</li>
<li class="">Имена устройств на высоте стойки в экспорте SVG автоматически усекаются, чтобы не выходить за границы стойки.</li>
<li class="">Фильтры строковых полей поддерживают поиск по <code>regex</code> и <code>iregex</code> для расширенного сопоставления с образцом.</li>
<li class="">Интернет-ссылки больше не отображаются при работе в изолированных средах.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="исправления-ошибок-2">Исправления ошибок<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-3#%D0%B8%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F-%D0%BE%D1%88%D0%B8%D0%B1%D0%BE%D0%BA-2" class="hash-link" aria-label="Прямая ссылка на Исправления ошибок" title="Прямая ссылка на Исправления ошибок" translate="no">​</a></h3>
<ul>
<li class="">REST API пагинатор выдаёт корректные исключения при попытке разбить на страницы неупорядоченные наборы запросов.</li>
<li class="">Восстановлена функциональность раскрывающегося списка изображений и меток вертикальной стойки.</li>
<li class="">В форму массового редактирования арендатора добавлено отсутствовавшее поле описания.</li>
<li class="">Предотвращены дублирующиеся записи удаления в журнале изменений из-за каскадного удаления.</li>
</ul>
<div class="theme-admonition theme-admonition-note admonition_xJq3 alert alert--secondary"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>Рекомендации для разработчиков плагинов</div><div class="admonitionContent_BuS1"><p>При разбивке на страницы неупорядоченных наборов запросов конечные точки API теперь вызывают явные исключения. Разработчикам плагинов следует проверить наборы представлений API и убедиться, что перед пагинацией задан корректный порядок — через <code>.order_by()</code> в queryset или через <code>ordering</code> в метаклассах модели. Ранее скрытые проблемы с нумерацией страниц в коде плагина теперь приводят к исключению <code>QuerySetNotOrdered</code> и могут потребовать обновлений для совместимости.</p></div></div>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="v434">v4.3.4<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-3#v434" class="hash-link" aria-label="Прямая ссылка на v4.3.4" title="Прямая ссылка на v4.3.4" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="улучшения-3">Улучшения<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-3#%D1%83%D0%BB%D1%83%D1%87%D1%88%D0%B5%D0%BD%D0%B8%D1%8F-3" class="hash-link" aria-label="Прямая ссылка на Улучшения" title="Прямая ссылка на Улучшения" translate="no">​</a></h3>
<ul>
<li class="">Адреса расширенной формы IPv6 сопоставляются в глобальном поиске.</li>
<li class="">Для подъёмов стоек включена отложенная загрузка.</li>
<li class="">Для карт расширения добавлен профиль типа модуля по умолчанию.</li>
<li class="">Поддерживаются пользовательские ссылки динамического меню навигации.</li>
<li class="">В ответе GraphQL для интерфейса экспонируется завершение L2VPN.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="исправления-ошибок-3">Исправления ошибок<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-3#%D0%B8%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F-%D0%BE%D1%88%D0%B8%D0%B1%D0%BE%D0%BA-3" class="hash-link" aria-label="Прямая ссылка на Исправления ошибок" title="Прямая ссылка на Исправления ошибок" translate="no">​</a></h3>
<ul>
<li class="">Пользовательские поля корректно группируются в формах фильтров.</li>
<li class="">Введено исключение <code>InvalidCondition</code>; все оценки недопустимых условий правила событий регистрируются.</li>
<li class="">Массовый импорт типов модулей поддерживает назначение профиля.</li>
<li class="">Введено исключение <code>JobFailed</code> для пометки фоновых заданий как неудачных.</li>
<li class="">Обеспечена уникальность имён ролей устройств и ярлыков.</li>
<li class="">Включён экспорт родительского назначения для рекурсивно вложенных объектов.</li>
<li class="">Удалён рендеринг Markdown из поля описания <code>CustomFieldChoiceSet</code>.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="v433">v4.3.3<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-3#v433" class="hash-link" aria-label="Прямая ссылка на v4.3.3" title="Прямая ссылка на v4.3.3" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="улучшения-4">Улучшения<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-3#%D1%83%D0%BB%D1%83%D1%87%D1%88%D0%B5%D0%BD%D0%B8%D1%8F-4" class="hash-link" aria-label="Прямая ссылка на Улучшения" title="Прямая ссылка на Улучшения" translate="no">​</a></h3>
<ul>
<li class="">При массовом импорте поддерживается связывание тегов с типами объектов.</li>
<li class="">Добавлены пользовательские предпочтения для чередования строк таблицы.</li>
<li class="">В интерфейсе появилась кнопка загрузки результатов выполненного пользовательского сценария.</li>
<li class="">При массовом импорте беспроводных каналов поддерживаются соответствующие интерфейсы родительского устройства.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="исправления-ошибок-4">Исправления ошибок<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-3#%D0%B8%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F-%D0%BE%D1%88%D0%B8%D0%B1%D0%BE%D0%BA-4" class="hash-link" aria-label="Прямая ссылка на Исправления ошибок" title="Прямая ссылка на Исправления ошибок" translate="no">​</a></h3>
<ul>
<li class="">Исправлена поддержка запуска пользовательских сценариев командой управления <code>runscript</code>.</li>
<li class="">Исправлена поддержка <code>schedule_at</code> при вызове пользовательского сценария через REST API.</li>
<li class="">Унифицирован стиль кнопок «подключиться» в пользовательском интерфейсе.</li>
<li class="">Восстановлена фильтрация групповых назначений FHRP по устройству и ВМ в GraphQL API.</li>
<li class="">Атомарные транзакции всегда используют маршрутизацию базы данных.</li>
<li class="">Исправлено предзаполнение выбора устройства и виртуальной машины для кнопки «добавить услугу».</li>
<li class="">Исправлена ссылка на поле при проверке модели беспроводной связи.</li>
<li class="">Исправлено исключение <code>TypeError</code> при создании нового типа профиля модуля без схемы.</li>
<li class="">При компиляции предварительной выборки таблицы игнорируются ссылки на пользовательские поля.</li>
<li class="">Исправлено исключение при передаче нулевого значения в фильтр <code>present_in_vrf</code>.</li>
<li class="">Записи изменений при удалении устройства упорядочиваются в правильном хронологическом порядке.</li>
<li class="">Типы сотовых интерфейсов считаются неподключаемыми.</li>
<li class="">Исправлено исключение <code>DoesNotExist</code> при удалении группы уведомлений со связанным правилом событий.</li>
<li class="">Исправлен массовый импорт услуг с IP-адресами, назначенными группам FHRP.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="v432">v4.3.2<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-3#v432" class="hash-link" aria-label="Прямая ссылка на v4.3.2" title="Прямая ссылка на v4.3.2" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="улучшения-5">Улучшения<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-3#%D1%83%D0%BB%D1%83%D1%87%D1%88%D0%B5%D0%BD%D0%B8%D1%8F-5" class="hash-link" aria-label="Прямая ссылка на Улучше�ния" title="Прямая ссылка на Улучшения" translate="no">​</a></h3>
<ul>
<li class="">В представлении устройства отображается назначенное виртуальное шасси (если есть).</li>
<li class="">Для типов виртуальных цепей добавлен цветной фон.</li>
<li class="">В GraphQL API включена фильтрация IP-адресов по семейству.</li>
<li class="">Введены миграторы изменения объекта.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="исправления-ошибок-5">Исправления ошибок<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-3#%D0%B8%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F-%D0%BE%D1%88%D0%B8%D0%B1%D0%BE%D0%BA-5" class="hash-link" aria-label="Прямая ссылка на Исправления ошибок" title="Прямая ссылка на Исправления ошибок" translate="no">​</a></h3>
<ul>
<li class="">Увеличено максимальное поддерживаемое расстояние для цепей и беспроводных каналов.</li>
<li class="">VLAN того же местоположения, что и кластер виртуальной машины, можно назначать интерфейсам этой ВМ.</li>
<li class="">Исправлен рендеринг карты подключения для портов консольного сервера.</li>
<li class="">Исправлено исключение <code>FieldError</code> при сортировке завершения цепи или туннеля завершающим объектом.</li>
<li class="">Исправлена поддержка включения шаблонов конфигурации, заполняемых через источник данных.</li>
<li class="">Исправлено исключение <code>AttributeError</code> при отрисовке шаблона конфигурации без вывода.</li>
<li class="">Восстановлена GraphQL API-фильтрация для назначенных IP-адресов.</li>
<li class="">Восстановлена возможность изменять область действия префикса через REST API.</li>
<li class="">Фильтр <code>occupied</code> включает интерфейсы, завершающие беспроводное соединение.</li>
<li class="">Исправлено исключение <code>AttributeError</code> при сортировке истории изменений в режиме просмотра пользователя.</li>
<li class="">Исправлено исключение <code>FieldError</code> при сортировке окончаний туннеля по арендаторам.</li>
<li class="">В окне просмотра учётной записи провайдера отображается описание.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="v431">v4.3.1<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-3#v431" class="hash-link" aria-label="Прямая ссылка на v4.3.1" title="Прямая ссылка на v4.3.1" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="улучшения-6">Улучшения<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-3#%D1%83%D0%BB%D1%83%D1%87%D1%88%D0%B5%D0%BD%D0%B8%D1%8F-6" class="hash-link" aria-label="Прямая ссылка на Улучшения" title="Прямая ссылка на Улучшения" translate="no">​</a></h3>
<ul>
<li class="">Включён глобальный поиск по тегам.</li>
<li class="">При вызове <code>Job.enqueue()</code> можно указывать имя очереди.</li>
<li class="">Добавлен тип интерфейса 1000BASE-SX.</li>
<li class="">Добавлены предустановленные варианты скорости интерфейса для 2,5 и 5 Гбит/с.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="исправления-ошибок-6">Исправления ошибок<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-3#%D0%B8%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F-%D0%BE%D1%88%D0%B8%D0%B1%D0%BE%D0%BA-6" class="hash-link" aria-label="Прямая ссылка на Исправления ошибок" title="Прямая ссылка на Исправления ошибок" translate="no">​</a></h3>
<ul>
<li class="">Исправлена косметическая проблема в трассах кабеля, заканчивающихся сетью провайдера.</li>
<li class="">Улучшена производительность запросов REST API для префиксов и IP-адресов.</li>
<li class="">Исправлены неверные типы объектов GraphQL.</li>
<li class="">Исправлена конфигурация таблицы после применения сохранённой конфигурации.</li>
<li class="">Исправлено исключение <code>FieldDoesNotExist</code>, когда результаты глобального поиска включают контакт.</li>
<li class="">Исправлен выбор столбцов для таблиц дочерних объектов.</li>
<li class="">Исправлена синхронизация пользовательских скриптов с удалённым источником данных.</li>
<li class="">Через REST API можно обнулять VLAN <code>qinq_role</code>.</li>
<li class="">Исправлен тип перечисления для <code>IPRangeFilter</code> в GraphQL API.</li>
<li class="">На странице ошибки сервера обновлена минимальная поддерживаемая версия PostgreSQL.</li>
<li class="">При миграции данных используется корректное соединение с базой данных.</li>
<li class="">Исправлено ведение журнала изменений для назначений групп контактов.</li>
<li class="">Скрыт раскрывающийся список кнопок для таблиц без поддержки сохранённых конфигураций.</li>
<li class="">Исправлено массовое редактирование предметов инвентаря с экрана устройства.</li>
<li class="">В пользовательском интерфейсе снова можно очистить назначенную область префикса.</li>
<li class="">Исправлено отображение столбцов устройств в таблице контекстов виртуальных устройств.</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="v430">v4.3.0<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-3#v430" class="hash-link" aria-label="Прямая ссылка на v4.3.0" title="Прямая ссылка на v4.3.0" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="критические-изменения">Критические изменения<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-3#%D0%BA%D1%80%D0%B8%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5-%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F" class="hash-link" aria-label="Прямая ссылка на Критические изменения" title="Прямая ссылка на Критические изменения" translate="no">​</a></h3>
<ul>
<li class="">API GraphQL теперь использует расширенный синтаксис фильтрации: логические операторы И/ИЛИ и поиск по настраиваемым полям.</li>
<li class="">PostgreSQL 13 больше не поддерживается. Для ОдинХаб v4.3 требуется PostgreSQL 14.0 или новее.</li>
<li class="">Параметр конфигурации <code>ALLOW_TOKEN_RETRIEVAL</code> по умолчанию имеет значение <code>False</code>.</li>
<li class="">Внешние ключи <code>device</code> и <code>virtual_machine</code> в модели «Служба» заменены общим отношением <code>parent</code> для поддержки назначения услуг группам FHRP.</li>
<li class="">Внешний ключ <code>group</code> в модели «Контакт» заменён полем «многие-ко-многим» <code>groups</code>.</li>
<li class=""><code>django-storages</code> стал обязательной зависимостью (устанавливается автоматически при обновлении).</li>
<li class=""><code>PluginTemplateExtension</code> больше не поддерживает регистрацию через единственный атрибут <code>model</code> — используйте <code>models</code>.</li>
<li class="">Устаревшая функциональность поэтапных изменений удалена.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="новые-возможности">Новые возможности<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-3#%D0%BD%D0%BE%D0%B2%D1%8B%D0%B5-%D0%B2%D0%BE%D0%B7%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%B8" class="hash-link" aria-label="Прямая ссылка на Новые возможности" title="Прямая ссылка на Новые возможности" translate="no">​</a></h3>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="профили-типов-модулей-и-пользовательские-атрибуты">Профили типов модулей и пользовательские атрибуты<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-3#%D0%BF%D1%80%D0%BE%D1%84%D0%B8%D0%BB%D0%B8-%D1%82%D0%B8%D0%BF%D0%BE%D0%B2-%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D0%B5%D0%B9-%D0%B8-%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D0%BA%D0%B8%D0%B5-%D0%B0%D1%82%D1%80%D0%B8%D0%B1%D1%83%D1%82%D1%8B" class="hash-link" aria-label="Прямая ссылка на Профили типов модулей и пользовательские атрибуты" title="Прямая ссылка на Профили типов модулей и пользовательские атрибуты" translate="no">​</a></h4>
<p>Новая модель <a class="" href="https://xn--80achqzd6c.xn--p1ai/models/dcim/moduletypeprofile.md">module type profile</a> позволяет объявлять профили для типов модулей и задавать собственные атрибуты в соответствии с функциональной ролью. Например, профиль модуля ЦП может включать архитектуру и тактовую частоту; профиль жёсткого диска — тип и скорость.</p>
<p>Атрибуты объявляются в профиле через <a href="https://json-schema.org/" target="_blank" rel="noopener noreferrer" class="">JSON schema</a>: строки, целые числа, десятичные, логические значения или поля выбора. Они отображаются отдельными полями формы при изменении типа модуля. Несколько примерных профилей включены по умолчанию; их можно изменить или удалить.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="многоразовые-конфигурации-таблиц">Многоразовые конфигурации таблиц<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-3#%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D1%8B%D0%B5-%D0%BA%D0%BE%D0%BD%D1%84%D0%B8%D0%B3%D1%83%D1%80%D0%B0%D1%86%D0%B8%D0%B8-%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86" class="hash-link" aria-label="Прямая ссылка на Многоразовые конфигурации таблиц" title="Прямая ссылка на Многоразовые конфигурации таблиц" translate="no">​</a></h4>
<p>После настройки столбцов и порядка таблицы объектов в интерфейсе конфигурацию можно сохранить и использовать повторно. Как и сохранённые фильтры, конфигурации таблиц можно делиться с другими пользователями, чтобы копировать макеты под конкретные задачи.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="возможность-рассматривать-диапа�зоны-ip-адресов-как-полностью-заполненные">Возможность рассматривать диапазоны IP-адресов как полностью заполненные<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-3#%D0%B2%D0%BE%D0%B7%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D1%8C-%D1%80%D0%B0%D1%81%D1%81%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D0%B2%D0%B0%D1%82%D1%8C-%D0%B4%D0%B8%D0%B0%D0%BF%D0%B0%D0%B7%D0%BE%D0%BD%D1%8B-ip-%D0%B0%D0%B4%D1%80%D0%B5%D1%81%D0%BE%D0%B2-%D0%BA%D0%B0%D0%BA-%D0%BF%D0%BE%D0%BB%D0%BD%D0%BE%D1%81%D1%82%D1%8C%D1%8E-%D0%B7%D0%B0%D0%BF%D0%BE%D0%BB%D0%BD%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5" class="hash-link" aria-label="Прямая ссылка на Возможность рассматривать диапазоны IP-адресов как полностью заполненные" title="Прямая ссылка на Возможность рассматривать диапазоны IP-адресов как полностью заполненные" translate="no">​</a></h4>
<p>В модель <code>IPRange</code> добавлено логическое поле <code>mark_populated</code>. При значении <code>true</code> ОдинХаб считает диапазон полностью занятым и не позволяет создавать отдельные IP-адреса внутри него. Например, при передаче диапазона внешнему DHCP-серверу диапазон можно учитывать как непрозрачный блок для планирования и распределения.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="иерархические-роли-устройств">Иерархические роли устройств<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-3#%D0%B8%D0%B5%D1%80%D0%B0%D1%80%D1%85%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5-%D1%80%D0%BE%D0%BB%D0%B8-%D1%83%D1%81%D1%82%D1%80%D0%BE%D0%B9%D1%81%D1%82%D0%B2" class="hash-link" aria-label="Прямая ссылка на Иерархические роли устройств" title="Прямая ссылка на Иерархические роли устройств" translate="no">​</a></h4>
<p>Роли устройств можно выстраивать иерархически: одна роль — родитель для одной или нескольких дочерних. Можно задать общую роль «Сервер» с дочерними «Сервер приложений» и «Сервер базы данных»; устройству назначается любая из этих ролей.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="периодическая-синхронизация-источников-данных">Периодическая синхронизация источников данных<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-3#%D0%BF%D0%B5%D1%80%D0%B8%D0%BE%D0%B4%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F-%D1%81%D0%B8%D0%BD%D1%85%D1%80%D0%BE%D0%BD%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F-%D0%B8%D1%81%D1%82%D0%BE%D1%87%D0%BD%D0%B8%D0%BA%D0%BE%D0%B2-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85" class="hash-link" aria-label="Прямая ссылка на Периодическая синхронизация источников данных" title="Прямая ссылка на Периодическая синхронизация источников данных" translate="no">​</a></h4>
<p>Источники данных настраиваются на автоматическую синхронизацию по интервалу в поле <code>sync_interval</code>. Дополнительная настройка системы не требуется: фоновые задания планируются рабочим процессом RQ.</p>
<h4 class="anchor anchorTargetStickyNavbar_Vzrq" id="маршрутизация-прокси">Маршрутизация прокси<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-3#%D0%BC%D0%B0%D1%80%D1%88%D1%80%D1%83%D1%82%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F-%D0%BF%D1%80%D0%BE%D0%BA%D1%81%D0%B8" class="hash-link" aria-label="Прямая ссылка на Маршрутизация прокси" title="Прямая ссылка на Маршрутизация прокси" translate="no">​</a></h4>
<p>Через параметр конфигурации <code>PROXY_ROUTERS</code> можно объявить один или несколько прокси-маршрутизаторов и управлять прокси для разных исходящих соединений — в зависимости от типа трафика или назначения.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="�улучшения-7">Улучшения<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-3#%D1%83%D0%BB%D1%83%D1%87%D1%88%D0%B5%D0%BD%D0%B8%D1%8F-7" class="hash-link" aria-label="Прямая ссылка на Улучшения" title="Прямая ссылка на Улучшения" translate="no">​</a></h3>
<ul>
<li class="">В API GraphQL — расширенная фильтрация запросов, в том числе по настраиваемым полям.</li>
<li class="">Услуги можно назначать группам FHRP.</li>
<li class="">Добавлен параметр конфигурации <code>LOGIN_FORM_HIDDEN</code>.</li>
<li class="">Реализована поддержка нумерации страниц в API GraphQL.</li>
<li class="">Контакт может относиться к нескольким группам контактов.</li>
<li class="">В модель шаблона экспорта добавлено поле <code>file_name</code>.</li>
<li class="">Поле <code>comments</code> добавлено ко всем моделям вложенных групп (Region, SiteGroup, Location, ContactGroup, TenantGroup, WirelessLANGroup).</li>
<li class="">В модель L2VPN добавлено поле <code>status</code>.</li>
<li class="">В шаблонах экспорта можно объявлять параметры среды Jinja (как в шаблонах конфигурации).</li>
<li class="">Добавлена конечная точка REST API для помеченных объектов: <code>/api/extras/tagged-objects/</code>.</li>
<li class="">В модель тега добавлено поле <code>weight</code> для влияния на порядок.</li>
<li class="">В модель группы VLAN добавлено поле <code>tenant</code>.</li>
<li class="">В модель розетки добавлено поле <code>status</code>.</li>
<li class="">В модели стойки и типа стойки добавлено поле <code>outer_height</code>.</li>
<li class="">Несовместимые плагины больше не блокируют запуск ОдинХаб.</li>
<li class="">Параметры конфигурации <code>DATABASES</code> и <code>DATABASE_ROUTERS</code> позволяют задавать подключения к внешним базам данных (например, для плагинов).</li>
<li class="">Включена фильтрация применимых моделей по идентификатору тега.</li>
<li class="">Для стойки, устройства и модуля можно задавать направление воздушного потока отдельно.</li>
<li class="">Пользовательские скрипты можно хранить в удалённом хранилище.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="плагины">Плагины<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-3#%D0%BF%D0%BB%D0%B0%D0%B3%D0%B8%D0%BD%D1%8B" class="hash-link" aria-label="Прямая ссылка на Плагины" title="Прямая ссылка на Плагины" translate="no">​</a></h3>
<ul>
<li class="">Плагины могут вставлять контент в блок HTML <code>&lt;head&gt;</code> через метод <code>plugin_head()</code> в <code>PluginTemplateExtension</code>.</li>
<li class="">Расширение <code>ViewTab</code> поддерживает аргумент <code>visible</code> для управления отрисовкой вкладок.</li>
<li class="">В <code>PluginConfig</code> добавлен атрибут <code>release_track</code>.</li>
<li class="">Добавлена поддержка плагинов для <code>ContactsMixin</code>.</li>
<li class="">Установленные плагины можно исключать из списка плагинов.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="другие-изменения">Другие изменения<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-3#%D0%B4%D1%80%D1%83%D0%B3%D0%B8%D0%B5-%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F" class="hash-link" aria-label="�Прямая ссылка на Другие изменения" title="Прямая ссылка на Другие изменения" translate="no">​</a></h3>
<ul>
<li class="">Удалена устаревшая поэтапная функциональность в пользу плагина netbox-branching.</li>
<li class="">Исключена поддержка единственного атрибута <code>model</code> в <code>PluginTemplateExtension</code> — используйте <code>models</code>.</li>
<li class="">Удалены лишние индексы PostgreSQL.</li>
<li class="">Библиотека HTMX обновлена до версии 2.0.</li>
<li class="">Рабочие плагины записываются в реестр приложения.</li>
<li class="">CSS-тема Tabler обновлена до версии 1.2.</li>
<li class="">Django обновлён до версии 5.2.</li>
<li class="">Значение по умолчанию для <code>ALLOW_TOKEN_RETRIEVAL</code> изменено на <code>False</code>.</li>
<li class="">Зависимости сжатой миграции изменены для исправления работы команды управления <code>sqlmigrate</code>.</li>
<li class="">PostgreSQL 13 больше не поддерживается.</li>
<li class="">Использование предметов инвентаря устарело в пользу модулей; предметы инвентаря и роли могут быть удалены в будущей версии ОдинХаб.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="rest-api-изменения">REST API Изменения<a href="https://xn--80achqzd6c.xn--p1ai/blog/release-4-3#rest-api-%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F" class="hash-link" aria-label="Прямая ссылка на REST API Изменения" title="Прямая ссылка на REST API Изменения" translate="no">​</a></h3>
<ul>
<li class="">Добавлены следующие конечные точки:<!-- -->
<ul>
<li class=""><code>/api/extras/table-configs/</code></li>
<li class=""><code>/api/extras/tagged-objects/</code></li>
<li class=""><code>/api/dcim/module-type-profiles/</code></li>
</ul>
</li>
<li class="">core.DataSource<!-- -->
<ul>
<li class="">Добавлено необязательное поле <code>sync_interval</code>.</li>
</ul>
</li>
<li class="">dcim.DeviceRole<!-- -->
<ul>
<li class="">Добавлено необязательное рекурсивное поле внешнего ключа <code>parent</code> для иерархического порядка.</li>
<li class="">Добавлено поле <code>comments</code>.</li>
</ul>
</li>
<li class="">dcim.Location<!-- -->
<ul>
<li class="">Добавлено поле <code>comments</code>.</li>
</ul>
</li>
<li class="">dcim.ModuleType<!-- -->
<ul>
<li class="">Добавлен внешний ключ <code>profile</code> на новую модель ModuleTypeProfile.</li>
</ul>
</li>
<li class="">dcim.PowerOutlet<!-- -->
<ul>
<li class="">Добавлено поле <code>status</code>.</li>
</ul>
</li>
<li class="">dcim.Rack<!-- -->
<ul>
<li class="">Добавлено необязательное поле <code>outer_height</code>.</li>
</ul>
</li>
<li class="">dcim.RackType<!-- -->
<ul>
<li class="">Добавлено необязательное поле <code>outer_height</code>.</li>
</ul>
</li>
<li class="">dcim.Region<!-- -->
<ul>
<li class="">Добавлено поле <code>comments</code>.</li>
</ul>
</li>
<li class="">dcim.SiteGroup<!-- -->
<ul>
<li class="">Добавлено поле <code>comments</code>.</li>
</ul>
</li>
<li class="">extras.ConfigTemplate<!-- -->
<ul>
<li class="">Добавлены необязательные поля <code>mime_type</code>, <code>file_name</code>, <code>file_extension</code> и <code>as_attachment</code>.</li>
</ul>
</li>
<li class="">extras.ExportTemplate<!-- -->
<ul>
<li class="">Добавлены необязательные поля <code>file_name</code> и <code>environment_params</code> (JSON).</li>
</ul>
</li>
<li class="">extras.Tag<!-- -->
<ul>
<li class="">Добавлено поле <code>weight</code>.</li>
</ul>
</li>
<li class="">ipam.IPRange<!-- -->
<ul>
<li class="">Добавлено логическое поле <code>mark_populated</code>.</li>
</ul>
</li>
<li class="">ipam.L2VPN<!-- -->
<ul>
<li class="">Добавлено поле <code>status</code>.</li>
</ul>
</li>
<li class="">ipam.Service<!-- -->
<ul>
<li class="">Удалены поля внешнего ключа <code>device</code> и <code>virtual_machine</code>.</li>
<li class="">Добавлены поля <code>parent_object_type</code>, <code>parent_object_id</code> и (только для чтения) <code>parent</code>.</li>
</ul>
</li>
<li class="">ipam.VLANGroup<!-- -->
<ul>
<li class="">Добавлено необязательное поле внешнего ключа <code>tenant</code>.</li>
</ul>
</li>
<li class="">tenancy.Contact<!-- -->
<ul>
<li class="">Удалено поле внешнего ключа <code>group</code>.</li>
<li class="">Добавлено поле «многие-ко-многим» <code>groups</code>.</li>
</ul>
</li>
<li class="">tenancy.ContactGroup<!-- -->
<ul>
<li class="">Добавлено поле <code>comments</code>.</li>
</ul>
</li>
<li class="">tenancy.TenantGroup<!-- -->
<ul>
<li class="">Добавлено поле <code>comments</code>.</li>
</ul>
</li>
<li class="">wireless.WirelessLANGroup<!-- -->
<ul>
<li class="">Добавлено поле <code>comments</code>.</li>
</ul>
</li>
</ul>]]></content>
        <category label="release" term="release"/>
        <category label="news" term="news"/>
    </entry>
</feed>