Удаление плагина
Внимание
Приведённые ниже инструкции описывают общий процесс удаления плагина InfraVision. Однако каждый плагин отличается и может требовать дополнительных задач или изменений в описанных ниже шагах. Всегда консультируйтесь с документацией конкретного плагина перед попыткой его удаления.
Отключение плагина
Отключите плагин, удалив его из списка PLUGINS в configuration.py.
Удаление конфигурации
Удалите запись плагина (если есть) в словаре PLUGINS_CONFIG в configuration.py.
Совет
Если есть вероятность, что вы можете переустановить плагин, рассмотрите возможность закомментировать любые параметры конфигурации вместо их удаления.
Переиндексация записей поиска
Выполните команду управления reindex для переиндексации глобального поискового движка. Это удалит все устаревшие записи, относящиеся к объектам, предоставляемым плагином.
$ cd /opt/netbox/netbox/
$ source /opt/netbox/venv/bin/activate
(venv) $ python3 manage.py reindex
Удаление Python-пакета
Используйте pip для удаления установленного плагина:
$ source /opt/netbox/venv/bin/activate
(venv) $ pip uninstall <package>
Перезапуск службы WSGI
Перезапустите службу WSGI:
# sudo systemctl restart netbox
Удаление таблиц базы данных
Примечание
Этот шаг необходим только для плагинов, которые создали одну или несколько таблиц базы данных (обычно через введение новых моделей). Проверьте документацию вашего плагина, если не уверены.
Войдите в оболочку базы данных PostgreSQL (manage.py dbshell), чтобы определить, создал ли плагин какие-либо таблицы SQL. Замените pluginname в примере ниже на имя удаляемого плагина. (Вы также можете выполнить команду \dt без шаблона, чтобы вывести список всех таблиц.)
netbox=> \dt pluginname_*
List of relations
List of relations
Schema | Name | Type | Owner
--------+----------------+-------+--------
public | pluginname_foo | table | netbox
public | pluginname_bar | table | netbox
(2 rows)
Внимание
Будьте крайне осторожны при удалении таблиц. Пользователям настоятельно рекомендуется выполнить резервное копирование базы данных непосредственно перед выполнением этих действий.
Удалите каждую из перечисленных таблиц, чтобы убрать её из базы данных:
netbox=> DROP TABLE pluginname_foo;
DROP TABLE
netbox=> DROP TABLE pluginname_bar;
DROP TABLE
Удаление записей миграций Django
После удаления таблиц, созданных плагином, миграции, которые создали эти таблицы, также необходимо удалить из истории миграций Django. Это необходимо для того, чтобы можно было переустановить плагин позже. Если бы история миграций осталась на месте, Django пропустил бы все миграции, которые были выполнены в ходе предыдущей установки, что привело бы к сбою плагина после переустановки.
netbox=> SELECT * FROM django_migrations WHERE app='pluginname';
id | app | name | applied
-----+------------+------------------------+-------------------------------
492 | pluginname | 0001_initial | 2023-12-21 11:59:59.325995+00
493 | pluginname | 0002_add_foo | 2023-12-21 11:59:59.330026+00
netbox=> DELETE FROM django_migrations WHERE app='pluginname';
Внимание
Будьте крайне осторожны при изменении системных таблиц Django. Пользователям настоятельно рекомендуется выполнить резервное копирование базы данных непосредственно перед выполнением этих действий.
Очистка типов контента и разрешений
После удаления плагина и его таблиц базы данных вы можете обнаружить, что ссылки на типы объектов (ContentTypes), созданные плагином, всё ещё отображаются в разделе управления разрешениями (например, при редактировании разрешений в интерфейсе InfraVision).
Это происходит потому, что таблица django_content_type сохраняет записи для моделей, которые плагин зарегистрировал в Django.
Внимание
Пожалуйста, будьте осторожны при удалении ContentTypes. Настоятельно рекомендуется создать резервную копию базы данных перед внесением этих изменений.
Выявление устаревших типов контента:
Откройте оболочку Django для проверки оставшихся записей ContentType, связанных с удалённым плагином.
Обычно app_label типа контента соответствует имени плагина.
$ cd /opt/netbox/
$ source /opt/netbox/venv/bin/activate
(venv) $ python3 netbox/manage.py nbshell
Затем в оболочке:
from django.contrib.contenttypes.models import ContentType
# Замените 'pluginname' на фактическое имя вашего плагина
stale_types = ContentType.objects.filter(app_label="pluginname")
for ct in stale_types:
print(ct)
### ^^^ Они будут удалены, убедитесь, что это правильно
Внимание
Внимательно просмотрите вывод и убедитесь, что каждый указанный тип контента связан с удалённым плагином.
Удаление устаревших типов контента и связанных разрешений:
Затем проверьте наличие разрешений, связанных с этими типами контента:
from django.contrib.auth.models import Permission
for ct in stale_types:
perms = Permission.objects.filter(content_type=ct)
print(list(perms))
Если есть связанные разрешения, вы можете безопасно их удалить:
for ct in stale_types:
Permission.objects.filter(content_type=ct).delete()
После удаления связанных разрешений удалите записи типов контента:
stale_types.delete()
Перезапуск InfraVision:
После внесения этих изменений перезапустите службу InfraVision, чтобы убедиться, что все изменения отражены.
sudo systemctl restart netbox