12345678910111213141516171819202122232425262728293031323334 |
- package providers
- import (
- "github.com/aliyun/alibaba-cloud-sdk-go/sdk/auth"
- )
- type Provider interface {
- Retrieve() (auth.Credential, error)
- }
- // NewChainProvider will attempt to use its given providers in the order
- // in which they're provided. It will return credentials for the first
- // provider that doesn't return an error.
- func NewChainProvider(providers []Provider) Provider {
- return &ChainProvider{
- Providers: providers,
- }
- }
- type ChainProvider struct {
- Providers []Provider
- }
- func (p *ChainProvider) Retrieve() (auth.Credential, error) {
- var lastErr error
- for _, provider := range p.Providers {
- creds, err := provider.Retrieve()
- if err == nil {
- return creds, nil
- }
- lastErr = err
- }
- return nil, lastErr
- }
|