From 336ec22700443d37d84ffd3f2b27df5027718eb4 Mon Sep 17 00:00:00 2001 From: jaehanbyun Date: Thu, 23 Oct 2025 08:35:22 +0900 Subject: [PATCH] ingressclass: show (default) marker for default IngressClass Signed-off-by: jaehanbyun --- pkg/apis/networking/util/helpers.go | 27 +++++++++++++++++++ pkg/printers/internalversion/printers.go | 8 +++++- pkg/printers/internalversion/printers_test.go | 16 +++++++++++ 3 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 pkg/apis/networking/util/helpers.go diff --git a/pkg/apis/networking/util/helpers.go b/pkg/apis/networking/util/helpers.go new file mode 100644 index 00000000000..1e2864f2e4c --- /dev/null +++ b/pkg/apis/networking/util/helpers.go @@ -0,0 +1,27 @@ +/* +Copyright 2025 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package util + +import ( + networkingv1 "k8s.io/api/networking/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// HasDefaultAnnotation returns true if the object metadata has the default annotation set. +func HasDefaultAnnotation(obj metav1.ObjectMeta) bool { + return obj.Annotations[networkingv1.AnnotationIsDefaultIngressClass] == "true" +} diff --git a/pkg/printers/internalversion/printers.go b/pkg/printers/internalversion/printers.go index 2207c1a18a9..e8979c761cc 100644 --- a/pkg/printers/internalversion/printers.go +++ b/pkg/printers/internalversion/printers.go @@ -68,6 +68,7 @@ import ( "k8s.io/kubernetes/pkg/apis/flowcontrol" apihelpers "k8s.io/kubernetes/pkg/apis/flowcontrol/util" "k8s.io/kubernetes/pkg/apis/networking" + networkingutil "k8s.io/kubernetes/pkg/apis/networking/util" nodeapi "k8s.io/kubernetes/pkg/apis/node" "k8s.io/kubernetes/pkg/apis/policy" "k8s.io/kubernetes/pkg/apis/rbac" @@ -1494,6 +1495,11 @@ func printIngressClass(obj *networking.IngressClass, options printers.GenerateOp row := metav1.TableRow{ Object: runtime.RawExtension{Object: obj}, } + + name := obj.Name + if networkingutil.HasDefaultAnnotation(obj.ObjectMeta) { + name += " (default)" + } parameters := "" if obj.Spec.Parameters != nil { parameters = obj.Spec.Parameters.Kind @@ -1503,7 +1509,7 @@ func printIngressClass(obj *networking.IngressClass, options printers.GenerateOp parameters = parameters + "/" + obj.Spec.Parameters.Name } createTime := translateTimestampSince(obj.CreationTimestamp) - row.Cells = append(row.Cells, obj.Name, obj.Spec.Controller, parameters, createTime) + row.Cells = append(row.Cells, name, obj.Spec.Controller, parameters, createTime) return []metav1.TableRow{row}, nil } diff --git a/pkg/printers/internalversion/printers_test.go b/pkg/printers/internalversion/printers_test.go index cc0700be31f..e4376ec66e6 100644 --- a/pkg/printers/internalversion/printers_test.go +++ b/pkg/printers/internalversion/printers_test.go @@ -26,6 +26,7 @@ import ( "github.com/google/go-cmp/cmp" apiv1 "k8s.io/api/core/v1" + networkingv1 "k8s.io/api/networking/v1" "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime/schema" @@ -1055,6 +1056,21 @@ func TestPrintIngressClass(t *testing.T) { }, }, expected: []metav1.TableRow{{Cells: []interface{}{"test2", "example.com/controller2", "", "11y"}}}, + }, { + name: "example with default annotation", + ingressClass: &networking.IngressClass{ + ObjectMeta: metav1.ObjectMeta{ + Name: "test-default", + CreationTimestamp: metav1.Time{Time: time.Now().Add(time.Duration(-9 * 365 * 24 * time.Hour))}, + Annotations: map[string]string{ + networkingv1.AnnotationIsDefaultIngressClass: "true", + }, + }, + Spec: networking.IngressClassSpec{ + Controller: "example.com/controller", + }, + }, + expected: []metav1.TableRow{{Cells: []interface{}{"test-default (default)", "example.com/controller", "", "9y"}}}, }} for _, testCase := range testCases {