{"record":{"id":"f36e2a3b79aa7582","repo":"goharbor/harbor","slug":"error-storage-driver-s-is-not-supported-only-th-f36e2a","errorCode":null,"errorMessage":"Error: storage driver %s is not supported, only the following ones are supported: %s","messagePattern":"Error: storage driver (.+?) is not supported, only the following ones are supported: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"make/photon/prepare/utils/misc.py","lineNumber":44,"sourceCode":"        cert_path = conf.get(\"configuration\", \"ssl_cert\")\n        if not os.path.isfile(cert_path):\n            raise Exception(\n                \"Error: The path for certificate: %s is invalid\" % cert_path)\n        if not conf.has_option(\"configuration\", \"ssl_cert_key\"):\n            raise Exception(\n                \"Error: The protocol is https but attribute ssl_cert_key is not set\")\n        cert_key_path = conf.get(\"configuration\", \"ssl_cert_key\")\n        if not os.path.isfile(cert_key_path):\n            raise Exception(\n                \"Error: The path for certificate key: %s is invalid\" % cert_key_path)\n\n    # Storage validate\n    valid_storage_drivers = [\"filesystem\",\n                             \"azure\", \"gcs\", \"s3\", \"swift\", \"oss\"]\n    storage_provider_name = conf.get(\n        \"configuration\", \"registry_storage_provider_name\").strip()\n    if storage_provider_name not in valid_storage_drivers:\n        raise Exception(\"Error: storage driver %s is not supported, only the following ones are supported: %s\" % (\n            storage_provider_name, \",\".join(valid_storage_drivers)))\n\n    storage_provider_config = conf.get(\n        \"configuration\", \"registry_storage_provider_config\").strip()\n    if storage_provider_name != \"filesystem\":\n        if storage_provider_config == \"\":\n            raise Exception(\n                \"Error: no provider configurations are provided for provider %s\" % storage_provider_name)\n\ndef validate_crt_subj(dirty_subj):\n    subj_list = [item for item in dirty_subj.strip().split(\"/\") \\\n        if len(item.split(\"=\")) == 2 and len(item.split(\"=\")[1]) > 0]\n    return \"/\" + \"/\".join(subj_list)\n\n\ndef generate_random_string(length):\n    return ''.join(secrets.choice(string.ascii_letters + string.digits) for _ in range(length))\n","sourceCodeStart":26,"sourceCodeEnd":62,"githubUrl":"https://github.com/goharbor/harbor/blob/7b2fd08cc568955cca339afeefab27372840d936/make/photon/prepare/utils/misc.py#L26-L62","documentation":"Thrown by the legacy validator in make/photon/prepare/utils/misc.py when harbor.cfg's registry_storage_provider_name (after .strip()) is not one of filesystem, azure, gcs, s3, swift, oss. These are the Docker Distribution storage backends Harbor supports; the value goes straight into the rendered registry config, so an unknown name aborts prepare.","triggerScenarios":"harbor.cfg contains a mistyped or wrong-case driver, e.g. 'registry_storage_provider_name = S3', 'FileSystem', 'minio', or an arbitrary backend name. The .strip() removes surrounding whitespace, but case and spelling must match exactly.","commonSituations":"harbor.cfg-era setups (Harbor < 1.8, or migrator processing them) copied from docs with case changes; assuming S3-compatible services have their own driver name.","solutions":["Set registry_storage_provider_name to an exact lowercase value: filesystem, azure, gcs, s3, swift, or oss","For minio/ceph/wasabi use 's3' and configure regionendpoint in registry_storage_provider_config","Re-run prepare"],"exampleFix":"# harbor.cfg (before)\nregistry_storage_provider_name = S3\n\n# after\nregistry_storage_provider_name = s3","handlingStrategy":"validation","validationCode":"VALID = {'filesystem', 'azure', 'gcs', 's3', 'swift', 'oss'}\nname = conf.get('configuration', 'registry_storage_provider_name').strip()\nif name not in VALID:\n    raise SystemExit('unsupported storage driver %r; use one of %s' % (name, sorted(VALID)))","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Storage driver names are lowercase and case-sensitive","S3-compatible object stores are 's3', not their product names","Diff harbor.cfg against the release template before upgrades"],"tags":["harbor","storage","registry","legacy-config","validation"],"backgroundTag":null,"analyzedSha":"7b2fd08cc568955cca339afeefab27372840d936","analyzedAt":"2026-08-16T00:00:10.961Z","schemaVersion":2},"datasetVersion":"2026-08-16T03:17:38.424Z"}