mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
Merge pull request #3666 from steffann/1814-Ability_to_use_object_store_for_images
Add support for S3 storage for media
This commit is contained in:
@ -611,11 +611,20 @@ class ImageAttachment(models.Model):
|
|||||||
@property
|
@property
|
||||||
def size(self):
|
def size(self):
|
||||||
"""
|
"""
|
||||||
Wrapper around `image.size` to suppress an OSError in case the file is inaccessible.
|
Wrapper around `image.size` to suppress an OSError in case the file is inaccessible. Also opportunistically
|
||||||
|
catch other exceptions that we know other storage back-ends to throw.
|
||||||
"""
|
"""
|
||||||
|
expected_exceptions = [OSError]
|
||||||
|
|
||||||
|
try:
|
||||||
|
from botocore.exceptions import ClientError
|
||||||
|
expected_exceptions.append(ClientError)
|
||||||
|
except ImportError:
|
||||||
|
pass
|
||||||
|
|
||||||
try:
|
try:
|
||||||
return self.image.size
|
return self.image.size
|
||||||
except OSError:
|
except tuple(expected_exceptions):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
@ -141,6 +141,16 @@ MAX_PAGE_SIZE = 1000
|
|||||||
# the default value of this setting is derived from the installed location.
|
# the default value of this setting is derived from the installed location.
|
||||||
# MEDIA_ROOT = '/opt/netbox/netbox/media'
|
# MEDIA_ROOT = '/opt/netbox/netbox/media'
|
||||||
|
|
||||||
|
# By default uploaded media is stored on the local filesystem. Using Django-storages is also supported. Provide the
|
||||||
|
# class path of the storage driver in STORAGE_BACKEND and any configuration options in STORAGE_CONFIG. For example:
|
||||||
|
# STORAGE_BACKEND = 'storages.backends.s3boto3.S3Boto3Storage'
|
||||||
|
# STORAGE_CONFIG = {
|
||||||
|
# 'AWS_ACCESS_KEY_ID': 'Key ID',
|
||||||
|
# 'AWS_SECRET_ACCESS_KEY': 'Secret',
|
||||||
|
# 'AWS_STORAGE_BUCKET_NAME': 'netbox',
|
||||||
|
# 'AWS_S3_REGION_NAME': 'eu-west-1',
|
||||||
|
# }
|
||||||
|
|
||||||
# Expose Prometheus monitoring metrics at the HTTP endpoint '/metrics'
|
# Expose Prometheus monitoring metrics at the HTTP endpoint '/metrics'
|
||||||
METRICS_ENABLED = False
|
METRICS_ENABLED = False
|
||||||
|
|
||||||
|
@ -83,6 +83,8 @@ LOGIN_TIMEOUT = getattr(configuration, 'LOGIN_TIMEOUT', None)
|
|||||||
MAINTENANCE_MODE = getattr(configuration, 'MAINTENANCE_MODE', False)
|
MAINTENANCE_MODE = getattr(configuration, 'MAINTENANCE_MODE', False)
|
||||||
MAX_PAGE_SIZE = getattr(configuration, 'MAX_PAGE_SIZE', 1000)
|
MAX_PAGE_SIZE = getattr(configuration, 'MAX_PAGE_SIZE', 1000)
|
||||||
MEDIA_ROOT = getattr(configuration, 'MEDIA_ROOT', os.path.join(BASE_DIR, 'media')).rstrip('/')
|
MEDIA_ROOT = getattr(configuration, 'MEDIA_ROOT', os.path.join(BASE_DIR, 'media')).rstrip('/')
|
||||||
|
STORAGE_BACKEND = getattr(configuration, 'STORAGE_BACKEND', None)
|
||||||
|
STORAGE_CONFIG = getattr(configuration, 'STORAGE_CONFIG', {})
|
||||||
METRICS_ENABLED = getattr(configuration, 'METRICS_ENABLED', False)
|
METRICS_ENABLED = getattr(configuration, 'METRICS_ENABLED', False)
|
||||||
NAPALM_ARGS = getattr(configuration, 'NAPALM_ARGS', {})
|
NAPALM_ARGS = getattr(configuration, 'NAPALM_ARGS', {})
|
||||||
NAPALM_PASSWORD = getattr(configuration, 'NAPALM_PASSWORD', '')
|
NAPALM_PASSWORD = getattr(configuration, 'NAPALM_PASSWORD', '')
|
||||||
@ -118,6 +120,23 @@ DATABASES = {
|
|||||||
'default': DATABASE,
|
'default': DATABASE,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# Media storage
|
||||||
|
#
|
||||||
|
|
||||||
|
if STORAGE_BACKEND is not None:
|
||||||
|
DEFAULT_FILE_STORAGE = STORAGE_BACKEND
|
||||||
|
|
||||||
|
if STORAGE_BACKEND.startswith('storages.'):
|
||||||
|
# Monkey-patch Django-storages to also fetch settings from STORAGE_CONFIG
|
||||||
|
import storages.utils
|
||||||
|
|
||||||
|
def _setting(name, default=None):
|
||||||
|
if name in STORAGE_CONFIG:
|
||||||
|
return STORAGE_CONFIG[name]
|
||||||
|
return globals().get(name, default)
|
||||||
|
|
||||||
|
storages.utils.setting = _setting
|
||||||
|
|
||||||
#
|
#
|
||||||
# Redis
|
# Redis
|
||||||
|
Reference in New Issue
Block a user