in server/pkg/server/storage/backends/container/registry.go [98:154]
func build(u *url.URL) (storage.Engine, error) {
q := u.Query()
switch u.Scheme {
case schemeBundleFromS3:
// Build session from url
opts, err := session.FromURL(u.String())
if err != nil {
return nil, fmt.Errorf("unable to parse session URL: %w", err)
}
// Build AWS session
sess, err := session.NewSession(opts)
if err != nil {
return nil, fmt.Errorf("unable to initialize session: %w", err)
}
// Delegate to loader
return buildWithLoader(u, &s3Loader{
s3api: s3.New(sess),
bucketName: opts.BucketName,
})
case schemeBundleFromAzBlob:
azureConnString := os.Getenv("AZURE_CONNECTION_STRING")
if azureConnString == "" {
return nil, errors.New("AZURE_CONNECTION_STRING env. variable must be set for azblob backend")
}
return buildWithLoader(u, &azureBlobLoader{
bucketName: u.Hostname(),
prefix: withDefault(q, "prefix", ""),
connString: azureConnString,
})
case schemeBundleFromGCS:
return buildWithLoader(u, &gcsLoader{
bucketName: u.Hostname(),
prefix: withDefault(q, "prefix", ""),
})
case schemeBundleFromHTTP:
return buildWithLoader(u, &httpLoader{
scheme: "http",
host: u.Host,
})
case schemeBundleFromHTTPS:
return buildWithLoader(u, &httpLoader{
scheme: "https",
host: u.Host,
})
case schemeBundleDefault, schemeBundleFromFile:
return buildWithLoader(u, &fileLoader{
fs: os.DirFS("/"),
})
case schemeBundleStdin:
return buildWithLoader(u, &stdinLoader{})
default:
}
return nil, fmt.Errorf("unsupported builder scheme (%s)", u.Scheme)
}