goharbor/harbor · error

Error: storage driver %s is not supported, only the followin

Error message

Error: storage driver %s is not supported, only the following ones are supported: %s

What it means

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.

Source

Thrown at make/photon/prepare/utils/misc.py:44

        cert_path = conf.get("configuration", "ssl_cert")
        if not os.path.isfile(cert_path):
            raise Exception(
                "Error: The path for certificate: %s is invalid" % cert_path)
        if not conf.has_option("configuration", "ssl_cert_key"):
            raise Exception(
                "Error: The protocol is https but attribute ssl_cert_key is not set")
        cert_key_path = conf.get("configuration", "ssl_cert_key")
        if not os.path.isfile(cert_key_path):
            raise Exception(
                "Error: The path for certificate key: %s is invalid" % cert_key_path)

    # Storage validate
    valid_storage_drivers = ["filesystem",
                             "azure", "gcs", "s3", "swift", "oss"]
    storage_provider_name = conf.get(
        "configuration", "registry_storage_provider_name").strip()
    if storage_provider_name not in valid_storage_drivers:
        raise Exception("Error: storage driver %s is not supported, only the following ones are supported: %s" % (
            storage_provider_name, ",".join(valid_storage_drivers)))

    storage_provider_config = conf.get(
        "configuration", "registry_storage_provider_config").strip()
    if storage_provider_name != "filesystem":
        if storage_provider_config == "":
            raise Exception(
                "Error: no provider configurations are provided for provider %s" % storage_provider_name)

def validate_crt_subj(dirty_subj):
    subj_list = [item for item in dirty_subj.strip().split("/") \
        if len(item.split("=")) == 2 and len(item.split("=")[1]) > 0]
    return "/" + "/".join(subj_list)


def generate_random_string(length):
    return ''.join(secrets.choice(string.ascii_letters + string.digits) for _ in range(length))

View on GitHub (pinned to 7b2fd08cc5)

Solutions

  1. Set registry_storage_provider_name to an exact lowercase value: filesystem, azure, gcs, s3, swift, or oss
  2. For minio/ceph/wasabi use 's3' and configure regionendpoint in registry_storage_provider_config
  3. Re-run prepare

Example fix

# harbor.cfg (before)
registry_storage_provider_name = S3

# after
registry_storage_provider_name = s3
Defensive patterns

Strategy: validation

Validate before calling

VALID = {'filesystem', 'azure', 'gcs', 's3', 'swift', 'oss'}
name = conf.get('configuration', 'registry_storage_provider_name').strip()
if name not in VALID:
    raise SystemExit('unsupported storage driver %r; use one of %s' % (name, sorted(VALID)))

Prevention

When it happens

Trigger: 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.

Common situations: 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.

Related errors


AI-assisted analysis of goharbor/harbor@7b2fd08cc5 (2026-08-16). Data as JSON: /api/errors/f36e2a3b79aa7582. Report an issue: GitHub.