{"record":{"id":"4539159e3ae530de","repo":"goharbor/harbor","slug":"error-no-provider-configurations-are-provided-for-453915","errorCode":null,"errorMessage":"Error: no provider configurations are provided for provider %s","messagePattern":"Error: no provider configurations are provided for provider (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"make/photon/prepare/utils/misc.py","lineNumber":51,"sourceCode":"        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\n\ndef prepare_dir(root: str, *args, **kwargs) -> str:\n    gid, uid = kwargs.get('gid'), kwargs.get('uid')\n    absolute_path = Path(os.path.join(root, *args))\n    if absolute_path.is_file():\n        raise Exception('Path exists and the type is regular file')\n    mode = kwargs.get('mode') or 0o755","sourceCodeStart":33,"sourceCodeEnd":69,"githubUrl":"https://github.com/goharbor/harbor/blob/7b2fd08cc568955cca339afeefab27372840d936/make/photon/prepare/utils/misc.py#L33-L69","documentation":"Thrown by the legacy validator in make/photon/prepare/utils/misc.py when registry_storage_provider_name is not 'filesystem' but registry_storage_provider_config is empty after strip(). Cloud backends need their settings (bucket, region, credentials) rendered into the registry config, so selecting one without configuration is fatal.","triggerScenarios":"harbor.cfg sets 'registry_storage_provider_name = s3' (or azure/gcs/swift/oss) while 'registry_storage_provider_config' is empty or only whitespace - typically the name was changed but the settings line was never filled.","commonSituations":"Switching Harbor from local disk to object storage in harbor.cfg and forgetting the config string; migrations that drop the registry_storage_provider_config line.","solutions":["Set registry_storage_provider_config with the driver's required options, e.g. 'region: us-east-1, bucket: harbor-artifacts, accesskey: AKIA..., secretkey: <secret>'","Or set registry_storage_provider_name = filesystem if object storage is not intended","Re-run prepare"],"exampleFix":"# harbor.cfg (before)\nregistry_storage_provider_name = s3\nregistry_storage_provider_config =\n\n# after\nregistry_storage_provider_name = s3\nregistry_storage_provider_config = region: us-east-1, bucket: harbor-artifacts, accesskey: AKIAIOSFODNN7EXAMPLE, secretkey: wJalrXUtnFEMI","handlingStrategy":"validation","validationCode":"name = conf.get('configuration', 'registry_storage_provider_name').strip()\nprov = conf.get('configuration', 'registry_storage_provider_config').strip()\nif name != 'filesystem' and prov == '':\n    raise SystemExit('storage driver %s selected but registry_storage_provider_config is empty' % name)","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Change driver name and its config in the same edit","Test rendered registry config by grepping the output for bucket/region after prepare","Move to harbor.yml storage_service sections on Harbor >= 1.8"],"tags":["harbor","storage","s3","legacy-config","configuration"],"backgroundTag":null,"analyzedSha":"7b2fd08cc568955cca339afeefab27372840d936","analyzedAt":"2026-08-16T00:00:10.961Z","schemaVersion":2},"datasetVersion":"2026-08-16T03:17:38.424Z"}