mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
Closes #3408: Remove WEBHOOKS_ENABLE configuration setting
This commit is contained in:
@ -78,3 +78,7 @@ py-gfm
|
|||||||
# Extensive cryptographic library (fork of pycrypto)
|
# Extensive cryptographic library (fork of pycrypto)
|
||||||
# https://github.com/Legrandin/pycryptodome
|
# https://github.com/Legrandin/pycryptodome
|
||||||
pycryptodome
|
pycryptodome
|
||||||
|
|
||||||
|
# In-memory key/value store used for caching and queuing
|
||||||
|
# https://github.com/andymccurdy/redis-py
|
||||||
|
redis
|
||||||
|
@ -301,14 +301,6 @@ The time zone NetBox will use when dealing with dates and times. It is recommend
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## WEBHOOKS_ENABLED
|
|
||||||
|
|
||||||
Default: False
|
|
||||||
|
|
||||||
Enable this option to run the webhook backend. See the docs section on the webhook backend [here](../../additional-features/webhooks/) for more information on setup and use.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Date and Time Formatting
|
## Date and Time Formatting
|
||||||
|
|
||||||
You may define custom formatting for date and times. For detailed instructions on writing format strings, please see [the Django documentation](https://docs.djangoproject.com/en/stable/ref/templates/builtins/#date).
|
You may define custom formatting for date and times. For detailed instructions on writing format strings, please see [the Django documentation](https://docs.djangoproject.com/en/stable/ref/templates/builtins/#date).
|
||||||
|
@ -199,18 +199,13 @@ timeout=120
|
|||||||
errorlog='/opt/netbox/netbox.log'
|
errorlog='/opt/netbox/netbox.log'
|
||||||
```
|
```
|
||||||
|
|
||||||
Then, restart the systemd daemon service to detect the netbox service and start the netbox service:
|
Finally, start the `netbox` and `netbox-rq` services and enable them to initiate at boot time:
|
||||||
|
|
||||||
```no-highlight
|
```no-highlight
|
||||||
# systemctl daemon-reload
|
# systemctl daemon-reload
|
||||||
# systemctl start netbox.service
|
# systemctl start netbox.service
|
||||||
# systemctl enable netbox.service
|
|
||||||
```
|
|
||||||
|
|
||||||
If using webhooks, also start the Redis worker:
|
|
||||||
|
|
||||||
```no-highlight
|
|
||||||
# systemctl start netbox-rq.service
|
# systemctl start netbox-rq.service
|
||||||
|
# systemctl enable netbox.service
|
||||||
# systemctl enable netbox-rq.service
|
# systemctl enable netbox-rq.service
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -89,17 +89,12 @@ timeout=120
|
|||||||
errorlog='/opt/netbox/netbox.log'
|
errorlog='/opt/netbox/netbox.log'
|
||||||
```
|
```
|
||||||
|
|
||||||
Then, restart the systemd daemon service to detect the netbox service and start the netbox service:
|
Finally, start the `netbox` and `netbox-rq` services and enable them to initiate at boot time:
|
||||||
|
|
||||||
```no-highlight
|
```no-highlight
|
||||||
# systemctl daemon-reload
|
# systemctl daemon-reload
|
||||||
# systemctl start netbox.service
|
# systemctl start netbox.service
|
||||||
# systemctl enable netbox.service
|
|
||||||
```
|
|
||||||
|
|
||||||
If using webhooks, also start the Redis worker:
|
|
||||||
|
|
||||||
```no-highlight
|
|
||||||
# systemctl start netbox-rq.service
|
# systemctl start netbox-rq.service
|
||||||
|
# systemctl enable netbox.service
|
||||||
# systemctl enable netbox-rq.service
|
# systemctl enable netbox-rq.service
|
||||||
```
|
```
|
||||||
|
@ -84,17 +84,12 @@ This script:
|
|||||||
|
|
||||||
# Restart the WSGI Service
|
# Restart the WSGI Service
|
||||||
|
|
||||||
Finally, restart the WSGI service to run the new code. If you followed this guide for the initial installation, this is done using `systemctl:
|
Finally, restart the WSGI services to run the new code. If you followed this guide for the initial installation, this is done using `systemctl:
|
||||||
|
|
||||||
```no-highlight
|
```no-highlight
|
||||||
# sudo systemctl restart netbox
|
# sudo systemctl restart netbox
|
||||||
```
|
|
||||||
|
|
||||||
If using webhooks, also restart the Redis worker:
|
|
||||||
|
|
||||||
```no-highlight
|
|
||||||
# sudo systemctl restart netbox-rqworker
|
# sudo systemctl restart netbox-rqworker
|
||||||
```
|
```
|
||||||
|
|
||||||
!!! note
|
!!! note
|
||||||
It's possible you are still using supervisord instead of the linux native systemd. If you are still using supervisord you can restart the services by either restarting supervisord or by using supervisorctl to restart netbox.
|
It's possible you are still using supervisord instead of the linux native systemd. If you are still using supervisord you can restart the services by either restarting supervisord or by using supervisorctl to restart netbox.
|
||||||
|
@ -88,6 +88,13 @@ Note that `CACHE_DATABASE` has been removed and the connection settings have bee
|
|||||||
`caching`. This allows the user to make use of separate Redis instances and/or databases if desired. Full connection
|
`caching`. This allows the user to make use of separate Redis instances and/or databases if desired. Full connection
|
||||||
details are required in both sections, even if they are the same.
|
details are required in both sections, even if they are the same.
|
||||||
|
|
||||||
|
### WEBHOOKS_ENABLED Configuration Setting Removed ([#3408](https://github.com/netbox-community/netbox/issues/3408))
|
||||||
|
|
||||||
|
As `django-rq` is now a required library, NetBox assumes that the RQ worker process is running. The installation and
|
||||||
|
upgrade documentation has been updated to reflect this, and the `WEBHOOKS_ENABLED` configuration parameter is no longer
|
||||||
|
used. Please ensure that both the NetBox WSGI service and the RQ worker process are running on all production
|
||||||
|
installations.
|
||||||
|
|
||||||
### API Choice Fields Now Use String Values ([#3569](https://github.com/netbox-community/netbox/issues/3569))
|
### API Choice Fields Now Use String Values ([#3569](https://github.com/netbox-community/netbox/issues/3569))
|
||||||
|
|
||||||
NetBox's REST API presents fields which reference a particular choice as a dictionary with two keys: `value` and
|
NetBox's REST API presents fields which reference a particular choice as a dictionary with two keys: `value` and
|
||||||
|
@ -1,15 +1 @@
|
|||||||
from django.conf import settings
|
|
||||||
from django.core.exceptions import ImproperlyConfigured
|
|
||||||
|
|
||||||
|
|
||||||
default_app_config = 'extras.apps.ExtrasConfig'
|
default_app_config = 'extras.apps.ExtrasConfig'
|
||||||
|
|
||||||
# check that django-rq is installed and we can connect to redis
|
|
||||||
if settings.WEBHOOKS_ENABLED:
|
|
||||||
try:
|
|
||||||
import django_rq
|
|
||||||
except ImportError:
|
|
||||||
raise ImproperlyConfigured(
|
|
||||||
"django-rq is not installed! You must install this package per "
|
|
||||||
"the documentation to use the webhook backend."
|
|
||||||
)
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
from django.apps import AppConfig
|
from django.apps import AppConfig
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.core.exceptions import ImproperlyConfigured
|
from django.core.exceptions import ImproperlyConfigured
|
||||||
|
import redis
|
||||||
|
|
||||||
|
|
||||||
class ExtrasConfig(AppConfig):
|
class ExtrasConfig(AppConfig):
|
||||||
@ -10,26 +11,18 @@ class ExtrasConfig(AppConfig):
|
|||||||
|
|
||||||
import extras.signals
|
import extras.signals
|
||||||
|
|
||||||
# Check that we can connect to the configured Redis database if webhooks are enabled.
|
# Check that we can connect to the configured Redis database.
|
||||||
if settings.WEBHOOKS_ENABLED:
|
try:
|
||||||
try:
|
rs = redis.Redis(
|
||||||
import redis
|
host=settings.WEBHOOKS_REDIS_HOST,
|
||||||
except ImportError:
|
port=settings.WEBHOOKS_REDIS_PORT,
|
||||||
raise ImproperlyConfigured(
|
db=settings.WEBHOOKS_REDIS_DATABASE,
|
||||||
"WEBHOOKS_ENABLED is True but the redis Python package is not installed. (Try 'pip install "
|
password=settings.WEBHOOKS_REDIS_PASSWORD or None,
|
||||||
"redis'.)"
|
ssl=settings.WEBHOOKS_REDIS_SSL,
|
||||||
)
|
)
|
||||||
try:
|
rs.ping()
|
||||||
rs = redis.Redis(
|
except redis.exceptions.ConnectionError:
|
||||||
host=settings.WEBHOOKS_REDIS_HOST,
|
raise ImproperlyConfigured(
|
||||||
port=settings.WEBHOOKS_REDIS_PORT,
|
"Unable to connect to the Redis database. Check that the Redis configuration has been defined in "
|
||||||
db=settings.WEBHOOKS_REDIS_DATABASE,
|
"configuration.py."
|
||||||
password=settings.WEBHOOKS_REDIS_PASSWORD or None,
|
)
|
||||||
ssl=settings.WEBHOOKS_REDIS_SSL,
|
|
||||||
)
|
|
||||||
rs.ping()
|
|
||||||
except redis.exceptions.ConnectionError:
|
|
||||||
raise ImproperlyConfigured(
|
|
||||||
"Unable to connect to the Redis database. Check that the Redis configuration has been defined in "
|
|
||||||
"configuration.py."
|
|
||||||
)
|
|
||||||
|
@ -14,7 +14,7 @@ def enqueue_webhooks(instance, user, request_id, action):
|
|||||||
Find Webhook(s) assigned to this instance + action and enqueue them
|
Find Webhook(s) assigned to this instance + action and enqueue them
|
||||||
to be processed
|
to be processed
|
||||||
"""
|
"""
|
||||||
if not settings.WEBHOOKS_ENABLED or instance._meta.label.lower() not in WEBHOOK_MODELS:
|
if instance._meta.label.lower() not in WEBHOOK_MODELS:
|
||||||
return
|
return
|
||||||
|
|
||||||
# Retrieve any applicable Webhooks
|
# Retrieve any applicable Webhooks
|
||||||
|
@ -11,6 +11,7 @@ class NetBoxAdminSite(AdminSite):
|
|||||||
site_header = 'NetBox Administration'
|
site_header = 'NetBox Administration'
|
||||||
site_title = 'NetBox'
|
site_title = 'NetBox'
|
||||||
site_url = '/{}'.format(settings.BASE_PATH)
|
site_url = '/{}'.format(settings.BASE_PATH)
|
||||||
|
index_template = 'django_rq/index.html'
|
||||||
|
|
||||||
|
|
||||||
admin_site = NetBoxAdminSite(name='admin')
|
admin_site = NetBoxAdminSite(name='admin')
|
||||||
@ -18,11 +19,3 @@ admin_site = NetBoxAdminSite(name='admin')
|
|||||||
# Register external models
|
# Register external models
|
||||||
admin_site.register(Group, GroupAdmin)
|
admin_site.register(Group, GroupAdmin)
|
||||||
admin_site.register(User, UserAdmin)
|
admin_site.register(User, UserAdmin)
|
||||||
|
|
||||||
# Modify the template to include an RQ link if django_rq is installed (see RQ_SHOW_ADMIN_LINK)
|
|
||||||
if settings.WEBHOOKS_ENABLED:
|
|
||||||
try:
|
|
||||||
import django_rq
|
|
||||||
admin_site.index_template = 'django_rq/index.html'
|
|
||||||
except ImportError:
|
|
||||||
pass
|
|
||||||
|
@ -178,10 +178,6 @@ SESSION_FILE_PATH = None
|
|||||||
# Time zone (default: UTC)
|
# Time zone (default: UTC)
|
||||||
TIME_ZONE = 'UTC'
|
TIME_ZONE = 'UTC'
|
||||||
|
|
||||||
# The webhooks backend is disabled by default. Set this to True to enable it. Note that this requires a Redis
|
|
||||||
# database be configured and accessible by NetBox.
|
|
||||||
WEBHOOKS_ENABLED = False
|
|
||||||
|
|
||||||
# Date/time formatting. See the following link for supported formats:
|
# Date/time formatting. See the following link for supported formats:
|
||||||
# https://docs.djangoproject.com/en/stable/ref/templates/builtins/#date
|
# https://docs.djangoproject.com/en/stable/ref/templates/builtins/#date
|
||||||
DATE_FORMAT = 'N j, Y'
|
DATE_FORMAT = 'N j, Y'
|
||||||
|
@ -92,7 +92,6 @@ SHORT_DATETIME_FORMAT = getattr(configuration, 'SHORT_DATETIME_FORMAT', 'Y-m-d H
|
|||||||
SHORT_TIME_FORMAT = getattr(configuration, 'SHORT_TIME_FORMAT', 'H:i:s')
|
SHORT_TIME_FORMAT = getattr(configuration, 'SHORT_TIME_FORMAT', 'H:i:s')
|
||||||
TIME_FORMAT = getattr(configuration, 'TIME_FORMAT', 'g:i a')
|
TIME_FORMAT = getattr(configuration, 'TIME_FORMAT', 'g:i a')
|
||||||
TIME_ZONE = getattr(configuration, 'TIME_ZONE', 'UTC')
|
TIME_ZONE = getattr(configuration, 'TIME_ZONE', 'UTC')
|
||||||
WEBHOOKS_ENABLED = getattr(configuration, 'WEBHOOKS_ENABLED', False)
|
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -184,6 +183,7 @@ INSTALLED_APPS = [
|
|||||||
'corsheaders',
|
'corsheaders',
|
||||||
'debug_toolbar',
|
'debug_toolbar',
|
||||||
'django_filters',
|
'django_filters',
|
||||||
|
'django_rq',
|
||||||
'django_tables2',
|
'django_tables2',
|
||||||
'django_prometheus',
|
'django_prometheus',
|
||||||
'mptt',
|
'mptt',
|
||||||
@ -203,10 +203,6 @@ INSTALLED_APPS = [
|
|||||||
'drf_yasg',
|
'drf_yasg',
|
||||||
]
|
]
|
||||||
|
|
||||||
# Only load django-rq if the webhook backend is enabled
|
|
||||||
if WEBHOOKS_ENABLED:
|
|
||||||
INSTALLED_APPS.append('django_rq')
|
|
||||||
|
|
||||||
# Middleware
|
# Middleware
|
||||||
MIDDLEWARE = (
|
MIDDLEWARE = (
|
||||||
'debug_toolbar.middleware.DebugToolbarMiddleware',
|
'debug_toolbar.middleware.DebugToolbarMiddleware',
|
||||||
|
@ -59,14 +59,10 @@ _patterns = [
|
|||||||
|
|
||||||
# Admin
|
# Admin
|
||||||
path(r'admin/', admin_site.urls),
|
path(r'admin/', admin_site.urls),
|
||||||
|
path(r'admin/webhook-backend-status/', include('django_rq.urls')),
|
||||||
|
|
||||||
]
|
]
|
||||||
|
|
||||||
if settings.WEBHOOKS_ENABLED:
|
|
||||||
_patterns += [
|
|
||||||
path(r'admin/webhook-backend-status/', include('django_rq.urls')),
|
|
||||||
]
|
|
||||||
|
|
||||||
if settings.DEBUG:
|
if settings.DEBUG:
|
||||||
import debug_toolbar
|
import debug_toolbar
|
||||||
_patterns += [
|
_patterns += [
|
||||||
|
@ -19,3 +19,4 @@ Pillow==6.2.0
|
|||||||
psycopg2-binary==2.8.3
|
psycopg2-binary==2.8.3
|
||||||
py-gfm==0.1.4
|
py-gfm==0.1.4
|
||||||
pycryptodome==3.8.2
|
pycryptodome==3.8.2
|
||||||
|
redis==3.3.11
|
||||||
|
Reference in New Issue
Block a user