diff options
| author | zc <ce.zheng@daocloud.io> | 2021-05-17 19:28:37 +0800 |
|---|---|---|
| committer | zc <zc2638@qq.com> | 2021-08-30 17:56:10 +0800 |
| commit | dadbf80e7ae76258da54d800ccf1050bb93716b7 (patch) | |
| tree | 7f5d16bb61bb06be81eca51c9e16b97f21e31764 | |
| parent | Merge pull request #2839 from ttlv/update_labels (diff) | |
| download | kubeedge-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.go | 48 |
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 } |
