Change SecScanAPI to use a uri creation func instead of test context Pass config provider through validator context Remove app config dependency for validators
50 lines
1.9 KiB
Python
50 lines
1.9 KiB
Python
from storage import get_storage_driver
|
|
from util.config.validators import BaseValidator, ConfigValidationException
|
|
|
|
|
|
class StorageValidator(BaseValidator):
|
|
name = "registry-storage"
|
|
|
|
@classmethod
|
|
def validate(cls, validator_context):
|
|
""" Validates registry storage. """
|
|
config = validator_context.config
|
|
client = validator_context.http_client
|
|
ip_resolver = validator_context.ip_resolver
|
|
config_provider = validator_context.config_provider
|
|
|
|
# replication_enabled = app.config.get('FEATURE_STORAGE_REPLICATION', False)
|
|
replication_enabled = config.get('FEATURE_STORAGE_REPLICATION', False)
|
|
|
|
providers = _get_storage_providers(config, ip_resolver, config_provider).items()
|
|
if not providers:
|
|
raise ConfigValidationException('Storage configuration required')
|
|
|
|
for name, (storage_type, driver) in providers:
|
|
try:
|
|
if replication_enabled and storage_type == 'LocalStorage':
|
|
raise ConfigValidationException('Locally mounted directory not supported ' +
|
|
'with storage replication')
|
|
|
|
# Run validation on the driver.
|
|
driver.validate(client)
|
|
|
|
# Run setup on the driver if the read/write succeeded.
|
|
driver.setup()
|
|
except Exception as ex:
|
|
msg = str(ex).strip().split("\n")[0]
|
|
raise ConfigValidationException('Invalid storage configuration: %s: %s' % (name, msg))
|
|
|
|
|
|
def _get_storage_providers(config, ip_resolver, config_provider):
|
|
storage_config = config.get('DISTRIBUTED_STORAGE_CONFIG', {})
|
|
drivers = {}
|
|
|
|
try:
|
|
for name, parameters in storage_config.items():
|
|
driver = get_storage_driver(None, None, None, config_provider, ip_resolver, parameters)
|
|
drivers[name] = (parameters[0], driver)
|
|
except TypeError:
|
|
raise ConfigValidationException('Missing required parameter(s) for storage %s' % name)
|
|
|
|
return drivers
|