From 1a242b96715d199576b15c52947945c1dca34195 Mon Sep 17 00:00:00 2001 From: phantooom Date: Wed, 14 Jul 2021 18:25:00 +0800 Subject: [PATCH] webhook: when clusterIP=None do not remove clusterIP Signed-off-by: phantooom --- pkg/webhook/work/mutating.go | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/pkg/webhook/work/mutating.go b/pkg/webhook/work/mutating.go index 733416bce..ea6b0f6aa 100644 --- a/pkg/webhook/work/mutating.go +++ b/pkg/webhook/work/mutating.go @@ -5,12 +5,14 @@ import ( "encoding/json" "net/http" + corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime" "k8s.io/klog/v2" "sigs.k8s.io/controller-runtime/pkg/webhook/admission" workv1alpha1 "github.com/karmada-io/karmada/pkg/apis/work/v1alpha1" + "github.com/karmada-io/karmada/pkg/util" ) // MutatingAdmission mutates API request if necessary. @@ -97,5 +99,11 @@ func removeIrrelevantField(workload *unstructured.Unstructured) { unstructured.RemoveNestedField(workload.Object, "status") - unstructured.RemoveNestedField(workload.Object, "spec", "clusterIP") + if workload.GetKind() == util.ServiceKind { + // In the case spec.clusterIP is set to `None`, means user want a headless service, then it shouldn't be removed. + clusterIP, exist, _ := unstructured.NestedString(workload.Object, "spec", "clusterIP") + if exist && clusterIP != corev1.ClusterIPNone { + unstructured.RemoveNestedField(workload.Object, "spec", "clusterIP") + } + } }