Merge pull request #65043 from brendandburns/todo4

Automatic merge from submit-queue (batch tested with PRs 64564, 65043). If you want to cherry-pick this change to another branch, please follow the instructions <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md">here</a>.

Make CredentialProvider config loading deterministic.

@mattmoor fixed an old TODO :)
This commit is contained in:
Kubernetes Submit Queue 2018-08-26 14:07:04 -07:00 committed by GitHub
commit 152de38825
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

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)
} }
} }