diff --git a/pkg/providers/all/all.go b/pkg/providers/all/all.go index 2d2371676bb..de82b4bae1d 100644 --- a/pkg/providers/all/all.go +++ b/pkg/providers/all/all.go @@ -27,6 +27,7 @@ import ( // Alias these methods, so that folks can import this to get all providers. var ( - Enabled = providers.Enabled - Provide = providers.Provide + Enabled = providers.Enabled + Provide = providers.Provide + ProvideFrom = providers.ProvideFrom ) diff --git a/pkg/providers/interface.go b/pkg/providers/interface.go index 8ed4f1eaefe..f89aa855da4 100644 --- a/pkg/providers/interface.go +++ b/pkg/providers/interface.go @@ -83,3 +83,15 @@ func Provide(ctx context.Context, audience string) (string, error) { } return id, err } + +// ProvideFrom fetches the specified provider +func ProvideFrom(ctx context.Context, provider string) (Interface, error) { + m.Lock() + defer m.Unlock() + + p, ok := providers[provider] + if !ok { + return nil, fmt.Errorf("%s is not a valid provider", provider) + } + return p, nil +}