Make CredentialProvider config loading deterministic.

pull/8/head
Brendan Burns 2018-06-12 21:39:46 -07:00
parent b05a61e299
commit 804ee25b1e
1 changed files with 12 additions and 4 deletions

View File

@ -17,6 +17,8 @@ limitations under the License.
package credentialprovider package credentialprovider
import ( import (
"reflect"
"sort"
"sync" "sync"
"github.com/golang/glog" "github.com/golang/glog"
@ -49,11 +51,17 @@ func NewDockerKeyring() DockerKeyring {
Providers: make([]DockerConfigProvider, 0), Providers: make([]DockerConfigProvider, 0),
} }
// TODO(mattmoor): iterating over the map is non-deterministic. We should keys := reflect.ValueOf(providers).MapKeys()
// introduce the notion of priorities for conflict resolution. stringKeys := make([]string, len(keys))
for name, provider := range providers { for ix := range keys {
stringKeys[ix] = keys[ix].String()
}
sort.Strings(stringKeys)
for _, key := range stringKeys {
provider := providers[key]
if provider.Enabled() { if provider.Enabled() {
glog.V(4).Infof("Registering credential provider: %v", name) glog.V(4).Infof("Registering credential provider: %v", key)
keyring.Providers = append(keyring.Providers, provider) keyring.Providers = append(keyring.Providers, provider)
} }
} }