mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-18 08:09:58 +00:00
Fix StatefulSet set selector bug
This commit is contained in:
parent
d8928efc8a
commit
8de89d9f74
@ -18,6 +18,7 @@ package history
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"hash/fnv"
|
"hash/fnv"
|
||||||
"sort"
|
"sort"
|
||||||
@ -56,7 +57,7 @@ func ControllerRevisionName(prefix string, hash uint32) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NewControllerRevision returns a ControllerRevision with a ControllerRef pointing to parent and indicating that
|
// NewControllerRevision returns a ControllerRevision with a ControllerRef pointing to parent and indicating that
|
||||||
// parent is of parentKind. The ControllerRevision has labels matching selector, contains Data equal to data, and
|
// parent is of parentKind. The ControllerRevision has labels matching pod, contains Data equal to data, and
|
||||||
// has a Revision equal to revision. The collisionCount is used when creating the name of the ControllerRevision
|
// has a Revision equal to revision. The collisionCount is used when creating the name of the ControllerRevision
|
||||||
// so the name is likely unique. If the returned error is nil, the returned ControllerRevision is valid. If the
|
// so the name is likely unique. If the returned error is nil, the returned ControllerRevision is valid. If the
|
||||||
// returned error is not nil, the returned ControllerRevision is invalid for use.
|
// returned error is not nil, the returned ControllerRevision is invalid for use.
|
||||||
@ -66,10 +67,7 @@ func NewControllerRevision(parent metav1.Object,
|
|||||||
data runtime.RawExtension,
|
data runtime.RawExtension,
|
||||||
revision int64,
|
revision int64,
|
||||||
collisionCount *int32) (*apps.ControllerRevision, error) {
|
collisionCount *int32) (*apps.ControllerRevision, error) {
|
||||||
labelMap, err := labels.ConvertSelectorToLabelsMap(selector.String())
|
labelMap := getPodLabelsFromData(data)
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
blockOwnerDeletion := true
|
blockOwnerDeletion := true
|
||||||
isController := true
|
isController := true
|
||||||
cr := &apps.ControllerRevision{
|
cr := &apps.ControllerRevision{
|
||||||
@ -454,3 +452,31 @@ func (fh *fakeHistory) ReleaseControllerRevision(parent metav1.Object, revision
|
|||||||
}
|
}
|
||||||
return clone, fh.indexer.Update(clone)
|
return clone, fh.indexer.Update(clone)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getPodLabelsFromData(data runtime.RawExtension) map[string]string {
|
||||||
|
var dat map[string]interface{}
|
||||||
|
labelMap := make(map[string]string)
|
||||||
|
if err := json.Unmarshal(data.Raw, &dat); err != nil {
|
||||||
|
return labelMap
|
||||||
|
}
|
||||||
|
spec, ok := dat["spec"].(map[string]interface{})
|
||||||
|
if !ok {
|
||||||
|
return labelMap
|
||||||
|
}
|
||||||
|
template, ok := spec["template"].(map[string]interface{})
|
||||||
|
if !ok {
|
||||||
|
return labelMap
|
||||||
|
}
|
||||||
|
metadata, ok := template["metadata"].(map[string]interface{})
|
||||||
|
if !ok {
|
||||||
|
return labelMap
|
||||||
|
}
|
||||||
|
labels, ok := metadata["labels"].(map[string]interface{})
|
||||||
|
if !ok {
|
||||||
|
return labelMap
|
||||||
|
}
|
||||||
|
for key, value := range labels {
|
||||||
|
labelMap[key] = value.(string)
|
||||||
|
}
|
||||||
|
return labelMap
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user