summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzc <ce.zheng@daocloud.io>2021-05-17 19:28:37 +0800
committerzc <zc2638@qq.com>2021-08-30 17:56:10 +0800
commitdadbf80e7ae76258da54d800ccf1050bb93716b7 (patch)
tree7f5d16bb61bb06be81eca51c9e16b97f21e31764
parentMerge pull request #2839 from ttlv/update_labels (diff)
downloadkubeedge-dadbf80e7ae76258da54d800ccf1050bb93716b7.tar.gz
admission: fix pod toleration replace
Signed-off-by: zc <ce.zheng@daocloud.io> supports inheriting unreachable definitions
-rw-r--r--cloud/pkg/admissioncontroller/mutate_offlinemigration.go48
1 files changed, 19 insertions, 29 deletions
diff --git a/cloud/pkg/admissioncontroller/mutate_offlinemigration.go b/cloud/pkg/admissioncontroller/mutate_offlinemigration.go
index 9b549155c..eafdac6f0 100644
--- a/cloud/pkg/admissioncontroller/mutate_offlinemigration.go
+++ b/cloud/pkg/admissioncontroller/mutate_offlinemigration.go
@@ -9,15 +9,10 @@ import (
"k8s.io/klog/v2"
)
-const (
- Exists = "Exists"
- NoExecute = "NoExecute"
-)
-
type patchMapValue struct {
- Op string `json:"op"`
- Path string `json:"path"`
- Value []map[string]string `json:"value,omitempty"`
+ Op string `json:"op"`
+ Path string `json:"path"`
+ Value []interface{} `json:"value,omitempty"`
}
func mutateOfflineMigration(review admissionv1beta1.AdmissionReview) *admissionv1beta1.AdmissionResponse {
@@ -32,7 +27,6 @@ func mutateOfflineMigration(review admissionv1beta1.AdmissionReview) *admissionv
}
payload := generatePatch(pod.Spec.Tolerations)
-
if len(payload) == 0 {
return &reviewResponse
}
@@ -49,28 +43,24 @@ func mutateOfflineMigration(review admissionv1beta1.AdmissionReview) *admissionv
}
func generatePatch(tolerations []corev1.Toleration) []patchMapValue {
- patch := []patchMapValue{{
- Op: "add",
- Path: "/spec/template/spec/tolerations",
- Value: []map[string]string{{
- "key": corev1.TaintNodeUnreachable,
- "operator": Exists,
- "effect": NoExecute,
- }},
- }}
- if len(tolerations) > 0 {
- for _, toleration := range tolerations {
- if toleration.Key == corev1.TaintNodeUnreachable {
- if toleration.Effect == "NoExecute" &&
- toleration.Operator == "Exists" && toleration.TolerationSeconds == nil {
- return nil
- }
- toleration.TolerationSeconds = nil
- patch[0].Op = "replace"
- }
+ currentTolerations := make([]interface{}, 0, len(tolerations)+1)
+ for _, v := range tolerations {
+ if v.Key == corev1.TaintNodeUnreachable {
+ continue
}
+ currentTolerations = append(currentTolerations, v)
+ }
+ currentTolerations = append(currentTolerations, corev1.Toleration{
+ Key: corev1.TaintNodeUnreachable,
+ Operator: corev1.TolerationOpExists,
+ })
+ patch := []patchMapValue{
+ {
+ Op: "replace",
+ Path: "/spec/tolerations",
+ Value: currentTolerations,
+ },
}
-
return patch
}