From 946ada3b200cf159a9e088219206cd01e033f780 Mon Sep 17 00:00:00 2001 From: Konrad Kaim Date: Thu, 6 Nov 2025 08:51:53 +0000 Subject: [PATCH] remove deprecated Ingress api from describe Kubernetes-commit: 6da8d6e94d48e44df843e9633ecfb515cdadbf1e --- pkg/describe/describe.go | 136 +--------------------------------- pkg/describe/describe_test.go | 51 +------------ 2 files changed, 5 insertions(+), 182 deletions(-) diff --git a/pkg/describe/describe.go b/pkg/describe/describe.go index f9f02a47c..578bc94c2 100644 --- a/pkg/describe/describe.go +++ b/pkg/describe/describe.go @@ -211,7 +211,6 @@ func describerMap(clientConfig *rest.Config) (map[schema.GroupKind]ResourceDescr {Group: discoveryv1.GroupName, Kind: "EndpointSlice"}: &EndpointSliceDescriber{c}, {Group: autoscalingv2.GroupName, Kind: "HorizontalPodAutoscaler"}: &HorizontalPodAutoscalerDescriber{c}, {Group: extensionsv1beta1.GroupName, Kind: "Ingress"}: &IngressDescriber{c}, - {Group: networkingv1beta1.GroupName, Kind: "Ingress"}: &IngressDescriber{c}, {Group: networkingv1.GroupName, Kind: "Ingress"}: &IngressDescriber{c}, {Group: networkingv1.GroupName, Kind: "IngressClass"}: &IngressClassDescriber{c}, {Group: networkingv1beta1.GroupName, Kind: "ServiceCIDR"}: &ServiceCIDRDescriber{c}, @@ -2619,50 +2618,14 @@ type IngressDescriber struct { func (i *IngressDescriber) Describe(namespace, name string, describerSettings DescriberSettings) (string, error) { var events *corev1.EventList - // try ingress/v1 first (v1.19) and fallback to ingress/v1beta if an err occurs netV1, err := i.client.NetworkingV1().Ingresses(namespace).Get(context.TODO(), name, metav1.GetOptions{}) - if err == nil { - if describerSettings.ShowEvents { - events, _ = searchEvents(i.client.CoreV1(), netV1, describerSettings.ChunkSize) - } - return i.describeIngressV1(netV1, events) - } - netV1beta1, err := i.client.NetworkingV1beta1().Ingresses(namespace).Get(context.TODO(), name, metav1.GetOptions{}) - if err == nil { - if describerSettings.ShowEvents { - events, _ = searchEvents(i.client.CoreV1(), netV1beta1, describerSettings.ChunkSize) - } - return i.describeIngressV1beta1(netV1beta1, events) - } - return "", err -} - -func (i *IngressDescriber) describeBackendV1beta1(ns string, backend *networkingv1beta1.IngressBackend) string { - endpointSliceList, err := i.client.DiscoveryV1().EndpointSlices(ns).List(context.TODO(), metav1.ListOptions{ - LabelSelector: fmt.Sprintf("%s=%s", discoveryv1.LabelServiceName, backend.ServiceName), - }) if err != nil { - return fmt.Sprintf("", err) + return "", err } - service, err := i.client.CoreV1().Services(ns).Get(context.TODO(), backend.ServiceName, metav1.GetOptions{}) - if err != nil { - return fmt.Sprintf("", err) + if describerSettings.ShowEvents { + events, _ = searchEvents(i.client.CoreV1(), netV1, describerSettings.ChunkSize) } - spName := "" - for i := range service.Spec.Ports { - sp := &service.Spec.Ports[i] - switch backend.ServicePort.Type { - case intstr.String: - if backend.ServicePort.StrVal == sp.Name { - spName = sp.Name - } - case intstr.Int: - if int32(backend.ServicePort.IntVal) == sp.Port { - spName = sp.Name - } - } - } - return formatEndpointSlices(endpointSliceList.Items, sets.New(spName)) + return i.describeIngressV1(netV1, events) } func (i *IngressDescriber) describeBackendV1(ns string, backend *networkingv1.IngressBackend) string { @@ -2754,69 +2717,6 @@ func (i *IngressDescriber) describeIngressV1(ing *networkingv1.Ingress, events * }) } -func (i *IngressDescriber) describeIngressV1beta1(ing *networkingv1beta1.Ingress, events *corev1.EventList) (string, error) { - return tabbedString(func(out io.Writer) error { - w := NewPrefixWriter(out) - w.Write(LEVEL_0, "Name:\t%v\n", ing.Name) - printLabelsMultiline(w, "Labels", ing.Labels) - w.Write(LEVEL_0, "Namespace:\t%v\n", ing.Namespace) - w.Write(LEVEL_0, "Address:\t%v\n", ingressLoadBalancerStatusStringerV1beta1(ing.Status.LoadBalancer, true)) - ingressClassName := "" - if ing.Spec.IngressClassName != nil { - ingressClassName = *ing.Spec.IngressClassName - } - w.Write(LEVEL_0, "Ingress Class:\t%v\n", ingressClassName) - def := ing.Spec.Backend - ns := ing.Namespace - if def == nil { - w.Write(LEVEL_0, "Default backend:\t\n") - } else { - w.Write(LEVEL_0, "Default backend:\t%s\n", i.describeBackendV1beta1(ns, def)) - } - if len(ing.Spec.TLS) != 0 { - describeIngressTLSV1beta1(w, ing.Spec.TLS) - } - w.Write(LEVEL_0, "Rules:\n Host\tPath\tBackends\n") - w.Write(LEVEL_1, "----\t----\t--------\n") - count := 0 - for _, rules := range ing.Spec.Rules { - - if rules.HTTP == nil { - continue - } - count++ - host := rules.Host - if len(host) == 0 { - host = "*" - } - w.Write(LEVEL_1, "%s\t\n", host) - for _, path := range rules.HTTP.Paths { - w.Write(LEVEL_2, "\t%s \t%s (%s)\n", path.Path, backendStringer(&path.Backend), i.describeBackendV1beta1(ing.Namespace, &path.Backend)) - } - } - if count == 0 { - w.Write(LEVEL_1, "%s\t%s \t\n", "*", "*") - } - printAnnotationsMultiline(w, "Annotations", ing.Annotations) - - if events != nil { - DescribeEvents(events, w) - } - return nil - }) -} - -func describeIngressTLSV1beta1(w PrefixWriter, ingTLS []networkingv1beta1.IngressTLS) { - w.Write(LEVEL_0, "TLS:\n") - for _, t := range ingTLS { - if t.SecretName == "" { - w.Write(LEVEL_1, "SNI routes %v\n", strings.Join(t.Hosts, ",")) - } else { - w.Write(LEVEL_1, "%v terminates %v\n", t.SecretName, strings.Join(t.Hosts, ",")) - } - } -} - func describeIngressTLSV1(w PrefixWriter, ingTLS []networkingv1.IngressTLS) { w.Write(LEVEL_0, "TLS:\n") for _, t := range ingTLS { @@ -5418,14 +5318,6 @@ func serviceBackendStringer(backend *networkingv1.IngressServiceBackend) string return fmt.Sprintf("%v:%v", backend.Name, bPort) } -// backendStringer behaves just like a string interface and converts the given backend to a string. -func backendStringer(backend *networkingv1beta1.IngressBackend) string { - if backend == nil { - return "" - } - return fmt.Sprintf("%v:%v", backend.ServiceName, backend.ServicePort.String()) -} - // findNodeRoles returns the roles of a given node. // The roles are determined by looking for: // * a node-role.kubernetes.io/="" label @@ -5466,26 +5358,6 @@ func ingressLoadBalancerStatusStringerV1(s networkingv1.IngressLoadBalancerStatu return r } -// ingressLoadBalancerStatusStringerV1beta1 behaves mostly like a string interface and converts the given status to a string. -// `wide` indicates whether the returned value is meant for --o=wide output. If not, it's clipped to 16 bytes. -func ingressLoadBalancerStatusStringerV1beta1(s networkingv1beta1.IngressLoadBalancerStatus, wide bool) string { - ingress := s.Ingress - result := sets.New[string]() - for i := range ingress { - if ingress[i].IP != "" { - result.Insert(ingress[i].IP) - } else if ingress[i].Hostname != "" { - result.Insert(ingress[i].Hostname) - } - } - - r := strings.Join(sets.List(result), ",") - if !wide && len(r) > LoadBalancerWidth { - r = r[0:(LoadBalancerWidth-3)] + "..." - } - return r -} - // searchEvents finds events about the specified object. // It is very similar to CoreV1.Events.Search, but supports the Limit parameter. func searchEvents(client corev1client.EventsGetter, objOrRef runtime.Object, limit int64) (*corev1.EventList, error) { diff --git a/pkg/describe/describe_test.go b/pkg/describe/describe_test.go index 10cb64afc..bee1f11f3 100644 --- a/pkg/describe/describe_test.go +++ b/pkg/describe/describe_test.go @@ -3551,38 +3551,6 @@ func TestDescribeJob(t *testing.T) { func TestDescribeIngress(t *testing.T) { ingresClassName := "test" - backendV1beta1 := networkingv1beta1.IngressBackend{ - ServiceName: "default-backend", - ServicePort: intstr.FromInt32(80), - } - v1beta1 := fake.NewClientset(&networkingv1beta1.Ingress{ - ObjectMeta: metav1.ObjectMeta{ - Name: "bar", - Labels: map[string]string{ - "id1": "app1", - "id2": "app2", - }, - Namespace: "foo", - }, - Spec: networkingv1beta1.IngressSpec{ - IngressClassName: &ingresClassName, - Rules: []networkingv1beta1.IngressRule{ - { - Host: "foo.bar.com", - IngressRuleValue: networkingv1beta1.IngressRuleValue{ - HTTP: &networkingv1beta1.HTTPIngressRuleValue{ - Paths: []networkingv1beta1.HTTPIngressPath{ - { - Path: "/foo", - Backend: backendV1beta1, - }, - }, - }, - }, - }, - }, - }, - }) backendV1 := networkingv1.IngressBackend{ Service: &networkingv1.IngressServiceBackend{ Name: "default-backend", @@ -3635,23 +3603,6 @@ func TestDescribeIngress(t *testing.T) { input *fake.Clientset output string }{ - "IngressRule.HTTP.Paths.Backend.Service v1beta1": { - input: v1beta1, - output: `Name: bar -Labels: id1=app1 - id2=app2 -Namespace: foo -Address: -Ingress Class: test -Default backend: -Rules: - Host Path Backends - ---- ---- -------- - foo.bar.com - /foo default-backend:80 () -Annotations: -Events: ` + "\n", - }, "IngressRule.HTTP.Paths.Backend.Service v1": { input: netv1, output: `Name: bar @@ -5232,7 +5183,7 @@ func TestDescribeEvents(t *testing.T) { }, events), }, "IngressDescriber": &IngressDescriber{ - fake.NewClientset(&networkingv1beta1.Ingress{ + fake.NewClientset(&networkingv1.Ingress{ ObjectMeta: metav1.ObjectMeta{ Name: "bar", Namespace: "foo",