Управление CurrentConfig через nbshell
Опытные пользователи Netbox наверняка сталкивались с таким мощным инструментом как Netbox Shell (построенный на базе Django Shell и представляющий собой интерпретатор iPython с расширенной функциональностью).
Управление в интерактивном режиме
Чтобы запустить nbshell необходимо открыть в командной строке папку с дистрибутивом приложения и, активировав virtual environment, выполнить команду python netbox/manage.py nbshell
Что бы получить текущую ревизию конфигурации приложения (которая и содержит динамически конфигурируемые параметры) нам понадобится ID текущей (активной) конфигурации, ее можно получить из кэша приложения:
from django.core.cache import cache activeRevision = ConfigRevision.objects.get(pk=cache.get('config_version'))
Объект activeRevision будет содержать объект типа ConfigRevision, являющийся активной конфигурацией в данный момент ("Curren configuration"). Объект простой, в поле data содержит словарь с динамически конфигурируемыми параметрами (список всех параметров и их значение можно подсмотреть в официальной документации). Однако просто изменить текущую конфигурацию нельзя, конфигурация будет применена только к новой ревизии конфигурации, а значит нам нужно ее создать.
Однако создавать мы ее будем не с нуля, а на базе предыдущей активной конфигурации.
Для примера мы включим параметр MAINTENANCE_MODE, переведя таким образом приложение в режим обслуживания.
# Хорошим тоном будет записать смысл новой ревизии конфига в комментарий # Заполняем все параметры из текущей конфигурации newRevsion = ConfigRevision(comment='Enable MM', data=activeRevision.data) # Изменяем нужный нам параметр newRevsion.data['MAINTENANCE_MODE'] = True # Валидируем нашу модель конфигурации на соответствие модели данных, # заложенных разработчиком newRevsion.full_clean() # Сохраняем новую конфигурацию (она автоматически станет активной) newRevsion.save()
Управление в режиме скрипта
Данный код можно склеить в одну строку, разделив строки точкой с запятой ; и передать одним аргументом для nbshell.
python netbox/manage.py nbshell -c "from django.core.cache import cache; activeRevision = ConfigRevision.objects.get(pk=cache.get('config_version')); newRevsion = ConfigRevision(comment='Enable MM', data=activeRevision.data); newRevsion.data['MAINTENANCE_MODE'] = True; newRevsion.full_clean(); newRevsion.save();"
Для мультинодовых конфигураций
не забывайте что проделывать манипуляции с конфигурациями придется для каждой ноды отдельно.
UPD: Работа с существующей конфигурацией
Если же хочется изменить какую-то текущую конфигурацию или просто сделать ее активной (например, откатиться на предыдущую), то сделать это можно через встроенный метод класса ConfigRevision - activate()
revision = ConfigRevision.object.get(pk=revisionNumber) revision.activate()