func build()

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)
}