mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-24 12:15:52 +00:00
ingressclass
This commit is contained in:
parent
89aaf7c02d
commit
60b18fbf9d
@ -20,6 +20,7 @@ import (
|
||||
"context"
|
||||
"fmt"
|
||||
"io"
|
||||
"sort"
|
||||
|
||||
networkingv1 "k8s.io/api/networking/v1"
|
||||
networkingv1beta1 "k8s.io/api/networking/v1beta1"
|
||||
@ -141,10 +142,14 @@ func getDefaultClass(lister networkingv1listers.IngressClassLister) (*networking
|
||||
if len(defaultClasses) == 0 {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
sort.Slice(defaultClasses, func(i, j int) bool {
|
||||
if defaultClasses[i].CreationTimestamp.UnixNano() == defaultClasses[j].CreationTimestamp.UnixNano() {
|
||||
return defaultClasses[i].Name < defaultClasses[j].Name
|
||||
}
|
||||
return defaultClasses[i].CreationTimestamp.UnixNano() > defaultClasses[j].CreationTimestamp.UnixNano()
|
||||
})
|
||||
if len(defaultClasses) > 1 {
|
||||
klog.V(3).Infof("%d default IngressClasses were found, only 1 allowed", len(defaultClasses))
|
||||
return nil, errors.NewInternalError(fmt.Errorf("%d default IngressClasses were found, only 1 allowed", len(defaultClasses)))
|
||||
klog.V(4).Infof("%d default IngressClasses were found, choosing the newest: %s", len(defaultClasses), defaultClasses[0].Name)
|
||||
}
|
||||
|
||||
return defaultClasses[0], nil
|
||||
|
@ -18,13 +18,12 @@ package defaultingressclass
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"reflect"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
networkingv1 "k8s.io/api/networking/v1"
|
||||
networkingv1beta1 "k8s.io/api/networking/v1beta1"
|
||||
"k8s.io/apimachinery/pkg/api/errors"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apiserver/pkg/admission"
|
||||
admissiontesting "k8s.io/apiserver/pkg/admission/testing"
|
||||
@ -89,6 +88,31 @@ func TestAdmission(t *testing.T) {
|
||||
},
|
||||
}
|
||||
|
||||
defaultClassWithCreateTime1 := &networkingv1.IngressClass{
|
||||
TypeMeta: metav1.TypeMeta{
|
||||
Kind: "IngressClass",
|
||||
},
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Name: "default1",
|
||||
CreationTimestamp: metav1.NewTime(time.Date(2022, time.Month(1), 1, 0, 0, 0, 1, time.UTC)),
|
||||
Annotations: map[string]string{
|
||||
networkingv1.AnnotationIsDefaultIngressClass: "true",
|
||||
},
|
||||
},
|
||||
}
|
||||
defaultClassWithCreateTime2 := &networkingv1.IngressClass{
|
||||
TypeMeta: metav1.TypeMeta{
|
||||
Kind: "IngressClass",
|
||||
},
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Name: "default2",
|
||||
CreationTimestamp: metav1.NewTime(time.Date(2022, time.Month(1), 1, 0, 0, 0, 0, time.UTC)),
|
||||
Annotations: map[string]string{
|
||||
networkingv1.AnnotationIsDefaultIngressClass: "true",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
testCases := []struct {
|
||||
name string
|
||||
classes []*networkingv1.IngressClass
|
||||
@ -138,12 +162,12 @@ func TestAdmission(t *testing.T) {
|
||||
expectedError: nil,
|
||||
},
|
||||
{
|
||||
name: "two defaults, error with Ingress with class field=nil",
|
||||
name: "two defaults with the same creation time, choose the one with the lower name",
|
||||
classes: []*networkingv1.IngressClass{defaultClass1, defaultClass2, classWithFalseDefault, classWithNoDefault, classWithEmptyDefault},
|
||||
classField: nil,
|
||||
classAnnotation: nil,
|
||||
expectedClass: nil,
|
||||
expectedError: errors.NewForbidden(networkingv1.Resource("ingresses"), "testing", errors.NewInternalError(fmt.Errorf("2 default IngressClasses were found, only 1 allowed"))),
|
||||
expectedClass: utilpointer.StringPtr(defaultClass1.Name),
|
||||
expectedError: nil,
|
||||
},
|
||||
{
|
||||
name: "two defaults, no modification with Ingress with class field=''",
|
||||
@ -153,6 +177,14 @@ func TestAdmission(t *testing.T) {
|
||||
expectedClass: utilpointer.StringPtr(""),
|
||||
expectedError: nil,
|
||||
},
|
||||
{
|
||||
name: "two defaults, choose the one with the newer creation time",
|
||||
classes: []*networkingv1.IngressClass{defaultClassWithCreateTime1, defaultClassWithCreateTime2, classWithFalseDefault, classWithNoDefault, classWithEmptyDefault},
|
||||
classField: nil,
|
||||
classAnnotation: nil,
|
||||
expectedClass: utilpointer.StringPtr(defaultClassWithCreateTime1.Name),
|
||||
expectedError: nil,
|
||||
},
|
||||
}
|
||||
|
||||
for _, testCase := range testCases {
|
||||
|
Loading…
Reference in New Issue
Block a user