provider_chain.go 640 B

1234567891011121314151617181920212223242526272829303132
  1. package credentials
  2. import (
  3. "errors"
  4. )
  5. type providerChain struct {
  6. Providers []Provider
  7. }
  8. var defaultproviders = []Provider{providerEnv, providerOIDC, providerProfile, providerInstance}
  9. var defaultChain = newProviderChain(defaultproviders)
  10. func newProviderChain(providers []Provider) Provider {
  11. return &providerChain{
  12. Providers: providers,
  13. }
  14. }
  15. func (p *providerChain) resolve() (*Config, error) {
  16. for _, provider := range p.Providers {
  17. config, err := provider.resolve()
  18. if err != nil {
  19. return nil, err
  20. } else if config == nil {
  21. continue
  22. }
  23. return config, err
  24. }
  25. return nil, errors.New("no credential found")
  26. }