provider_chain.go raw

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