1
0
mirror of https://github.com/rancher/os.git synced 2025-09-02 07:15:41 +00:00

Updated hashing in case slice order changes

This commit is contained in:
deniseschannon
2015-05-08 13:17:52 -07:00
parent 975e869af9
commit eea38fb173

View File

@@ -73,28 +73,42 @@ func getHash(containerCfg *config.ContainerConfig) (string, error) {
//Sort serviceKeys alphabetically //Sort serviceKeys alphabetically
sort.Strings(serviceKeys) sort.Strings(serviceKeys)
//New slice to sort through Labels Map //New slice to sort through Keys
var labelKeys []string //var sliceKeys []string
//Go through keys and write hash //Go through keys and write hash
for i := 0; i < len(serviceKeys); i++ { for i := 0; i < len(serviceKeys); i++ {
serviceValue := unsortedKeyValue[serviceKeys[i]] serviceValue := unsortedKeyValue[serviceKeys[i]]
serviceType := unsortedKeyType[serviceKeys[i]] serviceType := unsortedKeyType[serviceKeys[i]]
sliceKeys := []string{}
//Only need to check for Labels key as it's a Map and write hash after sorting the label names //Only need to check for Labels key as it's a Map and write hash after sorting the label names
if serviceType == reflect.TypeOf(project.NewSliceorMap(make(map[string]string))) { if serviceType == reflect.TypeOf(project.NewSliceorMap(make(map[string]string))) {
for lkey := range serviceValue.(*project.SliceorMap).MapParts() { for lkey := range serviceValue.(*project.SliceorMap).MapParts() {
labelKeys = append(labelKeys, lkey) sliceKeys = append(sliceKeys, lkey)
} }
sort.Strings(labelKeys) sort.Strings(sliceKeys)
for j := 0; j < len(labelKeys); j++ { for j := 0; j < len(sliceKeys); j++ {
w.Write([]byte(fmt.Sprintf("%s%v", labelKeys[j], serviceValue.(*project.SliceorMap).MapParts()[labelKeys[j]]))) w.Write([]byte(fmt.Sprintf("%s%v", sliceKeys[j], serviceValue.(*project.SliceorMap).MapParts()[sliceKeys[j]])))
}
} else if serviceType == reflect.TypeOf(project.NewStringorslice("TestString")) {
sliceKeys = serviceValue.(*project.Stringorslice).Slice()
sort.Strings(sliceKeys)
for j := 0; j < len(sliceKeys); j++ {
w.Write([]byte(fmt.Sprintf("%s", sliceKeys[j])))
}
} else if v, ok := serviceValue.([]string); ok {
sliceKeys = v
sort.Strings(sliceKeys)
for j := 0; j < len(sliceKeys); j++ {
w.Write([]byte(fmt.Sprintf("%s", sliceKeys[j])))
} }
} else { } else {
w.Write([]byte(fmt.Sprintf("%v", serviceValue))) w.Write([]byte(fmt.Sprintf("%v", serviceValue)))
} }
} }
} }