Cleanup workload deletionTimestamp before write to work.

Signed-off-by: RainbowMango <renhongcai@huawei.com>
This commit is contained in:
RainbowMango 2021-03-26 11:12:07 +08:00 committed by Hongcai Ren
parent a2ca222aa4
commit 538462e74d
1 changed files with 23 additions and 3 deletions

View File

@ -68,14 +68,34 @@ func (a *MutatingAdmission) InjectDecoder(d *admission.Decoder) error {
return nil return nil
} }
// RemoveIrrelevantField will delete irrelevant field from workload. such as uid, timestamp, status // removeIrrelevantField used to remove fields that generated by kube-apiserver and no need(or can't) propagate to
// member clusters.
func removeIrrelevantField(workload *unstructured.Unstructured) { func removeIrrelevantField(workload *unstructured.Unstructured) {
// populated by the kubernetes.
unstructured.RemoveNestedField(workload.Object, "metadata", "creationTimestamp") unstructured.RemoveNestedField(workload.Object, "metadata", "creationTimestamp")
// populated by the kubernetes.
// The kubernetes will set this fields in case of graceful deletion. This field is read-only and can't propagate to
// member clusters.
unstructured.RemoveNestedField(workload.Object, "metadata", "deletionTimestamp")
// populated by the kubernetes.
unstructured.RemoveNestedField(workload.Object, "metadata", "generation") unstructured.RemoveNestedField(workload.Object, "metadata", "generation")
unstructured.RemoveNestedField(workload.Object, "metadata", "resourceVersion")
unstructured.RemoveNestedField(workload.Object, "metadata", "selfLink") // This is mostly for internal housekeeping, and users typically shouldn't need to set or understand this field.
// Remove this field to keep 'Work' clean and tidy.
unstructured.RemoveNestedField(workload.Object, "metadata", "managedFields") unstructured.RemoveNestedField(workload.Object, "metadata", "managedFields")
// populated by the kubernetes.
unstructured.RemoveNestedField(workload.Object, "metadata", "resourceVersion")
// populated by the kubernetes and has been deprecated by kubernetes.
unstructured.RemoveNestedField(workload.Object, "metadata", "selfLink")
// populated by the kubernetes.
unstructured.RemoveNestedField(workload.Object, "metadata", "uid") unstructured.RemoveNestedField(workload.Object, "metadata", "uid")
unstructured.RemoveNestedField(workload.Object, "status") unstructured.RemoveNestedField(workload.Object, "status")
unstructured.RemoveNestedField(workload.Object, "spec", "clusterIP") unstructured.RemoveNestedField(workload.Object, "spec", "clusterIP")
} }