internal/configprovider/factory.go (23 lines of code) (raw):

package configprovider import ( "fmt" "net/url" ) // BuildConfigProvider returns a ConfigProvider appropriate for the given source URL. // The source URL must have a scheme, and the supported schemes are: // - `file`. To use configuration from the filesystem: `file:///path/to/file/or/directory`. // - `imds`. To use configuration from the instance's user data: `imds://user-data`. func BuildConfigProvider(rawConfigSourceURL string) (ConfigProvider, error) { parsedURL, err := url.Parse(rawConfigSourceURL) if err != nil { return nil, err } switch parsedURL.Scheme { case "imds": return NewUserDataConfigProvider(), nil case "file": source := getURLWithoutScheme(parsedURL) return NewFileConfigProvider(source), nil default: return nil, fmt.Errorf("unsupported scheme: %s", parsedURL.Scheme) } } func getURLWithoutScheme(url *url.URL) string { return fmt.Sprintf("%s%s", url.Host, url.Path) }